CVE-2020-28026: Line truncation and injection in spool_read_header()
authorHeiko Schlittermann (HS12-RIPE) <hs@schlittermann.de>
Tue, 30 Mar 2021 20:03:49 +0000 (22:03 +0200)
committerHeiko Schlittermann (HS12-RIPE) <hs@schlittermann.de>
Tue, 27 Apr 2021 22:40:44 +0000 (00:40 +0200)
commit4daba4bec729a57fb0863af786a1395e70794c76
tree8438c9fe1ab4e9efc882e01740cbe93da223d8e0
parent33d4c87653ddbbea9fd8cb8eb2ff78c149850006
CVE-2020-28026: Line truncation and injection in spool_read_header()

This also fixes:

2/ In src/spool_in.c:

 462   while (  (len = Ustrlen(big_buffer)) == big_buffer_size-1
 463         && big_buffer[len-1] != '\n'
 464         )
 465     {   /* buffer not big enough for line; certs make this possible */
 466     uschar * buf;
 467     if (big_buffer_size >= BIG_BUFFER_SIZE*4) goto SPOOL_READ_ERROR;
 468     buf = store_get_perm(big_buffer_size *= 2, FALSE);
 469     memcpy(buf, big_buffer, --len);

The --len in memcpy() chops off a useful byte (we know for sure that
big_buffer[len-1] is not a '\n' because we entered the while loop).

Based on a patch done by Qualys.

(cherry picked from commit f0c307458e1ee81abbe7ed2d4a8d16b5cbd8a799)
src/src/spool_in.c