summaryrefslogtreecommitdiff
path: root/tests/fuzz/simple_compress.c
diff options
context:
space:
mode:
Diffstat (limited to 'tests/fuzz/simple_compress.c')
-rw-r--r--tests/fuzz/simple_compress.c27
1 files changed, 16 insertions, 11 deletions
diff --git a/tests/fuzz/simple_compress.c b/tests/fuzz/simple_compress.c
index aaed4035750c..487be3a354ce 100644
--- a/tests/fuzz/simple_compress.c
+++ b/tests/fuzz/simple_compress.c
@@ -18,28 +18,33 @@
#include <stdio.h>
#include "fuzz_helpers.h"
#include "zstd.h"
+#include "zstd_helpers.h"
+#include "fuzz_data_producer.h"
static ZSTD_CCtx *cctx = NULL;
int LLVMFuzzerTestOneInput(const uint8_t *src, size_t size)
{
- uint32_t seed = FUZZ_seed(&src, &size);
+ /* Give a random portion of src data to the producer, to use for
+ parameter generation. The rest will be used for (de)compression */
+ FUZZ_dataProducer_t *producer = FUZZ_dataProducer_create(src, size);
+ size = FUZZ_dataProducer_reserveDataPrefix(producer);
+
size_t const maxSize = ZSTD_compressBound(size);
- int i;
+ size_t const bufSize = FUZZ_dataProducer_uint32Range(producer, 0, maxSize);
+
+ int const cLevel = FUZZ_dataProducer_int32Range(producer, kMinClevel, kMaxClevel);
+
if (!cctx) {
cctx = ZSTD_createCCtx();
FUZZ_ASSERT(cctx);
}
- /* Run it 10 times over 10 output sizes. Reuse the context. */
- for (i = 0; i < 10; ++i) {
- int const level = (int)FUZZ_rand32(&seed, 0, 19 + 3) - 3; /* [-3, 19] */
- size_t const bufSize = FUZZ_rand32(&seed, 0, maxSize);
- void* rBuf = malloc(bufSize);
- FUZZ_ASSERT(rBuf);
- ZSTD_compressCCtx(cctx, rBuf, bufSize, src, size, level);
- free(rBuf);
- }
+ void *rBuf = malloc(bufSize);
+ FUZZ_ASSERT(rBuf);
+ ZSTD_compressCCtx(cctx, rBuf, bufSize, src, size, cLevel);
+ free(rBuf);
+ FUZZ_dataProducer_free(producer);
#ifndef STATEFUL_FUZZING
ZSTD_freeCCtx(cctx); cctx = NULL;
#endif