unlzma: fix a case where we could read before beginning of buffer
No binary (build failed)
—
(log yok)
| @@ -290,8 +290,11 @@ unpack_lzma_stream(transformer_state_t *xstate) | |
| uint32_t pos; | |
| pos = buffer_pos - rep0; | |
| - | if ((int32_t)pos < 0) |
| + | if ((int32_t)pos < 0) { |
| pos += header.dict_size; | |
| + | if ((int32_t)pos < 0) |
| + | goto bad; |
| + | } |
| match_byte = buffer[pos]; | |
| do { | |
| int bit; | |
| @@ -8,14 +8,23 @@ | |
| # Damaged encrypted streams | |
| testing "unlzma (bad archive 1)" \ | |
| - | "unlzma <unlzma_issue_1.lzma >/dev/null; echo \$?" \ |
| - | "1 |
| + | "unlzma <unlzma_issue_1.lzma 2>&1 >/dev/null; echo \$?" \ |
| + | "unlzma: corrupted data |
| + | 1 |
| " "" "" | |
| # Damaged encrypted streams | |
| testing "unlzma (bad archive 2)" \ | |
| - | "unlzma <unlzma_issue_2.lzma >/dev/null; echo \$?" \ |
| - | "1 |
| + | "unlzma <unlzma_issue_2.lzma 2>&1 >/dev/null; echo \$?" \ |
| + | "unlzma: corrupted data |
| + | 1 |
| + | " "" "" |
| + | |
| + | # Damaged encrypted streams |
| + | testing "unlzma (bad archive 3)" \ |
| + | "unlzma <unlzma_issue_3.lzma 2>&1 >/dev/null; echo \$?" \ |
| + | "unlzma: corrupted data |
| + | 1 |
| " "" "" | |
| exit $FAILCOUNT | |