diff options
Diffstat (limited to 'src/liblzma/common/auto_decoder.c')
-rw-r--r-- | src/liblzma/common/auto_decoder.c | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/src/liblzma/common/auto_decoder.c b/src/liblzma/common/auto_decoder.c index 09acd6dc0958c..6895c7ccf7b55 100644 --- a/src/liblzma/common/auto_decoder.c +++ b/src/liblzma/common/auto_decoder.c @@ -139,7 +139,10 @@ auto_decoder_memconfig(void *coder_ptr, uint64_t *memusage, // the current memory usage. *memusage = LZMA_MEMUSAGE_BASE; *old_memlimit = coder->memlimit; + ret = LZMA_OK; + if (new_memlimit != 0 && new_memlimit < *memusage) + ret = LZMA_MEMLIMIT_ERROR; } if (ret == LZMA_OK && new_memlimit != 0) @@ -155,9 +158,6 @@ auto_decoder_init(lzma_next_coder *next, const lzma_allocator *allocator, { lzma_next_coder_init(&auto_decoder_init, next, allocator); - if (memlimit == 0) - return LZMA_PROG_ERROR; - if (flags & ~LZMA_SUPPORTED_FLAGS) return LZMA_OPTIONS_ERROR; @@ -175,7 +175,7 @@ auto_decoder_init(lzma_next_coder *next, const lzma_allocator *allocator, coder->next = LZMA_NEXT_CODER_INIT; } - coder->memlimit = memlimit; + coder->memlimit = my_max(1, memlimit); coder->flags = flags; coder->sequence = SEQ_INIT; |