Add fuzzing tests

This commit is contained in:
link2xt
2022-12-27 09:17:19 +00:00
parent 1e351bd05f
commit 4a982fe632
11 changed files with 3573 additions and 0 deletions

3441
fuzz/Cargo.lock generated Normal file

File diff suppressed because it is too large Load Diff

36
fuzz/Cargo.toml Normal file
View File

@@ -0,0 +1,36 @@
[package]
name = "deltachat-fuzz"
version = "0.0.0"
publish = false
edition = "2021"
[dev-dependencies]
bolero = "0.8"
[dependencies]
mailparse = "0.13"
deltachat = { path = ".." }
format-flowed = { path = "../format-flowed" }
[workspace]
members = ["."]
[[test]]
name = "fuzz_dateparse"
path = "fuzz_targets/fuzz_dateparse.rs"
harness = false
[[test]]
name = "fuzz_simplify"
path = "fuzz_targets/fuzz_simplify.rs"
harness = false
[[test]]
name = "fuzz_mailparse"
path = "fuzz_targets/fuzz_mailparse.rs"
harness = false
[[test]]
name = "fuzz_format_flowed"
path = "fuzz_targets/fuzz_format_flowed.rs"
harness = false

View File

@@ -0,0 +1,10 @@
use bolero::check;
fn main() {
check!().for_each(|data: &[u8]| match std::str::from_utf8(data) {
Ok(input) => {
mailparse::dateparse(input).ok();
}
Err(_err) => {}
});
}

View File

@@ -0,0 +1,25 @@
use bolero::check;
use format_flowed::{format_flowed, unformat_flowed};
fn round_trip(input: &str) -> String {
let mut input = format_flowed(input);
input.retain(|c| c != '\r');
unformat_flowed(&input, false)
}
fn main() {
check!().for_each(|data: &[u8]| {
if let Ok(input) = std::str::from_utf8(data.into()) {
let mut input = input.to_string();
// Only consider inputs that don't contain quotes.
input.retain(|c| c != '>');
// Only consider inputs that are the result of unformatting format=flowed text.
// At least this means that lines don't contain any trailing whitespace.
let input = round_trip(&input);
let output = round_trip(&input);
assert_eq!(input, output);
}
});
}

View File

@@ -0,0 +1,7 @@
use bolero::check;
fn main() {
check!().for_each(|data: &[u8]| {
mailparse::parse_mail(data).ok();
});
}

View File

@@ -0,0 +1,13 @@
use bolero::check;
use deltachat::fuzzing::simplify;
fn main() {
check!().for_each(|data: &[u8]| match String::from_utf8(data.to_vec()) {
Ok(input) => {
simplify(input.clone(), true);
simplify(input, false);
}
Err(_err) => {}
});
}