diff --git a/fuzz/Cargo.toml b/fuzz/Cargo.toml index 311afd911..f4b585562 100644 --- a/fuzz/Cargo.toml +++ b/fuzz/Cargo.toml @@ -43,4 +43,8 @@ path = "fuzz_targets/roundtrip_semantic.rs" [[bin]] name = "compile_descriptor" -path = "fuzz_targets/compile_descriptor.rs" \ No newline at end of file +path = "fuzz_targets/compile_descriptor.rs" + +[[bin]] +name = "parse_descriptor" +path = "fuzz_targets/parse_descriptor.rs" diff --git a/fuzz/fuzz_targets/parse_descriptor.rs b/fuzz/fuzz_targets/parse_descriptor.rs new file mode 100644 index 000000000..38d60797f --- /dev/null +++ b/fuzz/fuzz_targets/parse_descriptor.rs @@ -0,0 +1,33 @@ +extern crate miniscript; + +use miniscript::descriptor::DescriptorPublicKey; +use std::str::FromStr; + +fn do_test(data: &[u8]) { + let data_str = String::from_utf8_lossy(data); + if let Ok(dpk) = DescriptorPublicKey::from_str(&data_str) { + let output = dpk.to_string(); + assert_eq!(data_str.to_lowercase(), output.to_lowercase()); + } +} + +#[cfg(feature = "afl")] +extern crate afl; +#[cfg(feature = "afl")] +fn main() { + afl::read_stdio_bytes(|data| { + do_test(&data); + }); +} + +#[cfg(feature = "honggfuzz")] +#[macro_use] +extern crate honggfuzz; +#[cfg(feature = "honggfuzz")] +fn main() { + loop { + fuzz!(|data| { + do_test(data); + }); + } +}