]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
imapc: If FETCH commands fail, have imapc_mail_fetch() always return failure.
authorTimo Sirainen <tss@iki.fi>
Tue, 25 Aug 2015 13:50:17 +0000 (16:50 +0300)
committerTimo Sirainen <tss@iki.fi>
Tue, 25 Aug 2015 13:50:17 +0000 (16:50 +0300)
Earlier it may have returned success and imapc would later complain about a
missing FETCH field.

src/lib-storage/index/imapc/imapc-mail-fetch.c
src/lib-storage/index/imapc/imapc-mail.h

index 42d070198180de56cb32d96b88dde5437450eaa3..14a72dc69208b8dcc236042ea5bdd015fb731df3 100644 (file)
@@ -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;
 }
 
index b2d53f67dbf460f27f669b18ab5c1c102ea011d6..e2cf72e5baa6f8b5185f7bfe592cebbf254303e2 100644 (file)
@@ -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;