diff options
-rw-r--r-- | NEWS | 6 | ||||
-rw-r--r-- | transact.c | 17 |
2 files changed, 23 insertions, 0 deletions
@@ -50,6 +50,12 @@ fetchmail 6.3.5 (not yet released): * fetchmail expects Received: headers in a particular format when parsing envelopes. +# BUG FIXES: +* For protocols such as IMAP that are not delimited by "." lines, truncate the + input buffer when the message has been completely read, to avoid taking + trailing garbage into the message if the terminal CRLF is missing. Fixes + Debian Bug#312415. (Patch suggested by Mike Jones, Manchester Univ.). + # TRANSLATION UPDATES: * Russian/ru (Pavel Maryanov), Vietnamese/vi (Clytie Siddall) @@ -1335,6 +1335,9 @@ int readbody(int sock, struct query *ctl, flag forward, int len) while (protocol->delimited || len > 0) { set_timeout(mytimeout); + /* XXX FIXME: for undelimited protocols that ship the size, such + * as IMAP, we might want to use the count of remaining characters + * instead of the buffer size -- not for fetchmail 6.3.X though */ if ((linelen = SockRead(sock, inbufp, sizeof(buf)-4-(inbufp-buf)))==-1) { set_timeout(0); @@ -1357,6 +1360,20 @@ int readbody(int sock, struct query *ctl, flag forward, int len) sizeticker -= SIZETICKER; } } + + /* Mike Jones, Manchester University, 2006: + * "To fix IMAP MIME Messages in which fetchmail adds the remainder of + * the IMAP packet including the ')' character (part of the IMAP) + * Protocol causing the addition of an extra MIME boundary locally." + * + * However, we shouldn't do this for delimited protocols: + * many POP3 servers (Microsoft, qmail) goof up message sizes + * so we might end truncating messages prematurely. + */ + if (!protocol->delimited && linelen > len) { + inbufp[len] = '\0'; + } + len -= linelen; /* check for end of message */ |