extmod/uzlib: Fix C-language sequencing error with uzlib_get_byte calls.

The order of function calls in an arithmetic expression is undefined and so
they must be written out as sequential statements.

Thanks to @dv-extrarius for reporting this issue, see issue #3690.
pull/3755/head
Damien George 2018-05-02 23:16:22 +10:00
rodzic 4fa7d36cee
commit 5936168150
1 zmienionych plików z 4 dodań i 2 usunięć

Wyświetl plik

@ -394,9 +394,11 @@ static int tinf_inflate_uncompressed_block(TINF_DATA *d)
unsigned int length, invlength;
/* get length */
length = uzlib_get_byte(d) + 256 * uzlib_get_byte(d);
length = uzlib_get_byte(d);
length += 256 * uzlib_get_byte(d);
/* get one's complement of length */
invlength = uzlib_get_byte(d) + 256 * uzlib_get_byte(d);
invlength = uzlib_get_byte(d);
invlength += 256 * uzlib_get_byte(d);
/* check length */
if (length != (~invlength & 0x0000ffff)) return TINF_DATA_ERROR;