またも以下の2ソースで,pTeX が不審な挙動を示すことを確認しました.
(解決策をまだ考えられていないのが残念ですが)
実行方法は,例によって ptex -ini です.
環境は,Gentoo (amd64) 上で,tetex-src-3.0 + pTeX-3.1.11 です.
(前スレの角藤さんのパッチは当ててあります.それ以外はそのまま)
--- b.tex ここから ---
\input ptex.tex
\tracingall
% このときだけ結果がおかしい.「葉」「あ」が消える
\setbox0=\hbox{\ybaselineshift=1pt
p\kern 2pt \unkern 葉\kern3pt\unkern あ
\discretionary{a}{x}{b}\kern5pt\unkern l gg}\box0
\setbox0=\hbox{\ybaselineshift=0pt
p\kern 2pt \unkern 葉\kern3pt\unkern あ
\discretionary{a}{x}{b}\kern5pt\unkern l gg}\box0
\setbox0=\hbox{\ybaselineshift=1pt
p\kern 2pt \unkern 葉\kern3pt\unkern あ
\kern5pt\unkern l gg}\box0
\setbox0=\hbox{\ybaselineshift=0pt
p\kern 2pt \unkern 葉\kern3pt\unkern あ
\kern5pt\unkern l gg}\box0
\end
--- b.tex ここまで ---
ソース中のコメントに書きましたが,(segfaultしないとしても)
最初の段落だけ,日本語の「葉」「あ」が書けてしまいます.
ptex-base.ch [47.1105] delete_last 中の,disc_node まわりの処理が
おかしくなっているような気がします.
また,このソースは
> https://okumuralab.org/tex/mod/forum/discuss.php?d=402#p2150
に載せたものと実質的には同じものです.
--- c.tex ここから ---
\input ptex.tex
\tracingall
\chardef\er=`ぴ
\hbox{\tate\accent`いえ\accent`い x\accent`れ\er}
\end
--- c.tex ここまで ---
こちらは segfault します.3つ一組が揃ってエラーが起きるようです.
旧 a.tex と c.tex に対するパッチです。
b.tex と新 a.tex はわかりません。
新 a.tex は p=-null (minus null ? 無意味?) のときアクセス違反
となっているように見えます。
b.tex と新 a.tex はわかりません。
新 a.tex は p=-null (minus null ? 無意味?) のときアクセス違反
となっているように見えます。
旧 a.tex, b.tex, c.texに対するパッチです。
c.tex はアクセス違反が無くなるだけで、解決では
ないかもしれません。
新 a.tex は p=max_halfword になってアクセス違反に
なっているようです。他のところに原因があるのでしょうけど。
c.tex はアクセス違反が無くなるだけで、解決では
ないかもしれません。
新 a.tex は p=max_halfword になってアクセス違反に
なっているようです。他のところに原因があるのでしょうけど。
パッチありがとうございます.b.texで動作を確認しました.c.texでは,アクセス違反はなくなっているようですが,dviは不正なもののような気がします.
しかし,
> { @<Append |disp_node| at begin of displace area@>; }
の副作用なのか,今度は次のソースで無限ループが発生しているようです:
(3/7付けのパッチでは大丈夫でした)
--- b2.tex ここから ---
\input ptex.tex
\setbox0=\hbox{\ybaselineshift=1pt
p\kern 2pt \unkern 葉\kern3pt\unkern あ
% 下のようにすると無限ループ
\discretionary{a}{x}{b}\kern5pt\unkern}
\showboxdepth=\maxdimen\showboxbreadth=\maxdimen\showbox0\box0\end
--- ここまで ---
しかし,
> { @<Append |disp_node| at begin of displace area@>; }
の副作用なのか,今度は次のソースで無限ループが発生しているようです:
(3/7付けのパッチでは大丈夫でした)
--- b2.tex ここから ---
\input ptex.tex
\setbox0=\hbox{\ybaselineshift=1pt
p\kern 2pt \unkern 葉\kern3pt\unkern あ
% 下のようにすると無限ループ
\discretionary{a}{x}{b}\kern5pt\unkern}
\showboxdepth=\maxdimen\showboxbreadth=\maxdimen\showbox0\box0\end
--- ここまで ---
b2.tex については,
ptex-base.ch.0308.diff + ptex-base.ch.0308-b.diff
で無限ループは収まるようです.
しかし,今度は(b2.tex 処理時)「葉」「あ」の間に
\displace 1.0 が挟まってしまいます.
ptex-base.ch.0308.diff + ptex-base.ch.0308-b.diff
で無限ループは収まるようです.
しかし,今度は(b2.tex 処理時)「葉」「あ」の間に
\displace 1.0 が挟まってしまいます.
b2.tex に対するパッチをつくってみました,
ptex-base.ch.0308.diff の後に適用します.
これでも,新 a.tex は segfault を起こすようです.
引き続き,調べてみます,
ptex-base.ch.0308.diff の後に適用します.
これでも,新 a.tex は segfault を起こすようです.
引き続き,調べてみます,