diff --git a/fuzz/Cargo.toml b/fuzz/Cargo.toml index e6fd43eb..25c60712 100644 --- a/fuzz/Cargo.toml +++ b/fuzz/Cargo.toml @@ -27,4 +27,8 @@ path = "fuzz_targets/iterate.rs" [[bin]] name = "raw_deserialize" -path = "fuzz_targets/raw_deserialize.rs" \ No newline at end of file +path = "fuzz_targets/raw_deserialize.rs" + +[[bin]] +name = "raw_deserialize_utf8_lossy" +path = "fuzz_targets/raw_deserialize_utf8_lossy.rs" diff --git a/fuzz/fuzz_targets/deserialize.rs b/fuzz/fuzz_targets/deserialize.rs index c41599d9..4995394d 100644 --- a/fuzz/fuzz_targets/deserialize.rs +++ b/fuzz/fuzz_targets/deserialize.rs @@ -1,10 +1,14 @@ #![no_main] -#[macro_use] extern crate libfuzzer_sys; +#[macro_use] +extern crate libfuzzer_sys; extern crate bson; use bson::Document; use std::io::Cursor; fuzz_target!(|buf: &[u8]| { - let _ = Document::from_reader(&mut Cursor::new(&buf[..])); + if let Ok(doc) = Document::from_reader(&mut Cursor::new(&buf[..])) { + let mut vec = Vec::with_capacity(buf.len()); + let _ = doc.to_writer(&mut vec); + } }); diff --git a/fuzz/fuzz_targets/iterate.rs b/fuzz/fuzz_targets/iterate.rs index de7095e5..7dece7ca 100644 --- a/fuzz/fuzz_targets/iterate.rs +++ b/fuzz/fuzz_targets/iterate.rs @@ -1,5 +1,6 @@ #![no_main] -#[macro_use] extern crate libfuzzer_sys; +#[macro_use] +extern crate libfuzzer_sys; extern crate bson; use bson::RawDocument; diff --git a/fuzz/fuzz_targets/raw_deserialize.rs b/fuzz/fuzz_targets/raw_deserialize.rs index e0a9012a..4fb91b09 100644 --- a/fuzz/fuzz_targets/raw_deserialize.rs +++ b/fuzz/fuzz_targets/raw_deserialize.rs @@ -1,8 +1,12 @@ #![no_main] -#[macro_use] extern crate libfuzzer_sys; +#[macro_use] +extern crate libfuzzer_sys; extern crate bson; use bson::Document; fuzz_target!(|buf: &[u8]| { - let _ = bson::from_slice::(buf); + if let Ok(doc) = bson::from_slice::(buf) { + let mut vec = Vec::with_capacity(buf.len()); + let _ = doc.to_writer(&mut vec); + } }); diff --git a/fuzz/fuzz_targets/raw_deserialize_utf8_lossy.rs b/fuzz/fuzz_targets/raw_deserialize_utf8_lossy.rs new file mode 100644 index 00000000..fb5343b4 --- /dev/null +++ b/fuzz/fuzz_targets/raw_deserialize_utf8_lossy.rs @@ -0,0 +1,11 @@ +#![no_main] +#[macro_use] extern crate libfuzzer_sys; +extern crate bson; +use bson::Document; + +fuzz_target!(|buf: &[u8]| { + if let Ok(doc) = bson::from_slice_utf8_lossy::(buf) { + let mut vec = Vec::with_capacity(buf.len()); + let _ = doc.to_writer(&mut vec); + } +});