changeset 6900:950ce0b5edb5 HEAD

Message parser wasn't returning body blocks correctly, causing problems with message body searches.
author Timo Sirainen <tss@iki.fi>
date Mon, 03 Dec 2007 09:49:31 +0200
parents 69babcc2fb80
children 92e197fa699e
files src/lib-mail/message-parser.c
diffstat 1 files changed, 12 insertions(+), 6 deletions(-) [+]
line wrap: on
line diff
--- a/src/lib-mail/message-parser.c	Sun Dec 02 23:52:50 2007 +0200
+++ b/src/lib-mail/message-parser.c	Mon Dec 03 09:49:31 2007 +0200
@@ -221,6 +221,15 @@
 	return 1;
 }
 
+static int parse_next_mime_header_init(struct message_parser_ctx *ctx,
+				       struct message_block *block_r)
+{
+	ctx->part = message_part_append(ctx->part_pool, ctx->part);
+	ctx->part->flags |= MESSAGE_PART_FLAG_IS_MIME;
+
+	return parse_next_header_init(ctx, block_r);
+}
+
 static int parse_next_body_skip_boundary_line(struct message_parser_ctx *ctx,
 					      struct message_block *block_r)
 {
@@ -245,11 +254,8 @@
 	parse_body_add_block(ctx, block_r);
 
 	/* a new MIME part begins */
-	ctx->part = message_part_append(ctx->part_pool, ctx->part);
-	ctx->part->flags |= MESSAGE_PART_FLAG_IS_MIME;
-
-	ctx->parse_next_block = parse_next_header_init;
-	return parse_next_header_init(ctx, block_r);
+	ctx->parse_next_block = parse_next_mime_header_init;
+	return 1;
 }
 
 static int parse_part_finish(struct message_parser_ctx *ctx,
@@ -379,7 +385,7 @@
 	}
 	if (block_r->size != 0)
 		parse_body_add_block(ctx, block_r);
-	return ret <= 0 ? ret :
+	return ret <= 0 || block_r->size != 0 ? ret :
 		parse_part_finish(ctx, boundary, block_r, FALSE);
 }