]> git.ipfire.org Git - thirdparty/xz.git/commitdiff
liblzma: In EROFS LZMA decoder, verify that comp_size matches at the end.
authorLasse Collin <lasse.collin@tukaani.org>
Sun, 17 Jan 2021 17:20:50 +0000 (19:20 +0200)
committerLasse Collin <lasse.collin@tukaani.org>
Sun, 17 Jan 2021 17:20:50 +0000 (19:20 +0200)
When the uncompressed size is known to be exact, after decompressing
the stream exactly comp_size bytes of input must have been consumed.
This is a minor improvement to error detection.

src/liblzma/common/erofs_decoder.c

index 816e2482cbcac12772da6288570ad5a6edbe1d93..9264adda63a59f8243b14986077a2a0e953a4761 100644 (file)
@@ -132,7 +132,12 @@ erofs_decode(void *coder_ptr, const lzma_allocator *allocator,
        assert(coder->comp_size >= *in_pos - in_start);
        coder->comp_size -= *in_pos - in_start;
 
-       if (!coder->uncomp_size_is_exact) {
+       if (coder->uncomp_size_is_exact) {
+               // After successful decompression of the complete stream
+               // the compressed size must match.
+               if (ret == LZMA_STREAM_END && coder->comp_size != 0)
+                       ret = LZMA_DATA_ERROR;
+       } else {
                // Update the amount of output remaining.
                assert(coder->uncomp_size >= *out_pos - out_start);
                coder->uncomp_size -= *out_pos - out_start;