[前][次][番号順一覧][スレッド一覧]

sylpheed-jp:466

From: Yukimasa TAKANO <takano-sylpheed@xxxxxxxxxx>
Date: Tue, 10 Apr 2001 23:41:59 +0900
Subject: [sylpheed-jp:00466] CR+CR+LF というタイプのタコメール

たかのです。たびたび失礼します。

特定のメールマガジンでsylpheedが固まるので調べてみたら、なんと
CR+CR+LFという、とんでもない改行コードを送ってきているメールでした。
送ってくる某新聞社もタコなら、それを素通ししてしまうMTAs+IMAPdもタコ
なのですが、その巻き添えをSylpheedが喰らうのはイヤなので、パッチを作成
しました。

CRの後にLFが続かない場合、連続するCRをすべて読み飛ばします。
ついでに、scanするデータの終端が徐々に後ろにずれているようなので、
終端が移動しないように修正しました。

このパッチだと、改行をCRに決め打ちしているタイプのタコメールが読めなく
なります(すべてヘッダとして扱われてしまう)が、さすがにそんなタコメール
は見えなくて当然ということで(苦笑)

また、IMAP4環境でしかテストしていませんので、POP3環境の方に影響がないか
どうか、どなたか確認していただけると幸いです。

では、とりいそぎ。

diff -ur sylpheed-0.4.62/src/recv.c sylpheed-0.4.62.doublecr/src/recv.c
--- sylpheed-0.4.62/src/recv.c	Wed Mar  7 00:33:01 2001
+++ sylpheed-0.4.62.doublecr/src/recv.c	Tue Apr 10 23:23:10 2001
@@ -161,8 +161,7 @@
 	} while (count < size);
 
 	prev = buf;
-	while ((cur = memchr(prev, '\r', size)) != NULL) {
-		if (cur - buf + 1 < size && *(cur + 1) == '\n') {
+	while ((cur = memchr(prev, '\r', size - (prev - buf))) != NULL) {
 			if (fwrite(prev, sizeof(gchar), cur - prev, fp) == EOF ||
 			    fwrite("\n", sizeof(gchar), 1, fp) == EOF) {
 				perror("fwrite");
@@ -170,9 +169,16 @@
 				if (nb) sock_set_nonblocking_mode(sock, TRUE);
 				return -1;
 			}
+			if (cur - buf + 1 < size && *(cur + 1) == '\n') {
 			prev = cur + 2;
+			}
+			else
+			{
+				while((*(++cur) == '\r') && ((cur - buf) < size));
+				prev = cur;
+				if(*prev == '\n') prev++;
+			}
 			if (prev - buf >= size) break;
-		}
 	}
 
 	if (prev - buf < size && fwrite(buf, sizeof(gchar),


[前][次][番号順一覧][スレッド一覧]