]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
imapc: Fixes to imapc_feature fetch-headers
authorTimo Sirainen <tss@iki.fi>
Sat, 16 Nov 2013 22:41:23 +0000 (00:41 +0200)
committerTimo Sirainen <tss@iki.fi>
Sat, 16 Nov 2013 22:41:23 +0000 (00:41 +0200)
src/lib-storage/index/imapc/imapc-mail-fetch.c
src/lib-storage/index/imapc/imapc-mail.c

index 2599ffb0f428ef7e223d359753ce2d5bf35d7ec8..91a9aa02844cc3ad561a9f3b885151dcf074dc6f 100644 (file)
@@ -156,7 +156,7 @@ imapc_mail_send_fetch(struct mail *_mail, enum mail_fetch_field fields,
                str_append(str, "BODY.PEEK[HEADER] ");
        else if (headers != NULL) {
                mail->fetching_headers =
-                       headers_merge(mail->imail.mail.pool, headers,
+                       headers_merge(mail->imail.mail.data_pool, headers,
                                      mail->fetching_headers);
                str_append(str, "BODY.PEEK[HEADER.FIELDS (");
                for (i = 0; mail->fetching_headers[i] != NULL; i++) {
index d29773932f388812f60753470198baafcd1fcab0..2984240c0571c8a636e9ffe899ab554717b5d4c4 100644 (file)
@@ -308,13 +308,15 @@ void imapc_mail_update_access_parts(struct index_mail *mail)
                        data->access_part |= READ_HDR | READ_BODY;
        }
 
-       if (data->access_part == 0 && data->wanted_headers != NULL) {
+       if (data->access_part == 0 && data->wanted_headers != NULL &&
+           !IMAPC_BOX_HAS_FEATURE(mbox, IMAPC_FEATURE_FETCH_HEADERS)) {
                /* see if all wanted headers exist in cache */
                if (!imapc_mail_has_headers_in_cache(mail, data->wanted_headers))
                        data->access_part |= PARSE_HDR;
        }
        if (data->access_part == 0 &&
-           (data->wanted_fields & MAIL_FETCH_IMAP_ENVELOPE) != 0) {
+           (data->wanted_fields & MAIL_FETCH_IMAP_ENVELOPE) != 0 &&
+           !IMAPC_BOX_HAS_FEATURE(mbox, IMAPC_FEATURE_FETCH_HEADERS)) {
                /* the common code already checked this partially,
                   but we need a guaranteed correct answer */
                header_ctx = mailbox_header_lookup_init(_mail->box,
@@ -360,6 +362,7 @@ static void imapc_mail_close(struct mail *_mail)
 
        index_mail_close(_mail);
 
+       mail->fetching_headers = NULL;
        if (mail->body_fetched) {
                imapc_mail_cache_free(cache);
                cache->uid = _mail->uid;