From c0afd60c07987a3519aea96b599e8558ea2361d6 Mon Sep 17 00:00:00 2001
From: Mikulas Patocka <mpatocka@redhat.com>
Date: Fri, 18 Nov 2011 18:43:11 -0500
Subject: fetchmail workaround for a bug in Zimbra

Zimbra occasionally returns this response:

fetchmail: IMAP> A0007 FETCH 1 RFC822.HEADER
fetchmail: IMAP< * 1 FETCH ()
fetchmail: IMAP< A0007 OK FETCH completed

It happens when there is a corrupted message without a header in the
database. (I don't know how this message could be created, I just see it
there).

When fetchmail encounters such resonse, it gives up and disconnects.

This patch changes it so that PS_TRANSIENT is returned in this
case and fetchmail continues to fetch following messages correctly.
---
 imap.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/imap.c b/imap.c
index 5c3218d0..93f05f2c 100644
--- a/imap.c
+++ b/imap.c
@@ -1166,7 +1166,8 @@ static int imap_fetch_headers(int sock, struct query *ctl,int number,int *lenp)
 
 	/* try to recover for some responses */
 	if (!strncmp(buf, "* NO", 4) ||
-		!strncmp(buf, "* BAD", 5))
+		!strncmp(buf, "* BAD", 5) ||
+		strstr(buf, "FETCH ()"))
 	{
 	    return(PS_TRANSIENT);
 	}
-- 
cgit v1.2.3