xref: /aosp_15_r20/external/lz4/ossfuzz/fuzz_data_producer.h (revision 27162e4e17433d5aa7cb38e7b6a433a09405fc7f)
1*27162e4eSAndroid Build Coastguard Worker #include <stddef.h>
2*27162e4eSAndroid Build Coastguard Worker #include <stdint.h>
3*27162e4eSAndroid Build Coastguard Worker #include <stdio.h>
4*27162e4eSAndroid Build Coastguard Worker #include <stdlib.h>
5*27162e4eSAndroid Build Coastguard Worker 
6*27162e4eSAndroid Build Coastguard Worker #include "fuzz_helpers.h"
7*27162e4eSAndroid Build Coastguard Worker #include "lz4frame.h"
8*27162e4eSAndroid Build Coastguard Worker #include "lz4hc.h"
9*27162e4eSAndroid Build Coastguard Worker 
10*27162e4eSAndroid Build Coastguard Worker /* Struct used for maintaining the state of the data */
11*27162e4eSAndroid Build Coastguard Worker typedef struct FUZZ_dataProducer_s FUZZ_dataProducer_t;
12*27162e4eSAndroid Build Coastguard Worker 
13*27162e4eSAndroid Build Coastguard Worker /* Returns a data producer state struct. Use for producer initialization. */
14*27162e4eSAndroid Build Coastguard Worker FUZZ_dataProducer_t *FUZZ_dataProducer_create(const uint8_t *data, size_t size);
15*27162e4eSAndroid Build Coastguard Worker 
16*27162e4eSAndroid Build Coastguard Worker /* Frees the data producer */
17*27162e4eSAndroid Build Coastguard Worker void FUZZ_dataProducer_free(FUZZ_dataProducer_t *producer);
18*27162e4eSAndroid Build Coastguard Worker 
19*27162e4eSAndroid Build Coastguard Worker /* Returns 32 bits from the end of data */
20*27162e4eSAndroid Build Coastguard Worker uint32_t FUZZ_dataProducer_retrieve32(FUZZ_dataProducer_t *producer);
21*27162e4eSAndroid Build Coastguard Worker 
22*27162e4eSAndroid Build Coastguard Worker /* Returns value between [min, max] */
23*27162e4eSAndroid Build Coastguard Worker uint32_t FUZZ_getRange_from_uint32(uint32_t seed, uint32_t min, uint32_t max);
24*27162e4eSAndroid Build Coastguard Worker 
25*27162e4eSAndroid Build Coastguard Worker /* Combination of above two functions for non adaptive use cases. ie where size is not involved */
26*27162e4eSAndroid Build Coastguard Worker uint32_t FUZZ_dataProducer_range32(FUZZ_dataProducer_t *producer, uint32_t min,
27*27162e4eSAndroid Build Coastguard Worker                                   uint32_t max);
28*27162e4eSAndroid Build Coastguard Worker 
29*27162e4eSAndroid Build Coastguard Worker /* Returns lz4 preferences */
30*27162e4eSAndroid Build Coastguard Worker LZ4F_preferences_t FUZZ_dataProducer_preferences(FUZZ_dataProducer_t* producer);
31*27162e4eSAndroid Build Coastguard Worker 
32*27162e4eSAndroid Build Coastguard Worker /* Returns lz4 frame info */
33*27162e4eSAndroid Build Coastguard Worker LZ4F_frameInfo_t FUZZ_dataProducer_frameInfo(FUZZ_dataProducer_t* producer);
34*27162e4eSAndroid Build Coastguard Worker 
35*27162e4eSAndroid Build Coastguard Worker /* Returns the size of the remaining bytes of data in the producer */
36*27162e4eSAndroid Build Coastguard Worker size_t FUZZ_dataProducer_remainingBytes(FUZZ_dataProducer_t *producer);
37