Commit 90b67853 for xz

commit 90b67853d57562c5ad4fdb3215ceb9b9bd3958bf
Author: Lasse Collin <lasse.collin@tukaani.org>
Date:   Sun Nov 2 12:17:50 2025 +0200

    liblzma: Silence two Coverity warnings

    lzma_lzma_decoder_memusage() returns UINT64_MAX if lc/lp/pb aren't
    valid. alone_decoder.c and lzip_decoder.c didn't check the return
    value because in both it is known that lc/lp/pb are valid. Make them
    call the _nocheck() variant instead which skips the validation (it
    already existed for LZMA2's internal use).

    Fixes: Coverity CID 464658
    Fixes: Coverity CID 897069

diff --git a/src/liblzma/common/alone_decoder.c b/src/liblzma/common/alone_decoder.c
index e2b58e1f..8ebbbe8a 100644
--- a/src/liblzma/common/alone_decoder.c
+++ b/src/liblzma/common/alone_decoder.c
@@ -128,8 +128,10 @@ alone_decode(void *coder_ptr, const lzma_allocator *allocator,
 		lzma_set_ext_size(coder->options, coder->uncompressed_size);

 		// Calculate the memory usage so that it is ready
-		// for SEQ_CODER_INIT.
-		coder->memusage = lzma_lzma_decoder_memusage(&coder->options)
+		// for SEQ_CODER_INIT. We know that lc/lp/pb are valid
+		// so we can use the _nocheck variant.
+		coder->memusage
+			= lzma_lzma_decoder_memusage_nocheck(&coder->options)
 				+ LZMA_MEMUSAGE_BASE;

 		coder->pos = 0;
diff --git a/src/liblzma/common/lzip_decoder.c b/src/liblzma/common/lzip_decoder.c
index 4dff2d58..5630039f 100644
--- a/src/liblzma/common/lzip_decoder.c
+++ b/src/liblzma/common/lzip_decoder.c
@@ -212,7 +212,8 @@ lzip_decode(void *coder_ptr, const lzma_allocator *allocator,
 		coder->options.pb = LZIP_PB;

 		// Calculate the memory usage.
-		coder->memusage = lzma_lzma_decoder_memusage(&coder->options)
+		coder->memusage
+			= lzma_lzma_decoder_memusage_nocheck(&coder->options)
 				+ LZMA_MEMUSAGE_BASE;

 		// Initialization is a separate step because if we return
diff --git a/src/liblzma/lzma/lzma_decoder.h b/src/liblzma/lzma/lzma_decoder.h
index 9730f56f..09aa16ea 100644
--- a/src/liblzma/lzma/lzma_decoder.h
+++ b/src/liblzma/lzma/lzma_decoder.h
@@ -23,6 +23,12 @@ extern lzma_ret lzma_lzma_decoder_init(lzma_next_coder *next,

 extern uint64_t lzma_lzma_decoder_memusage(const void *options);

+/// Gets memory usage without validating lc/lp/pb. This is used by LZMA2
+/// decoder, because raw LZMA2 decoding doesn't need lc/lp/pb. Also
+/// alone_decoder.c and lzip_decoder.c use this because there lc/lp/pb
+/// are known to be valid.
+extern uint64_t lzma_lzma_decoder_memusage_nocheck(const void *options);
+
 extern lzma_ret lzma_lzma_props_decode(
 		void **options, const lzma_allocator *allocator,
 		const uint8_t *props, size_t props_size);
@@ -42,11 +48,6 @@ extern bool lzma_lzma_lclppb_decode(
 extern lzma_ret lzma_lzma_decoder_create(
 		lzma_lz_decoder *lz, const lzma_allocator *allocator,
 		const lzma_options_lzma *opt, lzma_lz_options *lz_options);
-
-/// Gets memory usage without validating lc/lp/pb. This is used by LZMA2
-/// decoder, because raw LZMA2 decoding doesn't need lc/lp/pb.
-extern uint64_t lzma_lzma_decoder_memusage_nocheck(const void *options);
-
 #endif

 #endif