X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=lib%2Flzma%2FLzmaTools.c;h=2537cb8f8c631bb633ed4753f4a58ace752360f4;hb=008fb489fa51607dcde1d291aa3442809920ffb2;hp=2eafad246e9e090970b59f321ddf615f029bc8e4;hpb=606a76f8ef479e42ae4d06f8f3ce87e9a1c72acf;p=oweals%2Fu-boot.git diff --git a/lib/lzma/LzmaTools.c b/lib/lzma/LzmaTools.c index 2eafad246e..2537cb8f8c 100644 --- a/lib/lzma/LzmaTools.c +++ b/lib/lzma/LzmaTools.c @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: GPL-2.0+ /* * Usefuls routines based on the LzmaTest.c file from LZMA SDK 4.65 * @@ -5,24 +6,6 @@ * Luigi 'Comio' Mantellini (luigi.mantellini@idf-hit.com) * * Copyright (C) 1999-2005 Igor Pavlov - * - * See file CREDITS for list of people who contributed to this - * project. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of - * the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, - * MA 02111-1307 USA */ /* @@ -50,8 +33,8 @@ #include #include -static void *SzAlloc(void *p, size_t size) { p = p; return malloc(size); } -static void SzFree(void *p, void *address) { p = p; free(address); } +static void *SzAlloc(void *p, size_t size) { return malloc(size); } +static void SzFree(void *p, void *address) { free(address); } int lzmaBuffToBuffDecompress (unsigned char *outStream, SizeT *uncompressedSize, unsigned char *inStream, SizeT length) @@ -107,22 +90,29 @@ int lzmaBuffToBuffDecompress (unsigned char *outStream, SizeT *uncompressedSize, } } - debug ("LZMA: Uncompresed size............ 0x%x\n", outSizeFull); - debug ("LZMA: Compresed size.............. 0x%x\n", compressedSize); + debug("LZMA: Uncompresed size............ 0x%zx\n", outSizeFull); + debug("LZMA: Compresed size.............. 0x%zx\n", compressedSize); 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 = min(outSizeFull, *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; + + debug("LZMA: Uncompressed ............... 0x%zx\n", outProcessed); + if (res != SZ_OK) { return res; }