From f88590e0014b38d40465937c19f25f05f16c79ae Mon Sep 17 00:00:00 2001
From: Lasse Collin <lasse.collin@tukaani.org>
Date: Thu, 17 Jan 2008 13:14:20 +0200
Subject: 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.

---
 src/liblzma/subblock/subblock_decoder.c | 6 ++++++
 1 file changed, 6 insertions(+)

(limited to 'src/liblzma')

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: {
-- 
cgit v1.2.3