[Ttssh2-commit] [4493] 圧縮付きでSCP送信を行うと、BOFで落ちるため、workaroundとして、

svnno****@sourc***** svnno****@sourc*****
2011年 6月 11日 (土) 00:10:49 JST


Revision: 4493
          http://sourceforge.jp/projects/ttssh2/svn/view?view=rev&revision=4493
Author:   yutakapon
Date:     2011-06-11 00:10:49 +0900 (Sat, 11 Jun 2011)

Log Message:
-----------
圧縮付きでSCP送信を行うと、BOFで落ちるため、workaroundとして、
圧縮の場合はバッファサイズを小さくする。

FIXME: 根本処置ではないので、環境によっては、やはり落ちるかもしれない。

Modified Paths:
--------------
    trunk/ttssh2/ttxssh/ssh.c


-------------- next part --------------
Modified: trunk/ttssh2/ttxssh/ssh.c
===================================================================
--- trunk/ttssh2/ttxssh/ssh.c	2011-06-09 15:25:43 UTC (rev 4492)
+++ trunk/ttssh2/ttxssh/ssh.c	2011-06-10 15:10:49 UTC (rev 4493)
@@ -7522,7 +7522,8 @@
 	Channel_t *c = (Channel_t *)p;
 	PTInstVar pvar = c->scp.pvar;
 	long long total_size = 0;
-	char buf[8192];
+	char *buf = NULL;
+	size_t buflen;
 	char s[80];
 	size_t ret;
 	HWND hWnd = c->scp.progress_window;
@@ -7531,6 +7532,16 @@
 	DWORD stime;
 	int elapsed, prev_elapsed;
 
+	// ˆ³k•t‚«‚ÅSCP‘—M‚ðs‚¤‚ƁABOF‚Å—Ž‚¿‚邽‚߁Aworkaround‚Æ‚µ‚āA
+	// ˆ³k‚̏ꍇ‚̓oƒbƒtƒ@ƒTƒCƒY‚ð¬‚³‚­‚·‚éB
+	// (2011.6.11 yutaka)
+	if (pvar->ts_SSH->CompressionLevel == 0) {
+		buflen = 8192;
+	} else {
+		buflen = 1024;
+	}
+	buf = malloc(buflen);
+
 	//SendMessage(GetDlgItem(hWnd, IDC_FILENAME), WM_SETTEXT, 0, (LPARAM)c->scp.localfile);
 	SendMessage(GetDlgItem(hWnd, IDC_FILENAME), WM_SETTEXT, 0, (LPARAM)c->scp.localfilefull);
 
@@ -7545,7 +7556,7 @@
 			goto cancel_abort;
 
 		// ƒtƒ@ƒCƒ‹‚©‚ç“ǂݍž‚ñ‚¾ƒf[ƒ^‚Í‚©‚Ȃ炸ƒT[ƒo‚Ö‘—M‚·‚éB
-		ret = fread(buf, 1, sizeof(buf), c->scp.localfp);
+		ret = fread(buf, 1, buflen, c->scp.localfp);
 		if (ret == 0)
 			break;
 
@@ -7598,7 +7609,7 @@
 			prev_elapsed = elapsed;
 		}
 
-	} while (ret <= sizeof(buf));
+	} while (ret <= buflen);
 
 	// eof
 	c->scp.state = SCP_DATA;
@@ -7612,6 +7623,8 @@
 
 	ShowWindow(hWnd, SW_HIDE);
 
+	free(buf);
+
 	return 0;
 
 cancel_abort:
@@ -7624,6 +7637,8 @@
 
 abort:
 
+	free(buf);
+
 	return 0;
 }
 



Ttssh2-commit メーリングリストの案内