itoa/fuzz/fuzz_targets/fuzz_itoa.rs

45 lines
1.3 KiB
Rust
Raw Normal View History

2022-03-04 16:19:14 -05:00
#![no_main]
use libfuzzer_sys::arbitrary;
use libfuzzer_sys::fuzz_target;
#[derive(arbitrary::Arbitrary, Debug, Clone)]
enum IntegerInput {
I8(i8),
U8(u8),
I16(i16),
U16(u16),
I32(i32),
U32(u32),
I64(i64),
U64(u64),
ISIZE(isize),
USIZE(usize),
I128(i128),
U128(u128),
}
#[derive(arbitrary::Arbitrary, Debug, Clone)]
struct Inputs {
inputs: Vec<IntegerInput>,
}
fuzz_target!(|input: Inputs| {
let mut buffer = itoa::Buffer::new();
for input_integer in input.inputs {
match input_integer {
IntegerInput::I8(val) => buffer.format(val),
IntegerInput::U8(val) => buffer.format(val),
IntegerInput::I16(val) => buffer.format(val),
IntegerInput::U16(val) => buffer.format(val),
IntegerInput::I32(val) => buffer.format(val),
IntegerInput::U32(val) => buffer.format(val),
IntegerInput::I64(val) => buffer.format(val),
IntegerInput::U64(val) => buffer.format(val),
IntegerInput::ISIZE(val) => buffer.format(val),
IntegerInput::USIZE(val) => buffer.format(val),
IntegerInput::I128(val) => buffer.format(val),
IntegerInput::U128(val) => buffer.format(val),
};
}
});