Fix Subblock docoder: If Subblock filter was used with known
authorLasse Collin <lasse.collin@tukaani.org>
Thu, 17 Jan 2008 11:14:20 +0000 (13:14 +0200)
committerLasse Collin <lasse.collin@tukaani.org>
Thu, 17 Jan 2008 11:14:20 +0000 (13:14 +0200)
Uncompressed Size, and the last output byte was from RLE,
the code didn't stop decoding as it should have done.

src/liblzma/subblock/subblock_decoder.c

index 5895242..4eb9e55 100644 (file)
@@ -363,6 +363,7 @@ decode_buffer(lzma_coder *coder, lzma_allocator *allocator,
                        return LZMA_DATA_ERROR;
 
                if (coder->repeat.count == 0) {
+                       assert(coder->subfilter.code == NULL);
                        if (coder->uncompressed_size == 0)
                                return LZMA_STREAM_END;
                } else {
@@ -424,6 +425,11 @@ decode_buffer(lzma_coder *coder, lzma_allocator *allocator,
                        }
                } while (*out_pos < out_size);
 
+               // Check if we have decoded all the data.
+               if (coder->uncompressed_size == 0
+                               && coder->subfilter.code == NULL)
+                       return LZMA_STREAM_END;
+
                break;
 
        case SEQ_DATA: {