24#ifndef FUZZ_APP_DATA_OFF
25#define FUZZ_APP_DATA_OFF 0
27#ifndef FUZZ_APP_DATA_LEN
28#define FUZZ_APP_DATA_LEN 0
43#if FUZZ_APP_DATA_LEN > 0
45 FUZZ_MUT_STRUCTURED_APP_DATA_CUTOFF = 40,
56 size_t prefix_size = FUZZ_PREFIX_SIZE_FALLBACK;
58 if (&absolution_globals_size != NULL && absolution_globals_size != 0) {
59 prefix_size = absolution_globals_size;
66 if (prefix_size == 0 || prefix_size >= max_size) {
70 if (FUZZ_CTRL_OFF + FUZZ_CTRL_LEN > prefix_size) {
74#if FUZZ_APP_DATA_LEN > 0
91 memset(data, 0, size);
96static void fuzz_mutate_window(uint8_t *data,
size_t data_len,
size_t max_span,
unsigned int pick)
102 size_t start = pick % data_len;
103 size_t span = data_len - start;
104 if (span > max_span) {
118 (void)
LLVMFuzzerMutate(data + FUZZ_CTRL_OFF, FUZZ_CTRL_LEN, FUZZ_CTRL_LEN);
131#if FUZZ_APP_DATA_LEN > 0
132static void fuzz_mutate_app_data(uint8_t *data,
unsigned int seed)
138#ifdef FUZZ_INJECT_TOKEN
139static void fuzz_maybe_inject_structured_token(uint8_t *data,
unsigned int seed)
148#ifdef FUZZ_INJECT_TOKEN
149static void fuzz_maybe_inject_raw_token(uint8_t *data,
size_t post_prefix_size,
unsigned int seed)
152 FUZZ_INJECT_TOKEN(data, post_prefix_size, seed >> 16);
159 size_t post_prefix_size,
163 unsigned int dice = seed % 100;
165#if FUZZ_APP_DATA_LEN > 0
166 if (dice < FUZZ_MUT_STRUCTURED_APP_DATA_CUTOFF) {
167 fuzz_mutate_app_data(data, seed);
183#if FUZZ_APP_DATA_LEN > 0
184#ifdef FUZZ_INJECT_TOKEN
185 fuzz_maybe_inject_structured_token(data, seed);
189 return post_prefix_size;
194 size_t post_prefix_size,
205#ifdef FUZZ_INJECT_TOKEN
206 fuzz_maybe_inject_raw_token(data + prefix_size, post_prefix_size, seed);
209 return post_prefix_size;
215 size_t post_prefix_size;
223 if (size <= prefix_size) {
227 post_prefix_size = size - prefix_size;
229 if (fuzz_lane_is_structured(data, prefix_size)) {
234 post_prefix_size =
fuzz_mutate_raw(data, prefix_size, post_prefix_size, max_size, seed);
237 return prefix_size + post_prefix_size;
static size_t fuzz_prefix_size(void)
@ FUZZ_MUT_RAW_PREFIX_MASK
@ FUZZ_MUT_STRUCTURED_CTRL_CUTOFF
@ FUZZ_MUT_TOKEN_INJECT_MASK
@ FUZZ_MUT_APP_DATA_WINDOW_MAX
@ FUZZ_MUT_PREFIX_WINDOW_MAX
@ FUZZ_MUT_INITIAL_POST_PREFIX_SIZE
static size_t fuzz_mutate_raw(uint8_t *data, size_t prefix_size, size_t post_prefix_size, size_t max_size, unsigned int seed)
static void fuzz_mutate_prefix_window(uint8_t *data, size_t prefix_size, unsigned int pick)
#define FUZZ_APP_DATA_OFF
static size_t fuzz_mutate_with_split(uint8_t *data, size_t size, size_t max_size, unsigned int seed)
static void fuzz_mutate_ctrl(uint8_t *data)
static size_t fuzz_mutate_post_prefix(uint8_t *data, size_t size, size_t max_size)
static size_t fuzz_mutate_structured(uint8_t *data, size_t prefix_size, size_t post_prefix_size, size_t max_size, unsigned int seed)
static int fuzz_split_is_valid(size_t prefix_size, size_t max_size)
#define FUZZ_APP_DATA_LEN
const size_t absolution_globals_size __attribute__((weak))
static size_t fuzz_bootstrap_input(uint8_t *data, size_t size, size_t prefix_size, size_t max_size)
size_t LLVMFuzzerMutate(uint8_t *data, size_t size, size_t max_size)
@ FUZZ_MUT_STRUCTURED_POST_PREFIX_CUTOFF
static int fuzz_should_inject_token(unsigned int seed)
static size_t fuzz_custom_mutator(uint8_t *data, size_t size, size_t max_size, unsigned int seed)
static void fuzz_mutate_window(uint8_t *data, size_t data_len, size_t max_span, unsigned int pick)