]> git.ipfire.org Git - thirdparty/zstd.git/commitdiff
No longer reject dictionaries with literals maxSymbolValue < 255
authorNick Terrell <terrelln@meta.com>
Mon, 21 Aug 2023 18:33:29 +0000 (11:33 -0700)
committerNick Terrell <nickrterrell@gmail.com>
Tue, 22 Aug 2023 17:22:35 +0000 (13:22 -0400)
We already have logic in our Huffman encoder to validate Huffman tables with missing symbols.
We use this for higher compression levels to re-use the previous blocks statistics, or when the dictionaries table has zero-weighted symbols.
This check was leftover as an oversight from before we added validation for Huffman tables.

I validated that the `dictionary_loader` fuzzer has coverage of every line in the `ZSTD_loadCEntropy()` function to validate that it is correctly testing this function.

lib/compress/zstd_compress.c

index 209f3b0eeacaa9b1a559564d2367f1a8fb453c80..36c1f99e800e9cc3a10afd0ed3f6ecde9927f13a 100644 (file)
@@ -4904,11 +4904,10 @@ size_t ZSTD_loadCEntropy(ZSTD_compressedBlockState_t* bs, void* workspace,
 
         /* We only set the loaded table as valid if it contains all non-zero
          * weights. Otherwise, we set it to check */
-        if (!hasZeroWeights)
+        if (!hasZeroWeights && maxSymbolValue == 255)
             bs->entropy.huf.repeatMode = HUF_repeat_valid;
 
         RETURN_ERROR_IF(HUF_isError(hufHeaderSize), dictionary_corrupted, "");
-        RETURN_ERROR_IF(maxSymbolValue < 255, dictionary_corrupted, "");
         dictPtr += hufHeaderSize;
     }