From: senhuang42 Date: Wed, 1 Sep 2021 16:25:20 +0000 (-0400) Subject: Add 8 bytes to FSE workspace X-Git-Tag: v1.5.1~1^2~120^2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=refs%2Fpull%2F2761%2Fhead;p=thirdparty%2Fzstd.git Add 8 bytes to FSE workspace --- diff --git a/lib/common/fse.h b/lib/common/fse.h index df8280ccd..714bfd3e7 100644 --- a/lib/common/fse.h +++ b/lib/common/fse.h @@ -336,8 +336,9 @@ size_t FSE_buildCTable_rle (FSE_CTable* ct, unsigned char symbolValue); /* FSE_buildCTable_wksp() : * Same as FSE_buildCTable(), but using an externally allocated scratch buffer (`workSpace`). * `wkspSize` must be >= `FSE_BUILD_CTABLE_WORKSPACE_SIZE_U32(maxSymbolValue, tableLog)` of `unsigned`. + * See FSE_buildCTable_wksp() for breakdown of workspace usage. */ -#define FSE_BUILD_CTABLE_WORKSPACE_SIZE_U32(maxSymbolValue, tableLog) (((maxSymbolValue + 2) + (1ull << (tableLog)))/2) +#define FSE_BUILD_CTABLE_WORKSPACE_SIZE_U32(maxSymbolValue, tableLog) (((maxSymbolValue + 2) + (1ull << (tableLog)))/2 + sizeof(U64)/sizeof(U32) /* additional 8 bytes for potential table overwrite */) #define FSE_BUILD_CTABLE_WORKSPACE_SIZE(maxSymbolValue, tableLog) (sizeof(unsigned) * FSE_BUILD_CTABLE_WORKSPACE_SIZE_U32(maxSymbolValue, tableLog)) size_t FSE_buildCTable_wksp(FSE_CTable* ct, const short* normalizedCounter, unsigned maxSymbolValue, unsigned tableLog, void* workSpace, size_t wkspSize); diff --git a/lib/compress/fse_compress.c b/lib/compress/fse_compress.c index 16948245e..faca767c5 100644 --- a/lib/compress/fse_compress.c +++ b/lib/compress/fse_compress.c @@ -116,7 +116,7 @@ size_t FSE_buildCTable_wksp(FSE_CTable* ct, /* Case for no low prob count symbols. Lay down 8 bytes at a time * to reduce branch misses since we are operating on a small block */ - BYTE* const spread = tableSymbol + tableSize; /* size = tableSize */ + BYTE* const spread = tableSymbol + tableSize; /* size = tableSize + 8 (may write beyond tableSize) */ { U64 const add = 0x0101010101010101ull; size_t pos = 0; U64 sv = 0;