changeset 19003:a98267f8a6e6

imapc: If FETCH commands fail, have imapc_mail_fetch() always return failure. Earlier it may have returned success and imapc would later complain about a missing FETCH field.
author Timo Sirainen <tss@iki.fi>
date Tue, 25 Aug 2015 16:50:17 +0300
parents f3e6256d3762
children e5bc6d90649b
files src/lib-storage/index/imapc/imapc-mail-fetch.c src/lib-storage/index/imapc/imapc-mail.h
diffstat 2 files changed, 9 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/src/lib-storage/index/imapc/imapc-mail-fetch.c	Tue Aug 25 01:07:04 2015 +0300
+++ b/src/lib-storage/index/imapc/imapc-mail-fetch.c	Tue Aug 25 16:50:17 2015 +0300
@@ -28,6 +28,9 @@
 		struct imapc_mail *mail = *mailp;
 
 		i_assert(mail->fetch_count > 0);
+		if (reply->state != IMAPC_COMMAND_STATE_OK &&
+		    reply->state != IMAPC_COMMAND_STATE_NO)
+			mail->fetch_failed = TRUE;
 		if (--mail->fetch_count == 0)
 			mail->fetching_fields = 0;
 		pool_unref(&mail->imail.mail.pool);
@@ -252,6 +255,7 @@
 	mail->fetching_fields |= fields;
 	mail->fetch_count++;
 	mail->fetch_sent = FALSE;
+	mail->fetch_failed = FALSE;
 
 	imapc_mail_delayed_send_or_merge(mail, str);
 	return 1;
@@ -394,8 +398,11 @@
 		imapc_mail_fetch_flush(mbox);
 	while (imail->fetch_count > 0 &&
 	       (!imapc_mail_have_fields(imail, fields) ||
-		!imail->header_list_fetched))
+		!imail->header_list_fetched)) {
 		imapc_mailbox_run_nofetch(mbox);
+	}
+	if (imail->fetch_failed)
+		return -1;
 	return 0;
 }
 
--- a/src/lib-storage/index/imapc/imapc-mail.h	Tue Aug 25 01:07:04 2015 +0300
+++ b/src/lib-storage/index/imapc/imapc-mail.h	Tue Aug 25 16:50:17 2015 +0300
@@ -20,6 +20,7 @@
 	bool header_fetched;
 	bool body_fetched;
 	bool header_list_fetched;
+	bool fetch_failed;
 };
 
 extern struct mail_vfuncs imapc_mail_vfuncs;