aboutsummaryrefslogtreecommitdiff
path: root/src/liblzma/subblock/subblock_decoder.c
diff options
context:
space:
mode:
authorLasse Collin <lasse.collin@tukaani.org>2008-01-17 13:14:20 +0200
committerLasse Collin <lasse.collin@tukaani.org>2008-01-17 13:14:20 +0200
commitf88590e0014b38d40465937c19f25f05f16c79ae (patch)
tree7a0904b999dc7bf401efd8fa0045da22a0af7dd8 /src/liblzma/subblock/subblock_decoder.c
parentTiny non-technical edits to file-format.txt. (diff)
downloadxz-f88590e0014b38d40465937c19f25f05f16c79ae.tar.xz
Fix Subblock docoder: If Subblock filter was used with known
Uncompressed Size, and the last output byte was from RLE, the code didn't stop decoding as it should have done.
Diffstat (limited to 'src/liblzma/subblock/subblock_decoder.c')
-rw-r--r--src/liblzma/subblock/subblock_decoder.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/src/liblzma/subblock/subblock_decoder.c b/src/liblzma/subblock/subblock_decoder.c
index 5895242e..4eb9e55f 100644
--- a/src/liblzma/subblock/subblock_decoder.c
+++ b/src/liblzma/subblock/subblock_decoder.c
@@ -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: {