Revision: 8810 https://osdn.net/projects/ttssh2/scm/svn/commits/8810 Author: zmatsuo Date: 2020-06-23 23:55:45 +0900 (Tue, 23 Jun 2020) Log Message: ----------- 文字ペースト時にクラッシュ, Paste delay per line が効かない - 文字ペースト時にクラッシュを修正 - 送信前に改行コードは CR(0x000d) に正規化する - この時文字列終端の 0x0000 は送信しないので削除される - 文字数(wchar_t単位)を指定するところを誤ってバイト数を指定して 改行LF(0x000a)、文字末(0x0000)を検索 - LFは実装の誤りで、CRが正しい - 文字数を指定して検索するよう修正 - 文字列をオーバーランして、改行(LF,0x000a)が見つかったとき 改行までを1行として送信(改行までのゴミも送信される) - オーバーランした送信バイト数を 残り送信バイト数から減算してオーバーフロー とても大きな値になる - 引き続き送信しようとしてクラッシュする - Paste delay per lineが効かない - 内部データの改行コードの検索をCR(0x000d)に修正 Modified Paths: -------------- trunk/teraterm/teraterm/sendmem.cpp -------------- next part -------------- Modified: trunk/teraterm/teraterm/sendmem.cpp =================================================================== --- trunk/teraterm/teraterm/sendmem.cpp 2020-06-22 15:11:13 UTC (rev 8809) +++ trunk/teraterm/teraterm/sendmem.cpp 2020-06-23 14:55:45 UTC (rev 8810) @@ -330,11 +330,12 @@ // 1\x83\x89\x83C\x83\x93\x91\x97\x90M need_delay = TRUE; - // 1\x8Ds\x8E\xE6\x82\xE8\x8Fo\x82\xB5(\x89\xFC\x8Ds\x83R\x81[\x83h\x82\xCD 0x0a \x82ɐ\xB3\x8BK\x89\xBB\x82\xB3\x82\xEA\x82Ă\xA2\x82\xE9) + // 1\x8Ds\x8E\xE6\x82\xE8\x8Fo\x82\xB5(\x89\xFC\x8Ds\x83R\x81[\x83h\x82\xCD NormalizeLineBreak() \x82\xC5 CR(0x0d) \x82ɐ\xB3\x8BK\x89\xBB\x82\xB3\x82\xEA\x82Ă\xA2\x82\xE9) const wchar_t *line_top = (wchar_t *)&p->send_ptr[p->send_index]; - const wchar_t *line_end = wcsnchr(line_top, p->send_left, 0x0a); + const size_t send_left_char = p->send_left / sizeof(wchar_t); + const wchar_t *line_end = wcsnchr(line_top, send_left_char, CR); if (line_end != NULL) { - // 0x0a \x82܂ő\x97\x90M + // CR \x82܂ő\x97\x90M send_len = ((line_end - line_top) + 1) * sizeof(wchar_t); } else { @@ -369,6 +370,7 @@ // \x91\x97\x90M\x82\xB7\x82\xE9 const BYTE *send_ptr = (BYTE *)&p->send_ptr[p->send_index]; + assert(send_len <= p->send_left); p->send_index += send_len; p->send_left -= send_len; if (p->type == SendMemTypeBinary) {