No longer reject dictionaries with literals maxSymbolValue < 255
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.
This commit is contained in:
committed by
Nick Terrell
parent
9662fe1683
commit
bd02c9be6e
@@ -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
|
/* We only set the loaded table as valid if it contains all non-zero
|
||||||
* weights. Otherwise, we set it to check */
|
* weights. Otherwise, we set it to check */
|
||||||
if (!hasZeroWeights)
|
if (!hasZeroWeights && maxSymbolValue == 255)
|
||||||
bs->entropy.huf.repeatMode = HUF_repeat_valid;
|
bs->entropy.huf.repeatMode = HUF_repeat_valid;
|
||||||
|
|
||||||
RETURN_ERROR_IF(HUF_isError(hufHeaderSize), dictionary_corrupted, "");
|
RETURN_ERROR_IF(HUF_isError(hufHeaderSize), dictionary_corrupted, "");
|
||||||
RETURN_ERROR_IF(maxSymbolValue < 255, dictionary_corrupted, "");
|
|
||||||
dictPtr += hufHeaderSize;
|
dictPtr += hufHeaderSize;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user