From: Timo Sirainen Date: Tue, 27 Oct 2009 20:09:09 +0000 (-0400) Subject: message header parser: Require input buffer to be larger than 1 byte to avoid hangs. X-Git-Tag: 2.0.alpha3~87 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=ad4cd18ba6c43fe94987408f81ed6547b29132d6;p=thirdparty%2Fdovecot%2Fcore.git message header parser: Require input buffer to be larger than 1 byte to avoid hangs. --HG-- branch : HEAD --- diff --git a/src/lib-mail/message-header-parser.c b/src/lib-mail/message-header-parser.c index 18c67f7055..0628caa25f 100644 --- a/src/lib-mail/message-header-parser.c +++ b/src/lib-mail/message-header-parser.c @@ -136,6 +136,7 @@ int message_parse_header_next(struct message_header_parser_ctx *ctx, b) header ended unexpectedly */ if (colon_pos == UINT_MAX && ret == -2 && !continued) { /* header name is huge. just skip it. */ + i_assert(size > 1); if (msg[size-1] == '\r') size--; diff --git a/src/lib-mail/test-message-header-parser.c b/src/lib-mail/test-message-header-parser.c index 428fa91dbf..00874c0b6f 100644 --- a/src/lib-mail/test-message-header-parser.c +++ b/src/lib-mail/test-message-header-parser.c @@ -225,13 +225,13 @@ static void test_message_header_parser_long_lines(void) test_begin("message header parser long lines"); len = strlen(lf_str); - for (i = 1; i < len; i++) { + for (i = 2; i < len; i++) { test_message_header_parser_long_lines_str(lf_str, i, &hdr_size); test_assert(hdr_size.physical_size == len); test_assert(hdr_size.virtual_size == len + 2); } len = strlen(crlf_str); - for (i = 1; i < len; i++) { + for (i = 2; i < len; i++) { test_message_header_parser_long_lines_str(crlf_str, i, &hdr_size); test_assert(hdr_size.physical_size == len); test_assert(hdr_size.virtual_size == len);