liblzma: Fix decoding of LZMA2 streams having no uncompressed data.
The decoder considered empty LZMA2 streams to be corrupt. This shouldn't matter much with .xz files, because no encoder creates empty LZMA2 streams in .xz. This bug is more likely to cause problems in applications that use raw LZMA2 streams.
This commit is contained in:
parent
df87249b26
commit
d099ef9f51
|
@ -67,6 +67,10 @@ lzma2_decode(lzma_coder *restrict coder, lzma_dict *restrict dict,
|
||||||
const uint32_t control = in[*in_pos];
|
const uint32_t control = in[*in_pos];
|
||||||
++*in_pos;
|
++*in_pos;
|
||||||
|
|
||||||
|
// End marker
|
||||||
|
if (control == 0x00)
|
||||||
|
return LZMA_STREAM_END;
|
||||||
|
|
||||||
if (control >= 0xE0 || control == 1) {
|
if (control >= 0xE0 || control == 1) {
|
||||||
// Dictionary reset implies that next LZMA chunk has
|
// Dictionary reset implies that next LZMA chunk has
|
||||||
// to set new properties.
|
// to set new properties.
|
||||||
|
@ -104,10 +108,6 @@ lzma2_decode(lzma_coder *restrict coder, lzma_dict *restrict dict,
|
||||||
&coder->options);
|
&coder->options);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// End marker
|
|
||||||
if (control == 0x00)
|
|
||||||
return LZMA_STREAM_END;
|
|
||||||
|
|
||||||
// Invalid control values
|
// Invalid control values
|
||||||
if (control > 2)
|
if (control > 2)
|
||||||
return LZMA_DATA_ERROR;
|
return LZMA_DATA_ERROR;
|
||||||
|
|
Loading…
Reference in New Issue