From d9c475f3b3e7e22d8f78d2b9c501ccf875d8d81f Mon Sep 17 00:00:00 2001 From: Sen Huang Date: Thu, 7 Nov 2019 16:24:55 -0500 Subject: [PATCH] Fix static analyze error, use proper bounds for dictEnd --- lib/compress/zstd_compress.c | 3 ++- lib/dictBuilder/zdict.c | 7 ++++--- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/lib/compress/zstd_compress.c b/lib/compress/zstd_compress.c index 247470e5..89c34d5e 100644 --- a/lib/compress/zstd_compress.c +++ b/lib/compress/zstd_compress.c @@ -2772,8 +2772,9 @@ size_t ZSTD_loadCEntropy(ZSTD_compressedBlockState_t* bs, void* workspace, short* offcodeNCount, unsigned* offcodeMaxValue, const void* const dict, size_t dictSize) { - const BYTE* dictPtr = (const BYTE*)dict + 8; /* skip magic num and dict ID */ + const BYTE* dictPtr = (const BYTE*)dict; /* skip magic num and dict ID */ const BYTE* const dictEnd = dictPtr + dictSize; + dictPtr += 8; { unsigned maxSymbolValue = 255; size_t const hufHeaderSize = HUF_readCTable((HUF_CElt*)bs->entropy.huf.CTable, &maxSymbolValue, dictPtr, dictEnd-dictPtr); diff --git a/lib/dictBuilder/zdict.c b/lib/dictBuilder/zdict.c index de8576af..9cee71be 100644 --- a/lib/dictBuilder/zdict.c +++ b/lib/dictBuilder/zdict.c @@ -107,14 +107,15 @@ size_t ZDICT_getDictHeaderSize(const void* dictBuffer, size_t dictSize) { size_t headerSize; unsigned offcodeMaxValue = MaxOff; ZSTD_compressedBlockState_t* bs = (ZSTD_compressedBlockState_t*)malloc(sizeof(ZSTD_compressedBlockState_t)); + if (!bs) return ERROR(memory_allocation); U32* wksp = (U32*)malloc(HUF_WORKSPACE_SIZE); + if (!wksp) return ERROR(memory_allocation); short* offcodeNCount = (short*)malloc((MaxOff+1)*sizeof(short)); - if (!bs || !wksp || !offcodeNCount) { - return ERROR(memory_allocation); - } + if (!offcodeNCount) return ERROR(memory_allocation); ZSTD_reset_compressedBlockState(bs); headerSize = ZSTD_loadCEntropy(bs, wksp, offcodeNCount, &offcodeMaxValue, dictBuffer, dictSize); + free(bs); free(wksp); free(offcodeNCount);