/dev/urandomを表示するとクラッシュする
受信文字コードをUTF-8にして、下記の7バイトを表示すると必ずクラシュするとわかりました
% od -tx1c output 0000000 ba d1 9b 65 63 cc bb 272 321 233 e c 314 273 0000007%
trunk r10294 を置きました。 再現するか見ていただけないでしょうか。
はい、今やりました。再現します。死ぬ場所は変わって、3回中3回全て ACCESS_VIOLATION 0x0029464c in replaceInvalidFileNameChar()でした。 %PROFILE%\AppData\Local\teraterm5にダンプがあるとわかったので添付しました。
再現用ファイルありがとうございます。
To: zmatsuo
BuffGetDrawInfoW() の
bufW[lenW+i] = b->pCombinationChars16[i];のところで落ちるようです。
調査ありがとうございます。
手もとでも再現しました(内容は同じです)。
echo -e "\xba\xd1\x9b\x65\x63\xcc\xbb"r10295 で修正しました。
snapshot に r10295のzip を 置きました。
ba d1 9b 65 が不正な UTF-8 4byte で 1byteづつ処理されて、9b が 1b(ESC) として処理、 63 が見切れてなくて(1b+65ではなく、1b+63?)、 このあたりで画面が消去されて、 カーソルがバッファの先頭に移動します。
最後の cc bb が UTF-8 2byte で U+033b の結合文字で、 カーソル位置の1つ前から再表示しようとして バッファ外を指してしまい例外が発生していました。
コンパイラのバージョン、バイナリの32/64bitでクラッシュしたりしなかったりするような気配です。
cat /dev/urandom で少しの間動かしてみましたが一応大丈夫そうでした。
TERATERM.INI で、プリンタ関連のシーケンスを使用しない状態(PrinterCtrlSequence=off)にして、 ずっとcat /dev/urandom を続けていると別の原因でクラッシュしました。
手もとではクラッシュしない状態になりました。
もう少しテストしてコミットしようと思います。
修正をコミットしました。r10354です。
スナップショットを作りました。
https://osdn.net/projects/ttssh2/storage/snapshot/teraterm-5.0-alpha1-r10354-20221109-appveyor.zip
クローズします。
Tera Term 5 alpha 1で Linuxへ接続し cat /dev/urandom すると Tera Termがクラッシュします。 TelnetでもSSHでもクラッシュします。 クラッシュしたとき、下記メッセージがポップアップしてきました。