From b53838ae0caf9f09b976a8577cf4392910d6f02c Mon Sep 17 00:00:00 2001 From: Lasse Collin Date: Tue, 19 May 2026 13:52:41 +0300 Subject: [PATCH] liblzma: lzma_stream_buffer_decode: Fix wrong error code lzma_stream_buffer_decode() would often fail with LZMA_BUF_ERROR when it should have failed with LZMA_DATA_ERROR. In debug builds this also resulted in an assertion failure. In the _buffer_decode() functions, LZMA_BUF_ERROR is only used when the output buffer is too small. Truncated input is LZMA_DATA_ERROR. Reported-by: Guanni Qu Reported-by: Omkhar Arasaratnam Fixes: c81f13ff2927 ("Added lzma_stream_buffer_decode() and made minor cleanups.") --- src/liblzma/common/stream_buffer_decoder.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/liblzma/common/stream_buffer_decoder.c b/src/liblzma/common/stream_buffer_decoder.c index c4f91fb4..bbf20046 100644 --- a/src/liblzma/common/stream_buffer_decoder.c +++ b/src/liblzma/common/stream_buffer_decoder.c @@ -50,10 +50,6 @@ lzma_stream_buffer_decode(uint64_t *memlimit, uint32_t flags, if (ret == LZMA_STREAM_END) { ret = LZMA_OK; } else { - // Something went wrong, restore the positions. - *in_pos = in_start; - *out_pos = out_start; - if (ret == LZMA_OK) { // Either the input was truncated or the // output buffer was too small. @@ -78,6 +74,10 @@ lzma_stream_buffer_decode(uint64_t *memlimit, uint32_t flags, stream_decoder.coder, memlimit, &memusage, 0); } + + // Something went wrong, restore the positions. + *in_pos = in_start; + *out_pos = out_start; } }