diff --git a/src/liblzma/common/alone_decoder.c b/src/liblzma/common/alone_decoder.c index 8ebbbe8a..174b3b1d 100644 --- a/src/liblzma/common/alone_decoder.c +++ b/src/liblzma/common/alone_decoder.c @@ -152,8 +152,12 @@ alone_decode(void *coder_ptr, const lzma_allocator *allocator, } }; - return_if_error(lzma_next_filter_init(&coder->next, - allocator, filters)); + const lzma_ret ret = lzma_next_filter_init(&coder->next, + allocator, filters); + if (ret != LZMA_OK) { + lzma_next_end(&coder->next, allocator); + return ret; + } coder->sequence = SEQ_CODE; break; diff --git a/src/liblzma/common/lzip_decoder.c b/src/liblzma/common/lzip_decoder.c index 5630039f..d6f929d2 100644 --- a/src/liblzma/common/lzip_decoder.c +++ b/src/liblzma/common/lzip_decoder.c @@ -237,8 +237,12 @@ lzip_decode(void *coder_ptr, const lzma_allocator *allocator, } }; - return_if_error(lzma_next_filter_init(&coder->lzma_decoder, - allocator, filters)); + const lzma_ret ret = lzma_next_filter_init( + &coder->lzma_decoder, allocator, filters); + if (ret != LZMA_OK) { + lzma_next_end(&coder->lzma_decoder, allocator); + return ret; + } coder->crc32 = 0; coder->sequence = SEQ_LZMA_STREAM; diff --git a/src/liblzma/common/microlzma_decoder.c b/src/liblzma/common/microlzma_decoder.c index 882cb2c8..a7720cc2 100644 --- a/src/liblzma/common/microlzma_decoder.c +++ b/src/liblzma/common/microlzma_decoder.c @@ -108,8 +108,12 @@ microlzma_decode(void *coder_ptr, const lzma_allocator *allocator, } }; - return_if_error(lzma_next_filter_init(&coder->lzma, - allocator, filters)); + const lzma_ret ret = lzma_next_filter_init(&coder->lzma, + allocator, filters); + if (ret != LZMA_OK) { + lzma_next_end(&coder->lzma, allocator); + return ret; + } // Pass one dummy 0x00 byte to the LZMA decoder since that // is what it expects the first byte to be.