]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
message header parser: Require input buffer to be larger than 1 byte to avoid hangs.
authorTimo Sirainen <tss@iki.fi>
Tue, 27 Oct 2009 20:09:09 +0000 (16:09 -0400)
committerTimo Sirainen <tss@iki.fi>
Tue, 27 Oct 2009 20:09:09 +0000 (16:09 -0400)
--HG--
branch : HEAD

src/lib-mail/message-header-parser.c
src/lib-mail/test-message-header-parser.c

index 18c67f705527a95ec93e293e88d22684a35409ea..0628caa25f8c95aed9ca512a5da5dec4789007c2 100644 (file)
@@ -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--;
 
index 428fa91dbfd93364161e8b8d2fb042e0641a933b..00874c0b6fb1e3a970ca19b19cf7054c87c123dc 100644 (file)
@@ -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);