]> granicus.if.org Git - xz/commitdiff
liblzma: Fix decoding of LZMA2 streams having no uncompressed data.
authorLasse Collin <lasse.collin@tukaani.org>
Thu, 31 Mar 2011 08:54:48 +0000 (11:54 +0300)
committerLasse Collin <lasse.collin@tukaani.org>
Thu, 31 Mar 2011 08:54:48 +0000 (11:54 +0300)
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.

src/liblzma/lzma/lzma2_decoder.c

index f38879ce17cdef2c02715f96eb0837fffa2a93f8..3e42575d5b8071a0656de68894906019f5d03020 100644 (file)
@@ -67,6 +67,10 @@ lzma2_decode(lzma_coder *restrict coder, lzma_dict *restrict dict,
                const uint32_t control = in[*in_pos];
                ++*in_pos;
 
+               // End marker
+               if (control == 0x00)
+                       return LZMA_STREAM_END;
+
                if (control >= 0xE0 || control == 1) {
                        // Dictionary reset implies that next LZMA chunk has
                        // to set new properties.
@@ -104,10 +108,6 @@ lzma2_decode(lzma_coder *restrict coder, lzma_dict *restrict dict,
                                                        &coder->options);
                        }
                } else {
-                       // End marker
-                       if (control == 0x00)
-                               return LZMA_STREAM_END;
-
                        // Invalid control values
                        if (control > 2)
                                return LZMA_DATA_ERROR;