dovecot: Message parser wasn't returning body blocks correctly, ...

dovecot at dovecot.org dovecot at dovecot.org
Mon Dec 3 09:51:08 EET 2007


details:   http://hg.dovecot.org/dovecot/rev/950ce0b5edb5
changeset: 6900:950ce0b5edb5
user:      Timo Sirainen <tss at iki.fi>
date:      Mon Dec 03 09:49:31 2007 +0200
description:
Message parser wasn't returning body blocks correctly, causing problems with
message body searches.

diffstat:

1 file changed, 12 insertions(+), 6 deletions(-)
src/lib-mail/message-parser.c |   18 ++++++++++++------

diffs (42 lines):

diff -r 69babcc2fb80 -r 950ce0b5edb5 src/lib-mail/message-parser.c
--- 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 @@ boundary_line_find(struct message_parser
 	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 @@ static int parse_next_body_skip_boundary
 	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 @@ static int parse_next_body_to_boundary(s
 	}
 	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);
 }
 


More information about the dovecot-cvs mailing list