/* 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_t producerSliceSize = FUZZ_dataProducer_uint32Range(producer, 0, size);
- size = FUZZ_dataProducer_contract(producer, producerSliceSize);
+ size = FUZZ_dataProducer_reserveDataPrefix(producer);
int cLevel = FUZZ_dataProducer_uint32(producer) % kMaxClevel;
/* 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_t producerSliceSize = FUZZ_dataProducer_uint32Range(producer, 0, size);
- size = FUZZ_dataProducer_contract(producer, producerSliceSize);
+ size = FUZZ_dataProducer_reserveDataPrefix(producer);
FUZZ_dict_t dict;
ZSTD_DDict* ddict = NULL;
/* 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_t producerSliceSize = FUZZ_dataProducer_uint32Range(producer, 0, size);
- size = FUZZ_dataProducer_contract(producer, producerSliceSize);
+ size = FUZZ_dataProducer_reserveDataPrefix(producer);
size_t const rBufSize = size;
void* rBuf = malloc(rBufSize);
producer->size = newSize;
return remaining;
}
+
+size_t FUZZ_dataProducer_reserveDataPrefix(FUZZ_dataProducer_t *producer)
+{
+ size_t producerSliceSize = FUZZ_dataProducer_uint32Range(
+ producer, 0, producer->size);
+ return FUZZ_dataProducer_contract(producer, producerSliceSize);
+}
/* Returns the size of the remaining bytes of data in the producer */
size_t FUZZ_dataProducer_remainingBytes(FUZZ_dataProducer_t *producer);
-/* Tells the producer to contract to newSize bytes of data it currently uses,
-counted from the end, and forget about the rest. If newSize > current data size,
-nothing happens. Returns the number of bytes the producer won't use anymore,
-after contracting. */
+/* Restricts the producer to only the last newSize bytes of data.
+If newSize > current data size, nothing happens. Returns the number of bytes
+the producer won't use anymore, after contracting. */
size_t FUZZ_dataProducer_contract(FUZZ_dataProducer_t *producer, size_t newSize);
+/* Restricts the producer to use only the last X bytes of data, where X is
+ a random number in the interval [0, data_size]. Returns the size of the
+ remaining data the producer won't use anymore (the prefix). */
+size_t FUZZ_dataProducer_reserveDataPrefix(FUZZ_dataProducer_t *producer);
#endif // FUZZ_DATA_PRODUCER_H
/* 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_t producerSliceSize = FUZZ_dataProducer_uint32Range(producer, 0, size);
- size = FUZZ_dataProducer_contract(producer, producerSliceSize);
+ size = FUZZ_dataProducer_reserveDataPrefix(producer);
size_t const maxSize = ZSTD_compressBound(size);
size_t const bufSize = FUZZ_dataProducer_uint32Range(producer, 0, maxSize);
/* 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_t producerSliceSize = FUZZ_dataProducer_uint32Range(producer, 0, size);
- size = FUZZ_dataProducer_contract(producer, producerSliceSize);
+ size = FUZZ_dataProducer_reserveDataPrefix(producer);
if (!dctx) {
dctx = ZSTD_createDCtx();
/* 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_t producerSliceSize = FUZZ_dataProducer_uint32Range(producer, 0, size);
- size = FUZZ_dataProducer_contract(producer, producerSliceSize);
+ size = FUZZ_dataProducer_reserveDataPrefix(producer);
/* Half of the time fuzz with a 1 byte smaller output size.
* This will still succeed because we don't use a dictionary, so the dictID
/* 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_t producerSliceSize = FUZZ_dataProducer_uint32Range(producer, 0, size);
- size = FUZZ_dataProducer_contract(producer, producerSliceSize);
+ size = FUZZ_dataProducer_reserveDataPrefix(producer);
/* Allocate all buffers and contexts if not already allocated */
if (!buf) {
/* 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_t producerSliceSize = FUZZ_dataProducer_uint32Range(producer, 0, size);
- size = FUZZ_dataProducer_contract(producer, producerSliceSize);
+ size = FUZZ_dataProducer_reserveDataPrefix(producer);
size_t neededBufSize;
neededBufSize = ZSTD_compressBound(size) * 5;