Index: camel/ChangeLog =================================================================== RCS file: /cvs/gnome/evolution/camel/ChangeLog,v retrieving revision 1.2251.2.28 diff -u -p -r1.2251.2.28 ChangeLog --- camel/ChangeLog 3 Dec 2004 03:03:02 -0000 1.2251.2.28 +++ camel/ChangeLog 23 Dec 2004 07:23:55 -0000 @@ -1,3 +1,12 @@ +2004-12-23 Not Zed + + ** See bug #70556. + + * providers/imap/camel-imap-command.c (imap_read_untagged): scan + the non-literal contnet for s-expression brackets, and if we seem + to be outside of one, don't try the 'blank line after literal' + hack. + 2004-12-02 Not Zed ** See bug #69533. Index: camel/providers/imap/camel-imap-command.c =================================================================== RCS file: /cvs/gnome/evolution/camel/providers/imap/camel-imap-command.c,v retrieving revision 1.60.26.2 diff -u -p -r1.60.26.2 camel-imap-command.c --- camel/providers/imap/camel-imap-command.c 3 Dec 2004 03:03:02 -0000 1.60.26.2 +++ camel/providers/imap/camel-imap-command.c 23 Dec 2004 07:23:56 -0000 @@ -43,7 +43,7 @@ #include #include #include - +#include extern int camel_verbose_debug; @@ -409,7 +409,7 @@ imap_read_response (CamelImapStore *stor static char * imap_read_untagged (CamelImapStore *store, char *line, CamelException *ex) { - int fulllen, ldigits, nread, i; + int fulllen, ldigits, nread, i, sexp = 0; unsigned int length; GPtrArray *data; GString *str; @@ -431,6 +431,18 @@ imap_read_untagged (CamelImapStore *stor p = strrchr (str->str, '{'); if (!p) break; + + /* HACK ALERT: We scan the non-literal part of the string, looking for possible s expression braces. + This assumes we're getting s-expressions, which we should be. + This is so if we get a blank line after a literal, in an s-expression, we can keep going, since + we do no other parsing at this level. + TODO: handle quoted strings? */ + for (s=str->str; s= UINT_MAX - 2) @@ -460,6 +472,12 @@ imap_read_untagged (CamelImapStore *stor goto lose; } str->str[length + 1] = '\0'; + + if (camel_debug("imap")) { + printf("Literal: -->"); + fwrite(str->str+1, 1, length, stdout); + printf("<--\n"); + } /* Fix up the literal, turning CRLFs into LF. Also, if * we find any embedded NULs, strip them. This is @@ -505,10 +523,11 @@ imap_read_untagged (CamelImapStore *stor if (camel_imap_store_readline (store, &line, ex) < 0) goto lose; - /* MAJOR HACK ALERT, gropuwise sometimes sends an extra blank line after literals, check that here */ - if (line[0] == 0) + /* MAJOR HACK ALERT, gropuwise sometimes sends an extra blank line after literals, check that here + But only do it if we're inside an sexpression */ + if (line[0] == 0 && sexp > 0) g_warning("Server sent empty line after a literal, assuming in error"); - } while (line[0] == 0); + } while (line[0] == 0 && sexp > 0); } /* Now reassemble the data. */