]> git.ipfire.org Git - thirdparty/zstd.git/commitdiff
Add size-hint to fuzz tests
authorNick Magerko <nmagerko@fb.com>
Mon, 19 Aug 2019 22:12:24 +0000 (15:12 -0700)
committerNick Magerko <nmagerko@fb.com>
Mon, 19 Aug 2019 22:12:29 +0000 (15:12 -0700)
tests/fuzz/zstd_helpers.c
tests/zstreamtest.c

index 9dff2895a9c01cd2f52ad7177aa821af2a784a76..5d24a48c47d708973cb81d45b8d62cc9974ed4c1 100644 (file)
@@ -90,6 +90,9 @@ void FUZZ_setRandomParameters(ZSTD_CCtx *cctx, size_t srcSize, uint32_t *state)
     setRand(cctx, ZSTD_c_forceMaxWindow, 0, 1, state);
     setRand(cctx, ZSTD_c_literalCompressionMode, 0, 2, state);
     setRand(cctx, ZSTD_c_forceAttachDict, 0, 2, state);
+    if (FUZZ_rand32(state, 0, 1) == 0) {
+      setRand(cctx, ZSTD_c_srcSizeHint, 0, 2 * srcSize, state);
+    }
 }
 
 FUZZ_dict_t FUZZ_train(void const* src, size_t srcSize, uint32_t *state)
index 97d4e33e150caff193bd4db06c6f487d61284095..70326677c7cfe659e90e6d6da2b849d9c73ef7ed 100644 (file)
@@ -1151,6 +1151,21 @@ static int basicUnitTests(U32 seed, double compressibility)
     }
     DISPLAYLEVEL(3, "OK \n");
 
+    DISPLAYLEVEL(3, "test%3i : ZSTD_c_srcSizeHint provides hint about size of stream : ", testNb++);
+    {
+      CHECK_Z( ZSTD_initCStream(zc, 1 /* cLevel */) );
+      outBuff.dst = (char*)(compressedBuffer);
+      outBuff.size = compressedBufferSize;
+      outBuff.pos = 0;
+      inBuff.src = CNBuffer;
+      inBuff.size = CNBufferSize;
+      inBuff.pos = 0;
+      CHECK_Z( ZSTD_compressStream(zc, &outBuff, &inBuff) );
+      if (inBuff.pos != inBuff.size) goto _output_error;   /* entire input should be consumed */
+      { size_t const r = ZSTD_endStream(zc, &outBuff);
+        if (r != 0) goto _output_error; }  /* error, or some data not flushed */
+    }
+
     /* Overlen overwriting window data bug */
     DISPLAYLEVEL(3, "test%3i : wildcopy doesn't overwrite potential match data : ", testNb++);
     {   /* This test has a window size of 1024 bytes and consists of 3 blocks:
@@ -2106,6 +2121,7 @@ static int fuzzerTests_newAPI(U32 seed, int nbTests, int startTest,
                     if (FUZ_rand(&lseed) & 3) CHECK_Z( setCCtxParameter(zc, cctxParams, ZSTD_c_ldmMinMatch, FUZ_randomClampedLength(&lseed, ZSTD_LDM_MINMATCH_MIN, ZSTD_LDM_MINMATCH_MAX), opaqueAPI) );
                     if (FUZ_rand(&lseed) & 3) CHECK_Z( setCCtxParameter(zc, cctxParams, ZSTD_c_ldmBucketSizeLog, FUZ_randomClampedLength(&lseed, ZSTD_LDM_BUCKETSIZELOG_MIN, ZSTD_LDM_BUCKETSIZELOG_MAX), opaqueAPI) );
                     if (FUZ_rand(&lseed) & 3) CHECK_Z( setCCtxParameter(zc, cctxParams, ZSTD_c_ldmHashRateLog, FUZ_randomClampedLength(&lseed, ZSTD_LDM_HASHRATELOG_MIN, ZSTD_LDM_HASHRATELOG_MAX), opaqueAPI) );
+                    if (FUZ_rand(&lseed) & 3) CHECK_Z( setCCtxParameter(zc, cctxParams, ZSTD_c_srcSizeHint, FUZ_randomClampedLength(&lseed, 0, ZSTD_ZSTD_SRCSIZEHINT_MAX), opaqueAPI) );
                 }
 
                 /* mess with frame parameters */