mirror of
https://git.tukaani.org/xz.git
synced 2024-04-04 12:36:23 +02:00
Fix a dumb bug in .lzma decoder which was introduced in
the previous commit. (Probably the previous commit has other bugs too, it wasn't tested.)
This commit is contained in:
parent
671a5adf1e
commit
653e457e37
1 changed files with 14 additions and 15 deletions
|
@ -104,28 +104,27 @@ alone_decode(lzma_coder *coder,
|
||||||
case SEQ_UNCOMPRESSED_SIZE:
|
case SEQ_UNCOMPRESSED_SIZE:
|
||||||
coder->uncompressed_size
|
coder->uncompressed_size
|
||||||
|= (lzma_vli)(in[*in_pos]) << (coder->pos * 8);
|
|= (lzma_vli)(in[*in_pos]) << (coder->pos * 8);
|
||||||
|
|
||||||
if (++coder->pos == 8) {
|
|
||||||
// Another hack to ditch false positives: Assume that
|
|
||||||
// if the uncompressed size is known, it must be less
|
|
||||||
// than 256 GiB. Again, if someone complains, this
|
|
||||||
// will be reconsidered.
|
|
||||||
if (coder->uncompressed_size != LZMA_VLI_UNKNOWN
|
|
||||||
&& coder->uncompressed_size
|
|
||||||
>= (LZMA_VLI_C(1) << 38))
|
|
||||||
return LZMA_FORMAT_ERROR;
|
|
||||||
|
|
||||||
coder->pos = 0;
|
|
||||||
coder->sequence = SEQ_CODER_INIT;
|
|
||||||
}
|
|
||||||
|
|
||||||
++*in_pos;
|
++*in_pos;
|
||||||
|
if (++coder->pos < 8)
|
||||||
|
break;
|
||||||
|
|
||||||
|
// Another hack to ditch false positives: Assume that
|
||||||
|
// if the uncompressed size is known, it must be less
|
||||||
|
// than 256 GiB. Again, if someone complains, this
|
||||||
|
// will be reconsidered.
|
||||||
|
if (coder->uncompressed_size != LZMA_VLI_UNKNOWN
|
||||||
|
&& coder->uncompressed_size
|
||||||
|
>= (LZMA_VLI_C(1) << 38))
|
||||||
|
return LZMA_FORMAT_ERROR;
|
||||||
|
|
||||||
// Calculate the memory usage so that it is ready
|
// Calculate the memory usage so that it is ready
|
||||||
// for SEQ_CODER_INIT.
|
// for SEQ_CODER_INIT.
|
||||||
coder->memusage = lzma_lzma_decoder_memusage(&coder->options)
|
coder->memusage = lzma_lzma_decoder_memusage(&coder->options)
|
||||||
+ LZMA_MEMUSAGE_BASE;
|
+ LZMA_MEMUSAGE_BASE;
|
||||||
|
|
||||||
|
coder->pos = 0;
|
||||||
|
coder->sequence = SEQ_CODER_INIT;
|
||||||
|
|
||||||
// Fall through
|
// Fall through
|
||||||
|
|
||||||
case SEQ_CODER_INIT: {
|
case SEQ_CODER_INIT: {
|
||||||
|
|
Loading…
Reference in a new issue