33 .tags_info = (arr), .num_tags = sizeof(arr) / sizeof((arr)[0]) \
66 uint8_t *input = data + ps;
69 if (cmd_idx >= n_configs || configs[cmd_idx].num_tags == 0 || (seed & 1U) != 0) {
80 size_t tlv_size =
tlv_custom_mutate(payload + 2, payload_size - 2, max_payload - 2, seed >> 2);
82 payload[0] = (uint8_t) (tlv_size >> 8);
83 payload[1] = (uint8_t) (tlv_size & 0xFF);
#define FUZZ_CTRL_LEN
Bytes 0..3 steer the harness; byte 4 onwards is payload.
Prefix-aware LibFuzzer custom mutator.
size_t fuzz_prefix_size(void)
Where Absolution's sampled state ends (see cmake/EmitPrefixSize.cmake).
size_t fuzz_custom_mutator(uint8_t *data, size_t size, size_t max_size, unsigned int seed)
The framework's LLVMFuzzerCustomMutator() body.
The TLV grammar the mutator currently applies (one per command).
size_t num_tags
Number of entries in tags_info.
const tlv_tag_info_t * tags_info
Array of allowed tags.
Length bounds the mutator keeps for one TLV tag.
uint8_t min_len
Minimum value length to emit.
uint8_t max_len
Maximum value length to emit.
tlv_fuzz_config_t current_tlv_fuzz_config
const size_t fuzz_n_commands
static size_t fuzz_tlv_dispatch_mutate(uint8_t *data, size_t size, size_t max_size, unsigned int seed, const tlv_fuzz_config_t *configs, size_t n_configs)
size_t tlv_custom_mutate(uint8_t *data, size_t size, size_t max_size, unsigned int seed)
Mutate a TLV byte range in place, preserving valid framing.