texjporg / tex-jp-build

Minimum source repository to build Japanese TeX processing tools
23 stars 6 forks source link

[e-pTeX] \endlinechar=128 で Abort trap: 6 #89

Closed aminophen closed 5 years ago

aminophen commented 5 years ago

以下のソースを eptex で処理すると(100% ではないのですが)Abort trap: 6 で落ちました。

\endlinechar=128
\immediate\openout10=xout.tex
\immediate\closeout10
\end
$ eptex epabort
This is e-pTeX, Version 3.14159265-p3.8.2-190908-2.6 (utf8.euc) (TeX Live 2020/dev) (preloaded format=eptex)
 restricted \write18 enabled.
entering extended mode
(./epabort.texeptex(78820,0x7fff76f50000) malloc: *** error for object 0x7f9a3840cd40: pointer being freed was not allocated
*** set a breakpoint in malloc_error_break to debug
Abort trap: 6

\endlinechar=128 から xout.tex%80 というファイルを open する途中で落ちているような気がするのですが,よくわかっていません。

aminophen commented 5 years ago

テスト環境は macOS 10.11.6 El Capitan (x86_64-apple-darwin15.6.0) です。ptex, eptex, uptex, euptex いずれも -kanji-internal={euc|sjis} の時に高確率で再現しています。

また,自分でビルドしたバイナリだけでなく,TL2019 公式の x86_64-darwin でも同様です。

aminophen commented 5 years ago

(もしかして, [ptex] エラー出力の余分なバイト (#59) とも関係するのだろうか? 和文文字と誤認してバイト数を数え間違っている?)

aminophen commented 5 years ago
%#!ptex
\font\x=ec-lmr10\x

% \escapechar
\string\あいう\par
{\escapechar"E3 \string\あいう}\par

% \newlinechar
\message{あああ}
\message{あ^^e3あ}
\newlinechar"E3
\message{あああ}
\message{あ^^e3あ}

\bye

これらは現行の pTeX では変ですが,printkanji_16bit ブランチ (#81) だと解消しました。

ところが,

は printkanji_16bit ブランチでも直りませんでした。

h-kitagawa commented 5 years ago

和文文字と誤認してバイト数を数え間違っている?

ファイル名を UTF-8 から内部エンコーディングに戻す際,ファイル名を格納する buffer = buf の長さが足りなくなる(と予想される)ことがあります.その際に

buffer = buf = xrealloc(buffer, len=last+64);

とすべきところを,誤って

buffer = xrealloc(buffer, len=last+64);

と buf を更新し忘れていていました.


せっかくなので,platex/#86 に書いた ptexenc の修正を同時にやってもいいかなと思っていますが,そちらの修正は月曜日に行います.

aminophen commented 5 years ago

90 と一緒に r52071 でコミットしました。ありがとうございました。