]> git.ipfire.org Git - thirdparty/zstd.git/commitdiff
Add 8 bytes to FSE workspace 2761/head
authorsenhuang42 <senhuang96@fb.com>
Wed, 1 Sep 2021 16:25:20 +0000 (12:25 -0400)
committersenhuang42 <senhuang96@fb.com>
Wed, 1 Sep 2021 19:56:33 +0000 (15:56 -0400)
lib/common/fse.h
lib/compress/fse_compress.c

index df8280ccdc88408364da7b7d746ad904b90b959b..714bfd3e7f22e8b9d6ec4dd85427c14f9a3cec8b 100644 (file)
@@ -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);
 
index 16948245ecaf3700c0c4cdcc4dc7c53abfab830b..faca767c5cedecdcc04e799996fbd6c3397bd770 100644 (file)
@@ -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;