From 5f0c1d0f8d3e623e368da8fea42da9e5f69b85a0 Mon Sep 17 00:00:00 2001 From: Adrian Taylor Date: Fri, 4 Mar 2022 13:19:14 -0800 Subject: [PATCH] Add a fuzzer. --- fuzz/Cargo.toml | 24 +++++++++++++++++++ fuzz/fuzz_targets/fuzz_itoa.rs | 44 ++++++++++++++++++++++++++++++++++ 2 files changed, 68 insertions(+) create mode 100644 fuzz/Cargo.toml create mode 100644 fuzz/fuzz_targets/fuzz_itoa.rs diff --git a/fuzz/Cargo.toml b/fuzz/Cargo.toml new file mode 100644 index 0000000..e815cd2 --- /dev/null +++ b/fuzz/Cargo.toml @@ -0,0 +1,24 @@ +[package] +name = "itoa-fuzz" +version = "0.0.0" +publish = false +edition = "2018" + +[package.metadata] +cargo-fuzz = true + +[dependencies] +libfuzzer-sys = { version="0.4", features=["arbitrary-derive"] } + +[dependencies.itoa] +path = ".." + +# Prevent this from interfering with workspaces +[workspace] +members = ["."] + +[[bin]] +name = "fuzz_itoa" +path = "fuzz_targets/fuzz_itoa.rs" +test = false +doc = false diff --git a/fuzz/fuzz_targets/fuzz_itoa.rs b/fuzz/fuzz_targets/fuzz_itoa.rs new file mode 100644 index 0000000..e080126 --- /dev/null +++ b/fuzz/fuzz_targets/fuzz_itoa.rs @@ -0,0 +1,44 @@ +#![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, +} + +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), + }; + } +});