From: Timo Sirainen Date: Tue, 25 Aug 2015 13:50:17 +0000 (+0300) Subject: imapc: If FETCH commands fail, have imapc_mail_fetch() always return failure. X-Git-Tag: 2.2.19.rc1~191 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=14fd61e73569f356c57ccc253cfbbb6d77cccdf9;p=thirdparty%2Fdovecot%2Fcore.git 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. --- diff --git a/src/lib-storage/index/imapc/imapc-mail-fetch.c b/src/lib-storage/index/imapc/imapc-mail-fetch.c index 42d0701981..14a72dc692 100644 --- a/src/lib-storage/index/imapc/imapc-mail-fetch.c +++ b/src/lib-storage/index/imapc/imapc-mail-fetch.c @@ -28,6 +28,9 @@ imapc_mail_fetch_callback(const struct imapc_command_reply *reply, 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 @@ imapc_mail_send_fetch(struct mail *_mail, enum mail_fetch_field fields, 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 @@ int imapc_mail_fetch(struct mail *_mail, enum mail_fetch_field fields, 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 --git a/src/lib-storage/index/imapc/imapc-mail.h b/src/lib-storage/index/imapc/imapc-mail.h index b2d53f67db..e2cf72e5ba 100644 --- a/src/lib-storage/index/imapc/imapc-mail.h +++ b/src/lib-storage/index/imapc/imapc-mail.h @@ -20,6 +20,7 @@ struct imapc_mail { bool header_fetched; bool body_fetched; bool header_list_fetched; + bool fetch_failed; }; extern struct mail_vfuncs imapc_mail_vfuncs;