[Ttssh2-commit] [8810] 文字ペースト時にクラッシュ, Paste delay per line が効かない

Back to archive index
scmno****@osdn***** scmno****@osdn*****
2020年 6月 23日 (火) 23:55:45 JST


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) {


Ttssh2-commit メーリングリストの案内
Back to archive index