liblzma: In EROFS LZMA decoder, verify that comp_size matches at the end.

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.
This commit is contained in:
Lasse Collin 2021-01-17 19:20:50 +02:00
parent 774cc0118b
commit db465419ae
1 changed files with 6 additions and 1 deletions

View File

@ -132,7 +132,12 @@ erofs_decode(void *coder_ptr, const lzma_allocator *allocator,
assert(coder->comp_size >= *in_pos - in_start); assert(coder->comp_size >= *in_pos - in_start);
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. // Update the amount of output remaining.
assert(coder->uncomp_size >= *out_pos - out_start); assert(coder->uncomp_size >= *out_pos - out_start);
coder->uncomp_size -= *out_pos - out_start; coder->uncomp_size -= *out_pos - out_start;