Merge pull request #2586 from senhuang42/dds_fuzz

Add DDS to oss fuzzer
This commit is contained in:
sen
2021-04-24 12:39:16 -04:00
committed by GitHub
3 changed files with 10 additions and 6 deletions
+7 -4
View File
@@ -3365,7 +3365,7 @@ static U32 ZSTD_resolveRepcodeToRawOffset(const U32 rep[ZSTD_REP_NUM], const U32
* ZSTD_seqStore_resolveOffCodes() reconciles any possible divergences in offset history that may arise * ZSTD_seqStore_resolveOffCodes() reconciles any possible divergences in offset history that may arise
* due to emission of RLE/raw blocks that disturb the offset history, and replaces any repcodes within * due to emission of RLE/raw blocks that disturb the offset history, and replaces any repcodes within
* the seqStore that may be invalid. * the seqStore that may be invalid.
* *
* dRepcodes are updated as would be on the decompression side. cRepcodes are updated exactly in * dRepcodes are updated as would be on the decompression side. cRepcodes are updated exactly in
* accordance with the seqStore. * accordance with the seqStore.
*/ */
@@ -3555,14 +3555,14 @@ static size_t ZSTD_compressBlock_splitBlock_internal(ZSTD_CCtx* zc, void* dst, s
* may become invalid. In order to reconcile potentially invalid repcodes, we keep track of two * may become invalid. In order to reconcile potentially invalid repcodes, we keep track of two
* separate repcode histories that simulate repcode history on compression and decompression side, * separate repcode histories that simulate repcode history on compression and decompression side,
* and use the histories to determine whether we must replace a particular repcode with its raw offset. * and use the histories to determine whether we must replace a particular repcode with its raw offset.
* *
* 1) cRep gets updated for each partition, regardless of whether the block was emitted as uncompressed * 1) cRep gets updated for each partition, regardless of whether the block was emitted as uncompressed
* or RLE. This allows us to retrieve the offset value that an invalid repcode references within * or RLE. This allows us to retrieve the offset value that an invalid repcode references within
* a nocompress/RLE block. * a nocompress/RLE block.
* 2) dRep gets updated only for compressed partitions, and when a repcode gets replaced, will use * 2) dRep gets updated only for compressed partitions, and when a repcode gets replaced, will use
* the replacement offset value rather than the original repcode to update the repcode history. * the replacement offset value rather than the original repcode to update the repcode history.
* dRep also will be the final repcode history sent to the next block. * dRep also will be the final repcode history sent to the next block.
* *
* See ZSTD_seqStore_resolveOffCodes() for more details. * See ZSTD_seqStore_resolveOffCodes() for more details.
*/ */
repcodes_t dRep; repcodes_t dRep;
@@ -6192,7 +6192,7 @@ static int ZSTD_dedicatedDictSearch_isSupported(
{ {
return (cParams->strategy >= ZSTD_greedy) return (cParams->strategy >= ZSTD_greedy)
&& (cParams->strategy <= ZSTD_lazy2) && (cParams->strategy <= ZSTD_lazy2)
&& (cParams->hashLog >= cParams->chainLog) && (cParams->hashLog > cParams->chainLog)
&& (cParams->chainLog <= 24); && (cParams->chainLog <= 24);
} }
@@ -6211,6 +6211,9 @@ static void ZSTD_dedicatedDictSearch_revertCParams(
case ZSTD_lazy: case ZSTD_lazy:
case ZSTD_lazy2: case ZSTD_lazy2:
cParams->hashLog -= ZSTD_LAZY_DDSS_BUCKET_LOG; cParams->hashLog -= ZSTD_LAZY_DDSS_BUCKET_LOG;
if (cParams->hashLog < ZSTD_HASHLOG_MIN) {
cParams->hashLog = ZSTD_HASHLOG_MIN;
}
break; break;
case ZSTD_btlazy2: case ZSTD_btlazy2:
case ZSTD_btopt: case ZSTD_btopt:
+2 -2
View File
@@ -469,7 +469,7 @@ void ZSTD_dedicatedDictSearch_lazy_loadDictionary(ZSTD_matchState_t* ms, const B
U32 hashIdx; U32 hashIdx;
assert(ms->cParams.chainLog <= 24); assert(ms->cParams.chainLog <= 24);
assert(ms->cParams.hashLog >= ms->cParams.chainLog); assert(ms->cParams.hashLog > ms->cParams.chainLog);
assert(idx != 0); assert(idx != 0);
assert(tmpMinChain <= minChain); assert(tmpMinChain <= minChain);
@@ -500,7 +500,7 @@ void ZSTD_dedicatedDictSearch_lazy_loadDictionary(ZSTD_matchState_t* ms, const B
if (count == cacheSize) { if (count == cacheSize) {
for (count = 0; count < chainLimit;) { for (count = 0; count < chainLimit;) {
if (i < minChain) { if (i < minChain) {
if (!i || countBeyondMinChain++ > cacheSize) { if (!i || ++countBeyondMinChain > cacheSize) {
/* only allow pulling `cacheSize` number of entries /* only allow pulling `cacheSize` number of entries
* into the cache or chainTable beyond `minChain`, * into the cache or chainTable beyond `minChain`,
* to replace the entries pulled out of the * to replace the entries pulled out of the
+1
View File
@@ -92,6 +92,7 @@ void FUZZ_setRandomParameters(ZSTD_CCtx *cctx, size_t srcSize, FUZZ_dataProducer
setRand(cctx, ZSTD_c_nbWorkers, 0, 2, producer); setRand(cctx, ZSTD_c_nbWorkers, 0, 2, producer);
setRand(cctx, ZSTD_c_rsyncable, 0, 1, producer); setRand(cctx, ZSTD_c_rsyncable, 0, 1, producer);
setRand(cctx, ZSTD_c_useRowMatchFinder, 0, 2, producer); setRand(cctx, ZSTD_c_useRowMatchFinder, 0, 2, producer);
setRand(cctx, ZSTD_c_enableDedicatedDictSearch, 0, 1, producer);
setRand(cctx, ZSTD_c_forceMaxWindow, 0, 1, producer); setRand(cctx, ZSTD_c_forceMaxWindow, 0, 1, producer);
setRand(cctx, ZSTD_c_literalCompressionMode, 0, 2, producer); setRand(cctx, ZSTD_c_literalCompressionMode, 0, 2, producer);
setRand(cctx, ZSTD_c_forceAttachDict, 0, 2, producer); setRand(cctx, ZSTD_c_forceAttachDict, 0, 2, producer);