diff options
| -rw-r--r-- | lib/lzma/LzmaTools.c | 8 | 
1 files changed, 6 insertions, 2 deletions
| diff --git a/lib/lzma/LzmaTools.c b/lib/lzma/LzmaTools.c index 8d1165e11b..0aec2f9c7 100644 --- a/lib/lzma/LzmaTools.c +++ b/lib/lzma/LzmaTools.c @@ -97,15 +97,19 @@ int lzmaBuffToBuffDecompress (unsigned char *outStream, SizeT *uncompressedSize,      g_Alloc.Alloc = SzAlloc;      g_Alloc.Free = SzFree; +    /* Short-circuit early if we know the buffer can't hold the results. */ +    if (outSizeFull != (SizeT)-1 && *uncompressedSize < outSizeFull) +        return SZ_ERROR_OUTPUT_EOF; +      /* Decompress */ -    outProcessed = outSizeFull; +    outProcessed = *uncompressedSize;      WATCHDOG_RESET();      res = LzmaDecode(          outStream, &outProcessed,          inStream + LZMA_DATA_OFFSET, &compressedSize, -        inStream, LZMA_PROPS_SIZE, LZMA_FINISH_ANY, &state, &g_Alloc); +        inStream, LZMA_PROPS_SIZE, LZMA_FINISH_END, &state, &g_Alloc);      *uncompressedSize = outProcessed;      if (res != SZ_OK)  {          return res; |