|
sylpheed-jp:466
From: Yukimasa TAKANO <takano-sylpheed@xxxxxxxxxx>
たかのです。たびたび失礼します。
特定のメールマガジンで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),
|