From ad4cd18ba6c43fe94987408f81ed6547b29132d6 Mon Sep 17 00:00:00 2001 From: Timo Sirainen Date: Tue, 27 Oct 2009 16:09:09 -0400 Subject: [PATCH] message header parser: Require input buffer to be larger than 1 byte to avoid hangs. --HG-- branch : HEAD --- src/lib-mail/message-header-parser.c | 1 + src/lib-mail/test-message-header-parser.c | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) 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); -- 2.47.3