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