Mercurial > dovecot > core-2.2
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;