diff src/lib-imap-storage/imap-msgpart.c @ 17197:cba3890dafdb

lib-imap-storage: Reverted previous change. It broke FETCH BODY [n.HEADER.FIELDS ..]
author Timo Sirainen <tss@iki.fi>
date Fri, 04 Apr 2014 00:53:34 +0300
parents 1b71a0128d2d
children 95ae49692ccb
line wrap: on
line diff
--- a/src/lib-imap-storage/imap-msgpart.c	Fri Apr 04 00:30:11 2014 +0300
+++ b/src/lib-imap-storage/imap-msgpart.c	Fri Apr 04 00:53:34 2014 +0300
@@ -371,7 +371,6 @@
 	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 @@
 	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 @@
 		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 @@
 		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: