aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authormarcus <marcus@FreeBSD.org>2005-02-11 15:34:14 +0800
committermarcus <marcus@FreeBSD.org>2005-02-11 15:34:14 +0800
commiteee36c4ba639ccf8ab9ba440932c535ebedfd48d (patch)
tree79ade537266433ca2dcaa158531898c319fae7ef
parent8cbfcc867a5a53cd11d67cb727686d16dd978a4a (diff)
downloadfreebsd-ports-gnome-eee36c4ba639ccf8ab9ba440932c535ebedfd48d.tar.gz
freebsd-ports-gnome-eee36c4ba639ccf8ab9ba440932c535ebedfd48d.tar.zst
freebsd-ports-gnome-eee36c4ba639ccf8ab9ba440932c535ebedfd48d.zip
Fix a connection hang when trying to access a Lotus Notes IMAP account.
PR: 77076 Obtained from: Ximian bugzilla (http://bugzilla.ximian.com/show_bug.cgi?id=70556)
-rw-r--r--mail/evolution/Makefile2
-rw-r--r--mail/evolution/files/patch-lotus-imap92
2 files changed, 93 insertions, 1 deletions
diff --git a/mail/evolution/Makefile b/mail/evolution/Makefile
index 780dedfa79ef..273fff970ebb 100644
--- a/mail/evolution/Makefile
+++ b/mail/evolution/Makefile
@@ -7,7 +7,7 @@
PORTNAME= evolution
PORTVERSION= 2.0.3
-PORTREVISION= 1
+PORTREVISION= 2
CATEGORIES= mail gnome
MASTER_SITES= ${MASTER_SITE_GNOME}
MASTER_SITE_SUBDIR= sources/${PORTNAME}/2.0
diff --git a/mail/evolution/files/patch-lotus-imap b/mail/evolution/files/patch-lotus-imap
new file mode 100644
index 000000000000..825329b53057
--- /dev/null
+++ b/mail/evolution/files/patch-lotus-imap
@@ -0,0 +1,92 @@
+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 <NotZed@Ximian.com>
++
++ ** 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 <NotZed@Ximian.com>
+
+ ** 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 <camel/camel-private.h>
+ #include <camel/camel-utf8.h>
+ #include <camel/camel-session.h>
+-
++#include <camel/camel-debug.h>
+
+ 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<p; s++) {
++ if (*s == '(')
++ sexp++;
++ else if (*s == ')')
++ sexp--;
++ }
+
+ length = strtoul (p + 1, &end, 10);
+ if (*end != '}' || *(end + 1) || end == p + 1 || length >= 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. */