From f30de96d85d7cc107e8a21936e5a526345f91b96 Mon Sep 17 00:00:00 2001 From: Ed Page Date: Mon, 15 Jul 2024 15:50:37 -0500 Subject: [PATCH 1/2] refactor(fuzz): Simplify code --- crates/toml_edit_fuzz/parse_document.rs | 44 +++++++++++++------------ 1 file changed, 23 insertions(+), 21 deletions(-) diff --git a/crates/toml_edit_fuzz/parse_document.rs b/crates/toml_edit_fuzz/parse_document.rs index 9bc0fed5..e731bb9f 100644 --- a/crates/toml_edit_fuzz/parse_document.rs +++ b/crates/toml_edit_fuzz/parse_document.rs @@ -3,25 +3,27 @@ use toml_edit::DocumentMut; libfuzzer_sys::fuzz_target!(|data| { - if let Ok(data) = std::str::from_utf8(data) { - println!("parsing: {data:?}"); - let doc = match data.parse::() { - Ok(doc) => doc, - Err(err) => { - println!("{err}"); - return; - } - }; - let toml = doc.to_string(); - println!("parsing: {toml:?}"); - let doc = toml.parse::(); - assert!( - doc.is_ok(), - "Failed to parse `doc.to_string()`: {}\n```\n{}\n```", - doc.unwrap_err(), - toml - ); - let doc = doc.unwrap(); - assert_eq!(doc.to_string(), toml); - } + let Ok(data) = std::str::from_utf8(data) else { + return; + }; + + println!("parsing: {data:?}"); + let doc = match data.parse::() { + Ok(doc) => doc, + Err(err) => { + println!("{err}"); + return; + } + }; + let toml = doc.to_string(); + println!("parsing: {toml:?}"); + let doc = toml.parse::(); + assert!( + doc.is_ok(), + "Failed to parse `doc.to_string()`: {}\n```\n{}\n```", + doc.unwrap_err(), + toml + ); + let doc = doc.unwrap(); + assert_eq!(doc.to_string(), toml); }); From c0a772cbdd9ff9ffebc655d1c37f18c76eea6901 Mon Sep 17 00:00:00 2001 From: Ed Page Date: Mon, 15 Jul 2024 15:53:12 -0500 Subject: [PATCH 2/2] refactor(fuzz): Reject invalid UTF-8 data --- crates/toml_edit_fuzz/parse_document.rs | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/crates/toml_edit_fuzz/parse_document.rs b/crates/toml_edit_fuzz/parse_document.rs index e731bb9f..a503df41 100644 --- a/crates/toml_edit_fuzz/parse_document.rs +++ b/crates/toml_edit_fuzz/parse_document.rs @@ -2,9 +2,9 @@ use toml_edit::DocumentMut; -libfuzzer_sys::fuzz_target!(|data| { +libfuzzer_sys::fuzz_target!(|data: &[u8]| -> libfuzzer_sys::Corpus { let Ok(data) = std::str::from_utf8(data) else { - return; + return libfuzzer_sys::Corpus::Reject; }; println!("parsing: {data:?}"); @@ -12,7 +12,7 @@ libfuzzer_sys::fuzz_target!(|data| { Ok(doc) => doc, Err(err) => { println!("{err}"); - return; + return libfuzzer_sys::Corpus::Keep; } }; let toml = doc.to_string(); @@ -26,4 +26,5 @@ libfuzzer_sys::fuzz_target!(|data| { ); let doc = doc.unwrap(); assert_eq!(doc.to_string(), toml); + libfuzzer_sys::Corpus::Keep });