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:
parent
774cc0118b
commit
db465419ae
|
@ -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;
|
||||||
|
|
Loading…
Reference in New Issue