X-Git-Url: https://git.exim.org/exim.git/blobdiff_plain/fcb900d84cc71cb169bd1b223920de1026772695..56ac062a3ff94fc4e1bbfc2293119c079a4e980b:/src/src/receive.c diff --git a/src/src/receive.c b/src/src/receive.c index 6d54ad33c..a0467e8c8 100644 --- a/src/src/receive.c +++ b/src/src/receive.c @@ -1827,8 +1827,11 @@ for (;;) if (ptr >= header_size - 4) { int oldsize = header_size; - /* header_size += 256; */ + + if (header_size >= INT_MAX/2) + goto OVERSIZE; header_size *= 2; + if (!store_extend(next->text, oldsize, header_size)) next->text = store_newblock(next->text, header_size, ptr); } @@ -1934,6 +1937,7 @@ for (;;) if (message_size >= header_maxsize) { +OVERSIZE: next->text[ptr] = 0; next->slen = ptr; next->type = htype_other; @@ -2005,7 +2009,8 @@ for (;;) if (nextch == ' ' || nextch == '\t') { next->text[ptr++] = nextch; - message_size++; + if (++message_size >= header_maxsize) + goto OVERSIZE; continue; /* Iterate the loop */ } else if (nextch != EOF) (receive_ungetc)(nextch); /* For next time */