From: Timo Sirainen Date: Mon, 2 Jun 2008 18:06:27 +0000 (+0300) Subject: If cached message part showed header's size to be smaller than in reality, X-Git-Tag: 1.1.rc8~6 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=2855f8a57658ff517ec989d7433c21d37dad5339;p=thirdparty%2Fdovecot%2Fcore.git If cached message part showed header's size to be smaller than in reality, return "broken" instead of assert-crashing. --HG-- branch : HEAD --- diff --git a/src/lib-mail/message-parser.c b/src/lib-mail/message-parser.c index cdf98b010e..a5093e9d45 100644 --- a/src/lib-mail/message-parser.c +++ b/src/lib-mail/message-parser.c @@ -617,7 +617,11 @@ static int preparsed_parse_body_init(struct message_parser_ctx *ctx, uoff_t offset = ctx->part->physical_pos + ctx->part->header_size.physical_size; - i_assert(offset >= ctx->input->v_offset); + if (offset < ctx->input->v_offset) { + /* header was actually larger than the cached size suggested */ + ctx->broken = TRUE; + return -1; + } i_stream_skip(ctx->input, offset - ctx->input->v_offset); ctx->parse_next_block = preparsed_parse_body_more;