From: Timo Sirainen Date: Fri, 8 Jan 2016 11:24:32 +0000 (+0200) Subject: lib-mail: message-parser was counting body_size wrong for truncated MIME headers... X-Git-Tag: 2.2.22.rc1~376 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=f148466c7b648669b99bf20c651ae7fc81d28659;p=thirdparty%2Fdovecot%2Fcore.git lib-mail: message-parser was counting body_size wrong for truncated MIME headers after 7d800c55 --- diff --git a/src/lib-mail/message-parser.c b/src/lib-mail/message-parser.c index e5ad128cdf..15fcbe2818 100644 --- a/src/lib-mail/message-parser.c +++ b/src/lib-mail/message-parser.c @@ -541,13 +541,16 @@ static int parse_next_header(struct message_parser_ctx *ctx, [CR]LF belongs to the MIME boundary though. */ if (ctx->prev_hdr_newline_size > 0) { i_assert(ctx->part->header_size.lines > 0); + /* remove the newline size from the MIME header */ ctx->part->header_size.lines--; ctx->part->header_size.physical_size -= ctx->prev_hdr_newline_size; - ctx->part->header_size.virtual_size -= + ctx->part->header_size.virtual_size -= 2; + /* add the newline size to the parent's body */ + ctx->part->parent->body_size.lines++; + ctx->part->parent->body_size.physical_size += ctx->prev_hdr_newline_size; - if (ctx->prev_hdr_newline_size == 1) - ctx->part->header_size.virtual_size--; + ctx->part->parent->body_size.virtual_size += 2; } hdr = NULL; } diff --git a/src/lib-mail/test-message-parser.c b/src/lib-mail/test-message-parser.c index a862427e94..75a0712315 100644 --- a/src/lib-mail/test-message-parser.c +++ b/src/lib-mail/test-message-parser.c @@ -158,6 +158,9 @@ static const char input_msg[] = test_assert(message_parser_deinit(&parser, &parts) == 0); test_assert((parts->flags & MESSAGE_PART_FLAG_MULTIPART) != 0); + test_assert(parts->body_size.lines == 8); + test_assert(parts->body_size.physical_size == 112); + test_assert(parts->body_size.virtual_size == 112+7); test_assert(parts->children->header_size.physical_size == 0); test_assert(parts->children->body_size.physical_size == 0); test_assert(parts->children->body_size.lines == 0);