dovecot-2.2: imapc: If FETCH commands fail, have imapc_mail_fetc...

dovecot at dovecot.org dovecot at dovecot.org
Tue Aug 25 13:51:10 UTC 2015


details:   http://hg.dovecot.org/dovecot-2.2/rev/a98267f8a6e6
changeset: 19003:a98267f8a6e6
user:      Timo Sirainen <tss at iki.fi>
date:      Tue Aug 25 16:50:17 2015 +0300
description:
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.

diffstat:

 src/lib-storage/index/imapc/imapc-mail-fetch.c |  9 ++++++++-
 src/lib-storage/index/imapc/imapc-mail.h       |  1 +
 2 files changed, 9 insertions(+), 1 deletions(-)

diffs (45 lines):

diff -r f3e6256d3762 -r a98267f8a6e6 src/lib-storage/index/imapc/imapc-mail-fetch.c
--- 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;
 }
 
diff -r f3e6256d3762 -r a98267f8a6e6 src/lib-storage/index/imapc/imapc-mail.h
--- 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;


More information about the dovecot-cvs mailing list