xz: fix decoding of LZMA2 streams having no uncompressed data.

No .xz encoder creates files with empty LZMA2 streams,
but such files would still be valid and decompressors
must accept them.

Note that empty .xz files are a different thing than
empty LZMA2 streams. This bug didn't affect typical .xz
files that had no uncompressed data.

Signed-off-by: Lasse Collin <lasse.collin@tukaani.org>
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
Lasse Collin 2013-02-27 16:38:06 +01:00 committed by Denys Vlasenko
parent efb800439f
commit a1ae2b75a7

View File

@ -971,6 +971,9 @@ XZ_EXTERN NOINLINE enum xz_ret XZ_FUNC xz_dec_lzma2_run(
*/ */
tmp = b->in[b->in_pos++]; tmp = b->in[b->in_pos++];
if (tmp == 0x00)
return XZ_STREAM_END;
if (tmp >= 0xE0 || tmp == 0x01) { if (tmp >= 0xE0 || tmp == 0x01) {
s->lzma2.need_props = true; s->lzma2.need_props = true;
s->lzma2.need_dict_reset = false; s->lzma2.need_dict_reset = false;
@ -1003,9 +1006,6 @@ XZ_EXTERN NOINLINE enum xz_ret XZ_FUNC xz_dec_lzma2_run(
lzma_reset(s); lzma_reset(s);
} }
} else { } else {
if (tmp == 0x00)
return XZ_STREAM_END;
if (tmp > 0x02) if (tmp > 0x02)
return XZ_DATA_ERROR; return XZ_DATA_ERROR;