diff options
author | Denys Vlasenko <vda.linux@googlemail.com> | 2018-05-25 17:03:46 +0200 |
---|---|---|
committer | Denys Vlasenko <vda.linux@googlemail.com> | 2018-05-25 17:03:46 +0200 |
commit | a36986bb80289c1cd8d15a557e49207c9a42946b (patch) | |
tree | 15f40fd0cbd8906b29f14d1871db263445058cdf /archival | |
parent | 8f48fc01e9e43d16bf5860fa37252b43c76cb395 (diff) | |
download | busybox-w32-a36986bb80289c1cd8d15a557e49207c9a42946b.tar.gz busybox-w32-a36986bb80289c1cd8d15a557e49207c9a42946b.tar.bz2 busybox-w32-a36986bb80289c1cd8d15a557e49207c9a42946b.zip |
unlzma: close another SEGV possibility
function old new delta
unpack_lzma_stream 2669 2686 +17
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
Diffstat (limited to 'archival')
-rw-r--r-- | archival/libarchive/decompress_unlzma.c | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/archival/libarchive/decompress_unlzma.c b/archival/libarchive/decompress_unlzma.c index 446319e7b..6886239d0 100644 --- a/archival/libarchive/decompress_unlzma.c +++ b/archival/libarchive/decompress_unlzma.c | |||
@@ -350,8 +350,12 @@ unpack_lzma_stream(transformer_state_t *xstate) | |||
350 | state = state < LZMA_NUM_LIT_STATES ? 9 : 11; | 350 | state = state < LZMA_NUM_LIT_STATES ? 9 : 11; |
351 | 351 | ||
352 | pos = buffer_pos - rep0; | 352 | pos = buffer_pos - rep0; |
353 | if ((int32_t)pos < 0) | 353 | if ((int32_t)pos < 0) { |
354 | pos += header.dict_size; | 354 | pos += header.dict_size; |
355 | /* see unzip_bad_lzma_2.zip: */ | ||
356 | if (pos >= buffer_size) | ||
357 | goto bad; | ||
358 | } | ||
355 | previous_byte = buffer[pos]; | 359 | previous_byte = buffer[pos]; |
356 | goto one_byte1; | 360 | goto one_byte1; |
357 | #else | 361 | #else |