itoa/fuzz/fuzz_targets/fuzz_itoa.rs

52 lines
1.3 KiB
Rust
Raw Normal View History

2022-03-04 16:19:14 -05:00
#![no_main]
2022-05-15 16:42:01 -04:00
use arbitrary::Arbitrary;
2022-03-04 16:19:14 -05:00
use libfuzzer_sys::fuzz_target;
2022-05-15 16:46:15 -04:00
use std::mem;
2022-03-04 16:19:14 -05:00
#[derive(Arbitrary, Debug)]
2022-03-04 16:19:14 -05:00
enum IntegerInput {
I8(i8),
U8(u8),
I16(i16),
U16(u16),
I32(i32),
U32(u32),
I64(i64),
U64(u64),
I128(i128),
U128(u128),
2022-05-15 16:44:42 -04:00
Isize(isize),
Usize(usize),
2022-03-04 16:19:14 -05:00
}
macro_rules! test_itoa {
($val:expr) => {
match $val {
val => {
let mut buffer = itoa::Buffer::new();
let string = buffer.format(val);
assert!(string.len() <= mem::size_of::<itoa::Buffer>());
assert_eq!(val, string.parse().unwrap());
}
}
2022-05-15 16:43:10 -04:00
};
}
fuzz_target!(|input: IntegerInput| {
match input {
IntegerInput::I8(val) => test_itoa!(val),
IntegerInput::U8(val) => test_itoa!(val),
IntegerInput::I16(val) => test_itoa!(val),
IntegerInput::U16(val) => test_itoa!(val),
IntegerInput::I32(val) => test_itoa!(val),
IntegerInput::U32(val) => test_itoa!(val),
IntegerInput::I64(val) => test_itoa!(val),
IntegerInput::U64(val) => test_itoa!(val),
IntegerInput::I128(val) => test_itoa!(val),
IntegerInput::U128(val) => test_itoa!(val),
IntegerInput::Isize(val) => test_itoa!(val),
IntegerInput::Usize(val) => test_itoa!(val),
}
2022-03-04 16:19:14 -05:00
});