mirror of
https://github.com/uutils/diffutils.git
synced 2026-06-10 15:48:59 -07:00
52 lines
1.3 KiB
Rust
52 lines
1.3 KiB
Rust
#![no_main]
|
|
#[macro_use]
|
|
extern crate libfuzzer_sys;
|
|
use diffutilslib::cmp::{self, Cmp};
|
|
|
|
use std::ffi::OsString;
|
|
use std::fs::{self, File};
|
|
use std::io::Write;
|
|
|
|
fn os(s: &str) -> OsString {
|
|
OsString::from(s)
|
|
}
|
|
|
|
fuzz_target!(|x: (Vec<u8>, Vec<u8>)| {
|
|
let args = vec!["cmp", "-l", "-b", "target/fuzz.cmp.a", "target/fuzz.cmp.b"]
|
|
.into_iter()
|
|
.map(|s| os(s))
|
|
.peekable();
|
|
|
|
let (from, to) = x;
|
|
fs::create_dir_all("target").unwrap();
|
|
File::create("target/fuzz.cmp.a")
|
|
.unwrap()
|
|
.write_all(&from)
|
|
.unwrap();
|
|
|
|
File::create("target/fuzz.cmp.b")
|
|
.unwrap()
|
|
.write_all(&to)
|
|
.unwrap();
|
|
|
|
let params =
|
|
cmp::parse_params(args).unwrap_or_else(|e| panic!("Failed to parse params: {}", e));
|
|
let ret = cmp::cmp(¶ms);
|
|
if from == to && !matches!(ret, Ok(Cmp::Equal)) {
|
|
panic!(
|
|
"target/fuzz.cmp.a and target/fuzz.cmp.b are equal, but cmp returned {:?}.",
|
|
ret
|
|
);
|
|
} else if from != to && !matches!(ret, Ok(Cmp::Different)) {
|
|
panic!(
|
|
"target/fuzz.cmp.a and target/fuzz.cmp.b are different, but cmp returned {:?}.",
|
|
ret
|
|
);
|
|
} else if ret.is_err() {
|
|
panic!(
|
|
"target/fuzz.cmp.a and target/fuzz.cmp.b caused cmp to error ({:?}).",
|
|
ret
|
|
);
|
|
}
|
|
});
|