From: Timo Sirainen Date: Thu, 3 Apr 2014 21:53:34 +0000 (+0300) Subject: lib-imap-storage: Reverted previous change. X-Git-Tag: 2.2.13.rc1~166 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=a30fd271b09c30662fc7e50d1f563e2ed37bcb62;p=thirdparty%2Fdovecot%2Fcore.git lib-imap-storage: Reverted previous change. It broke FETCH BODY [n.HEADER.FIELDS ..] --- diff --git a/src/lib-imap-storage/imap-msgpart.c b/src/lib-imap-storage/imap-msgpart.c index 49f6d8b034..126446ef9a 100644 --- a/src/lib-imap-storage/imap-msgpart.c +++ b/src/lib-imap-storage/imap-msgpart.c @@ -371,7 +371,6 @@ imap_msgpart_get_partial_header(struct mail *mail, struct istream *mail_input, i_stream_seek(input, 0); result_r->input = input; result_r->size = hdr_size_r->virtual_size; - result_r->size_field = 0; return 0; } @@ -559,13 +558,14 @@ imap_msgpart_open_normal(struct mail *mail, struct imap_msgpart *msgpart, case FETCH_MIME_BODY: i_unreached(); case FETCH_HEADER: + case FETCH_HEADER_FIELDS_NOT: /* fetch the message's header */ if (mail_get_hdr_stream(mail, &hdr_size, &input) < 0) return -1; result_r->size_field = MAIL_FETCH_MESSAGE_PARTS; break; case FETCH_HEADER_FIELDS: - /* return specific headers */ + /* try to lookup the headers from cache */ if (msgpart->header_ctx == NULL) { msgpart->header_ctx = mailbox_header_lookup_init(mail->box, @@ -574,14 +574,8 @@ imap_msgpart_open_normal(struct mail *mail, struct imap_msgpart *msgpart, if (mail_get_header_stream(mail, msgpart->header_ctx, &input) < 0) return -1; - return imap_msgpart_get_partial_header(mail, input, msgpart, - part_size_r, result_r); - case FETCH_HEADER_FIELDS_NOT: - /* return specific headers */ - if (mail_get_hdr_stream(mail, NULL, &input) < 0) - return -1; - return imap_msgpart_get_partial_header(mail, input, msgpart, - part_size_r, result_r); + result_r->size_field = 0; + break; case FETCH_BODY: /* fetch the message's body */ if (mail_get_stream(mail, &hdr_size, &body_size, &input) < 0) @@ -589,7 +583,12 @@ imap_msgpart_open_normal(struct mail *mail, struct imap_msgpart *msgpart, result_r->size_field = MAIL_FETCH_MESSAGE_PARTS; break; } - i_assert(msgpart->headers == NULL); + + if (msgpart->headers != NULL) { + /* return specific headers */ + return imap_msgpart_get_partial_header(mail, input, msgpart, + part_size_r, result_r); + } switch (msgpart->fetch_type) { case FETCH_FULL: