Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[(e)(u)pTeX] INI モードで \char すると Segmentation fault: 11 #123

Closed
aminophen opened this issue Jun 22, 2021 · 8 comments
Closed
Labels

Comments

@aminophen
Copy link
Member

$ ptex -ini '\noindent\char65\end'

これで Segmentation fault: 11 が起こりました。

@aminophen aminophen added the bug label Jun 22, 2021
@aminophen
Copy link
Member Author

$ ptex -ini '\noindent a\end'

も同様に Segmentation fault: 11 でしたが,スペースを入れた

$ ptex -ini '\noindent a \end'

だと大丈夫でした。

@h-kitagawa
Copy link
Member

line_break の前処理 <Get ready to start line breaking>

  • link(temp_head):=link(head) した後に
  • tail が disp_node だったときに tail を削除する

という処理がありますが,これでは link(head)==tail のときにおかしくなります.今回は引っかかっているようです.

https://github.com/texjporg/tex-jp-build/tree/kitagawa_tjb123 でうまく治っていると良いなあ.

@aminophen
Copy link
Member Author

aminophen commented Jun 23, 2021

なるほど。「INI mode 故にフォントが文字を含まないため char_node が生成せず,しかし欧文文字を想定して disp_node だけ先に挿入されてしまったケース」がここに当たってしまうのですね。理解しました。

[追記 22:21] ベースライン補正量が非ゼロの時は,和文文字でも「char_node 非生成だが disp_node だけ先に挿入」が起こる → Segmentation fault になる。

  • 欧文文字:char_node が生成してもしなくても,baselineshift の値によらず,disp_node を先に挿入
  • 和文文字:char_node が生成しない場合,baselineshift がゼロなら disp_node を挿入しない

@aminophen
Copy link
Member Author

kitagawa_tjb123

Segmentation fault が治っていることを確認できました。TeX, pdfTeX, XeTeX では No pages of output. となるのに対して (e-)(u)pTeX では Output written on texput.dvi (1 page, 128 bytes). になるという違いはありますが,問題なく終了したので大丈夫そうです。一応

\tracingoutput1
\showboxdepth10000
\showboxbreadth10000

を仕込んで何が出たのか確認すると

Completed box being shipped out [0]
\vbox(0.0+0.0)x0.0, yoko direction
.\glue(\topskip) 0.0
.\hbox(0.0+0.0)x0.0
..\glue(\rightskip) 0.0
.\hbox(0.0+0.0)x0.0
.\glue 0.0 plus 1.0fill

でした。

@aminophen
Copy link
Member Author

TeX, pdfTeX, XeTeX では No pages of output. となるのに対して (e-)(u)pTeX では Output written on texput.dvi (1 page, 128 bytes). になるという違い

5fe1e0aline_break に渡る前の end_graf で弾くようにすると解消しました。

@h-kitagawa
Copy link
Member

5fe1e0a で line_break に渡る前の end_graf で弾くようにすると解消しました。

ありがとうございます.<Go into display math mode> のところでも line_break 呼び出しがあったので,10dd7ec で同様の処理を加えました.

@aminophen
Copy link
Member Author

<Go into display math mode> のところでも line_break 呼び出しがあった

確認漏れていましたし,ノード削除も入れておくのが安全でした。ありがとうございます。これで問題なさそうですので,夜にでも merge & commit します。ついでに

もコミットするつもりです。\ucs, \toucs (#121) は不正な値をもう少し調査してからにします。

@aminophen
Copy link
Member Author

  • 本 issue の修正 → r59697
  • ptexenc/unicode-jp.c の修正 → r59698
  • \let した和文文字の kcatcode を再計算しない(昔の pTeX に戻す) → r59699
  • 禁則テーブルの検索の修正 → r59700

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

2 participants