pTeX でセグメンテーション違反

pTeX でセグメンテーション違反

- 北川 弘典 の投稿
返信数: 13
北川です.

pTeX の動作チェック用のコードを書いていたのですが,添付したソースを
ptex -ini a.tex
などとして実行させると,pTeX がセグメンテーション違反を起こし,強制終了されてしまうことを見つけました.

tetex-3.0 + pTeX-3.1.11(←但し debug用の print 文を大量に挿入しています),
ptetex3-20091009 + e-pTeX-100131 + upTeX-0.29,
ptexlive-20091009 + e-pTeX-100131 + upTeX-0.29
で試しましたが,どれでも
ptex, eptex: NG, uptex, euptex: OK
となっているようです.

僕の環境のみの症状ならばいいのですが,皆様の環境では発生するでしょうか?

(ちなみに,こちらの環境は
Gentoo Linux (amd64, unstable)
gcc-4.4.3, glibc-2.11
です.)
北川 弘典 への返信

Re: pTeX でセグメンテーション違反

- 奥村 晴彦 の投稿
ほんとですね。Macのptexliveで実験:

$ ptex -ini a.tex
This is pTeXk, Version 3.1415926-p3.1.11 (utf8.euc) (TeX Live 2009) (INITEX)
restricted \write18 enabled.
(./a.tex
(/Volumes/HDCN1/local/texlive/p2009/texmf/ptex/plain/base/ptex.tex
(/Volumes/HDCN1/local/texlive/p2009/texmf-dist/tex/plain/base/plain.tex
Preloading the plain format: codes, registers, parameters, fonts, more fonts,
macros, math definitions, output routines, hyphenation
(/Volumes/HDCN1/local/texlive/p2009/texmf/tex/generic/hyphen/hyphen.tex))
(/Volumes/HDCN1/local/texlive/p2009/texmf/ptex/plain/base/kinsoku.tex))
! Insertions can only be added to a same direction vbox.
l.22 \insert3{\yoko ふ}
                     
Segmentation fault
北川 弘典 への返信

Re: pTeX でセグメンテーション違反

- KUROKI Yusuke の投稿
「Cygwin で日本語 TeX」のコンパイル済みバイナリ (ptetex3 の vers. 20090610) で実験しても同様ですね.

$ ptex -kanji=utf8 -ini a.tex
This is pTeX, Version 3.141592-p3.1.10 (utf8.sjis) (Web2C 7.5.4) (INITEX)
(./a.tex
(/usr/local/teTeX/share/texmf/ptex/plain/base/ptex.tex
(/usr/local/teTeX/share/texmf-dist/tex/plain/base/plain.tex
Preloading the plain format: codes, registers, parameters, fonts, more fonts,
macros, math definitions, output routines, hyphenation
(/usr/local/teTeX/share/texmf-dist/tex/generic/hyphen/hyphen.tex))
(/usr/local/teTeX/share/texmf/ptex/plain/base/kinsoku.tex))
! Insertions can only be added to a same direction vbox.
l.22 \insert3{\yoko ふ}

16523 [main] ptex 3620 _cygtls::handle_exceptions: Error while dumping state (probably corrupted stack)
Segmentation fault (core dumped)
北川 弘典 への返信

Re: pTeX でセグメンテーション違反

- 北川 弘典 の投稿
外のコンピュータでも調べてみました.
(漢字コードは適宜 EUC や Shift-JIS に変換してます)
pTeX 2.1.8 でも発生しているのが気になります.どこまで遡れるか,家に戻ったら調べてみます.

--- 1. Solaris 7 ? ---
$ ptex -ini a.tex
This is pTeX, Version p2.1.8, based on TeX, Version 3.14159 (EUC) (Web2C 7.2) (INITEX)
(a.tex
(/usr/local/share/texmf/tex/ptex/ptex.tex
(/usr/local/share/texmf/tex/plain/base/plain.tex
Preloading the plain format: codes, registers, parameters, fonts, more fonts,
macros, math definitions, output routines, hyphenation
(/usr/local/share/texmf/tex/generic/hyphen/hyphen.tex))
(/usr/local/share/texmf/tex/ptex/kinsoku.tex))
! Insertions can only be added to a same direction vbox.
l.22 \insert3{\yoko }

Segmentation fault

↑この投稿を書いている PC(UTF-8)から ssh で入って実行したので,日本語がここでは表示されていません^^;

--- 2. W32TeX on WinXP ---
> ptex -ini a.tex
This is pTeX, Version 3.141592-p3.1.10 (sjis) (Web2C 7.5.5) (INITEX)
(./a.tex
(c:/usr/local/share/texmf/ptex/plain/base/ptex.tex
(c:/usr/local/share/texmf/tex/plain/base/plain.tex
Preloading the plain format: codes, registers, parameters, fonts, more fonts,
macros, math definitions, output routines, hyphenation
(c:/usr/local/share/texmf/tex/generic/hyphen/hyphen.tex))
(c:/usr/local/share/texmf/ptex/plain/base/kinsoku.tex))
! Insertions can only be added to a same direction vbox.
l.22 \insert3{\yoko ふ}

(数秒後,強制終了のダイアログが出現)

↑いつの W32TeX バイナリかはよくわかりませんが,ptex.dll の更新日が 2006/11/14 のようです.

北川 弘典 への返信

Re: pTeX でセグメンテーション違反

- 土 村 の投稿
Vine 2.6r4 です。同じようにクラッシュします。

% ptex -ini a.tex
This is pTeX, Version p3.0.1, based on TeX, Version 3.14159 (EUC) (Web2C 7.3.1) (INITEX)
(a.tex
(/usr/share/texmf/ptex/plain/base/ptex.tex
(/usr/share/texmf/tex/plain/base/plain.tex Preloading the plain format: codes,
registers, parameters, fonts, more fonts, macros, math definitions,
output routines, hyphenation (/usr/share/texmf/tex/generic/hyphen/hyphen.tex))
(/usr/share/texmf/ptex/plain/base/kinsoku.tex))
! Insertions can only be added to a same direction vbox.
l.22 \insert3{\yoko ふ}

セグメントエラー (coreを出力しました)


> ptex, eptex: NG, uptex, euptex: OK

北川さんには釈迦に説法ですが、ちょっと解説を。

セグメントエラーはいやらしいことに、プログラムが不正でも、エラーが出るとは限らないので、上の結果だけをもって uptex, euptex のプログラムが正しいと証明されたことにはなりません。正しい可能性ももちろんありますが、潜在的に ptex 同様の間違いを持っている可能性もあります。

ここ何年もこのエラーで困った人はいないのだから、気にしなくてよいのでは、と思われる向きもあるでしょう。しかしながら、バグの具合によっては、セキュリティーホールになりえます。特に Web サービスとして TeX のコンパイルを提供しているところの攻撃材料になる可能性があります。ですから、開発に近い人ほど、バグの原因を確かめておきたいという気持ちになることでしょう。
土 村 への返信

Re: pTeX でセグメンテーション違反

- Akira Kakuto の投稿
Akira Kakuto への返信

Re: pTeX でセグメンテーション違反

- 土 村 の投稿
ptexlive に仕込ませていただきました。動作検証はまだです(^^;)が、本日版2度めのリリースです。
土 村 への返信

Re: pTeX でセグメンテーション違反

- Akira Kakuto の投稿
インデントをちゃんとしていなかったので、
なおしておいてください。すみません。
動作検証はしていません。

Akira Kakuto への返信

Re: pTeX でセグメンテーション違反

- 土 村 の投稿
動作検証しました。直ったようです。
インデント直しておきます。(else の前のスペース2個消すだけですね。)

% ptex -ini a.tex
This is pTeXk, Version 3.1415926-p3.1.11 (utf8.euc) (TeX Live 2009) (INITEX)
restricted \write18 enabled.
(./a.tex
(/tmp/ptexlive/2009/texmf/ptex/plain/base/ptex.tex
(/tmp/ptexlive/2009/texmf-dist/tex/plain/base/plain.tex
Preloading the plain format: codes, registers, parameters, fonts, more fonts,
macros, math definitions, output routines, hyphenation
(/tmp/ptexlive/2009/texmf/tex/generic/hyphen/hyphen.tex))
(/tmp/ptexlive/2009/texmf/ptex/plain/base/kinsoku.tex))
! Insertions can only be added to a same direction vbox.
l.22 \insert3{\yoko ふ}


Underfull \vbox (badness 10000) has occurred while \output is active

Completed box being shipped out [1]
Memory usage before: 420&4935; after: 324&4934; still untouched: 2994039
! Insertions can only be added to a same direction vbox.
<to be read again>
\end
l.24 \end


Completed box being shipped out [2]
Memory usage before: 364&4933; after: 242&4931; still untouched: 2994039
)
(see the transcript file for additional information)
Output written on a.dvi (2 pages, 296 bytes).
Transcript written on a.log.
北川 弘典 への返信

Re: pTeX でセグメンテーション違反

- 北川 弘典 の投稿
(新たなツリーにした方が良かったかもしれません)
またもや,pTeX でセグメンテーション違反を起こすソースを見つけました.

添付したソースのコンパイル方法は同じで,
> ptex -ini a.tex
です.

(知り合いに頼んで(いつのバイナリか僕はわからないですが)Windows 上でも実行してもらいました.そちらでも「access violation」のメッセージが出たようです.)


北川 弘典 への返信

Re: pTeX でセグメンテーション違反

- TONE Kozaburo の投稿
オプション -kanji=utf8 を追加して,追試してみました。(前のは削除しました。)
最新版の W32TeX (のはず)です。
前のツリーで報告された現象は修正済みのものです。

以下は,ログファイルです。

This is pTeX, Version 3.1415926-p3.1.11 (utf8.sjis) (Web2C 2010/dev) (INITEX)  5 MAR 2010 18:03
restricted \write18 enabled.
%&-line parsing enabled.
**a.tex
(./a.tex (c:/usr/local/share/texmf/tex/plain/ptex/ptex.tex
(c:/usr/local/share/texmf/tex/plain/base/plain.tex
Preloading the plain format: codes, registers,
\maxdimen=\dimen10
\hideskip=\skip10
\centering=\skip11
\p@=\dimen11
\z@=\dimen12
\z@skip=\skip12
\voidb@x=\box10
parameters,
\smallskipamount=\skip13
\medskipamount=\skip14
\bigskipamount=\skip15
\normalbaselineskip=\skip16
\normallineskip=\skip17
\normallineskiplimit=\dimen13
\jot=\dimen14
\interdisplaylinepenalty=\count23
\interfootnotelinepenalty=\count24
fonts, more fonts,
\itfam=\fam4
\slfam=\fam5
\bffam=\fam6
\ttfam=\fam7

macros,
\strutbox=\box11
\mscount=\count25
\tabs=\box12
\tabsyet=\box13
\tabsdone=\box14
math definitions,
\rootbox=\box15
\p@renwd=\dimen15
output routines,
\headline=\toks10
\footline=\toks11
\footins=\insert254
\topins=\insert253
hyphenation
(c:/usr/local/share/texmf/tex/generic/hyphen/hyphen.tex))
\minfam=\fam8
\gtfam=\fam9
\tminfam=\fam10
\tgtfam=\fam11

(c:/usr/local/share/texmf/tex/plain/ptex/kinsoku.tex))
! Emergency stop.
l.7
   
access violation

No pages of output.
TONE Kozaburo への返信

Re: pTeX でセグメンテーション違反

- 北川 弘典 の投稿
追試をありがとうございます.
もう一個変な挙動(\accent 周り)が見つかったので,整理してから新たなツリーとしてもう一回投稿してみることにします.