以前の「TeXエンジンが Abort trap 6 で落ちる」の続編(!?)です。
$\mathchoice{あ}{}{}{}$
\bye
というソース (UTF8) を
$ ptex test
でコンパイルしようとすると,次のように Segmentation fault で落ちます(TeX Live 2015 on OS X 10.10 Yosemite で確認)。
This is pTeX, Version 3.14159265-p3.6 (utf8.euc) (TeX Live 2015) (preloaded format=ptex)
restricted \write18 enabled.
(./test.texSegmentation fault: 11
pTeX 系列の (e)(u)pTeX の4種類のエンジン全てで再現しました。
- TeX Live 2015/2014 on Mac
- TeX Live 2015/2014 on Windows
- W32TeX 最新版
- W32TeX 2012年頃の版
- TeX Live 2012 on Cygwin
で再現が確認されており,随分昔から存在するバグのようです。
一方,
- 最新版 W32TeX で pTeX のオプションに
-no-guess-input-enc
を付けた場合 - ソースが SJIS のものを TeX Live 2012 on Cygwin で処理した場合
はエラーとならないことも確認されており,どうやら UTF8 の文字コードまわりの問題のようです。
Twitter の情報のまとめ
echo "\relax$\mathchoice{あ}{}{}{}$\bye" | ptex で TeX Live 2015 の pTeX に Segmentation fault を起こさせることに成功した! pic.twitter.com/ciF8QJkzYd
— Yusuke Terada (@doraTeX) 2015, 9月 9
@doraTeX W32TeXでも再現しました(ptex.exeは動作を停止しました)。ただ-no-guess-input-encにするとSegmentation faultを起こしません。
— Acetaminophen (@aminophen) 2015, 9月 9
@aminophen TeX Live 2014 でも再現しました。(e)(u)pTeX の全てで再現します。もしやだいぶ昔からあるバグ!?
— Yusuke Terada (@doraTeX) 2015, 9月 9
@doraTeX TeX Live 2012 on Cygwinでも再現です。結構古くからあるんですかね。
— Acetaminophen (@aminophen) 2015, 9月 9
@doraTeX TL2012/Cygwinと最新W32TeXで試したのですが、hoge.texに当該ソースを書いてptexにかけると ・SJISで保存→Cyg:正常、W32:guess有無に依らず失敗 ・UTF8で保存→Cyg:失敗、W32:先述のとおり でした。
— Acetaminophen (@aminophen) 2015, 9月 9
@doraTeX TL2014,2015のWin版もW32TeXの2012年頃のも、先ほどのW32TeX最新と同じですね。文字コードまわりで何かが起きていますね。
— Acetaminophen (@aminophen) 2015, 9月 9
続報 (2015/09/10)
ptex-base.ch を北川さんが改修してくださいました。
これにより,pTeX のバージョンは p3.6 から p3.7 になりました。(ptex_version.h, ptex-base.ch)
既に TeX Live の上流にも r38333, r38334 としてコミットされており,次の TeX Live 2016 のリリースにおいて修正されることになります。
先程のpTeXのバグを,北川さんが早速改修してくださいました!これにより,pTeXのバージョンが p3.6 から p3.7 に上がっています。 https://t.co/F3SZslqd6n https://t.co/EjjDXjoisp
— Yusuke Terada (@doraTeX) 2015, 9月 10
@doraTeX 早速W32TeXを更新し、直ったことを確認しました。
— Acetaminophen (@aminophen) 2015, 9月 10