mirror of
https://github.com/microsoft/onefuzz.git
synced 2025-06-19 13:03:44 +00:00
Remove lifetime param from LibFuzzer
(#2219)
This commit is contained in:
@ -226,8 +226,8 @@ where
|
|||||||
|
|
||||||
let fuzzer = LibFuzzer::new(
|
let fuzzer = LibFuzzer::new(
|
||||||
&self.config.target_exe,
|
&self.config.target_exe,
|
||||||
&self.config.target_options,
|
self.config.target_options.clone(),
|
||||||
&self.config.target_env,
|
self.config.target_env.clone(),
|
||||||
&self.config.common.setup_dir,
|
&self.config.common.setup_dir,
|
||||||
);
|
);
|
||||||
let mut running = fuzzer.fuzz(crash_dir.path(), local_inputs, &inputs).await?;
|
let mut running = fuzzer.fuzz(crash_dir.path(), local_inputs, &inputs).await?;
|
||||||
|
@ -18,8 +18,8 @@ impl common::LibFuzzerType for GenericLibFuzzer {
|
|||||||
fn from_config(config: &common::Config<Self>) -> LibFuzzer {
|
fn from_config(config: &common::Config<Self>) -> LibFuzzer {
|
||||||
LibFuzzer::new(
|
LibFuzzer::new(
|
||||||
&config.target_exe,
|
&config.target_exe,
|
||||||
&config.target_options,
|
config.target_options.clone(),
|
||||||
&config.target_env,
|
config.target_env.clone(),
|
||||||
&config.common.setup_dir,
|
&config.common.setup_dir,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
@ -43,8 +43,8 @@ pub struct Config {
|
|||||||
pub async fn spawn(config: Arc<Config>) -> Result<()> {
|
pub async fn spawn(config: Arc<Config>) -> Result<()> {
|
||||||
let fuzzer = LibFuzzer::new(
|
let fuzzer = LibFuzzer::new(
|
||||||
&config.target_exe,
|
&config.target_exe,
|
||||||
&config.target_options,
|
config.target_options.clone(),
|
||||||
&config.target_env,
|
config.target_env.clone(),
|
||||||
&config.common.setup_dir,
|
&config.common.setup_dir,
|
||||||
);
|
);
|
||||||
fuzzer.verify(config.check_fuzzer_help, None).await?;
|
fuzzer.verify(config.check_fuzzer_help, None).await?;
|
||||||
@ -156,8 +156,8 @@ pub async fn merge_inputs(
|
|||||||
info!("Merging corpus");
|
info!("Merging corpus");
|
||||||
let merger = LibFuzzer::new(
|
let merger = LibFuzzer::new(
|
||||||
&config.target_exe,
|
&config.target_exe,
|
||||||
&config.target_options,
|
config.target_options.clone(),
|
||||||
&config.target_env,
|
config.target_env.clone(),
|
||||||
&config.common.setup_dir,
|
&config.common.setup_dir,
|
||||||
);
|
);
|
||||||
merger
|
merger
|
||||||
|
@ -67,8 +67,8 @@ impl ReportTask {
|
|||||||
pub async fn verify(&self) -> Result<()> {
|
pub async fn verify(&self) -> Result<()> {
|
||||||
let fuzzer = LibFuzzer::new(
|
let fuzzer = LibFuzzer::new(
|
||||||
&self.config.target_exe,
|
&self.config.target_exe,
|
||||||
&self.config.target_options,
|
self.config.target_options.clone(),
|
||||||
&self.config.target_env,
|
self.config.target_env.clone(),
|
||||||
&self.config.common.setup_dir,
|
&self.config.common.setup_dir,
|
||||||
);
|
);
|
||||||
fuzzer.verify(self.config.check_fuzzer_help, None).await
|
fuzzer.verify(self.config.check_fuzzer_help, None).await
|
||||||
@ -121,8 +121,8 @@ pub struct TestInputArgs<'a> {
|
|||||||
pub async fn test_input(args: TestInputArgs<'_>) -> Result<CrashTestResult> {
|
pub async fn test_input(args: TestInputArgs<'_>) -> Result<CrashTestResult> {
|
||||||
let fuzzer = LibFuzzer::new(
|
let fuzzer = LibFuzzer::new(
|
||||||
args.target_exe,
|
args.target_exe,
|
||||||
args.target_options,
|
args.target_options.to_vec(),
|
||||||
args.target_env,
|
args.target_env.clone(),
|
||||||
args.setup_dir,
|
args.setup_dir,
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -34,18 +34,18 @@ pub struct LibFuzzerMergeOutput {
|
|||||||
pub added_feature_count: i32,
|
pub added_feature_count: i32,
|
||||||
}
|
}
|
||||||
|
|
||||||
pub struct LibFuzzer<'a> {
|
pub struct LibFuzzer {
|
||||||
setup_dir: PathBuf,
|
setup_dir: PathBuf,
|
||||||
exe: PathBuf,
|
exe: PathBuf,
|
||||||
options: &'a [String],
|
options: Vec<String>,
|
||||||
env: &'a HashMap<String, String>,
|
env: HashMap<String, String>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'a> LibFuzzer<'a> {
|
impl LibFuzzer {
|
||||||
pub fn new(
|
pub fn new(
|
||||||
exe: impl Into<PathBuf>,
|
exe: impl Into<PathBuf>,
|
||||||
options: &'a [String],
|
options: Vec<String>,
|
||||||
env: &'a HashMap<String, String>,
|
env: HashMap<String, String>,
|
||||||
setup_dir: impl Into<PathBuf>,
|
setup_dir: impl Into<PathBuf>,
|
||||||
) -> Self {
|
) -> Self {
|
||||||
Self {
|
Self {
|
||||||
@ -102,19 +102,19 @@ impl<'a> LibFuzzer<'a> {
|
|||||||
.machine_id()
|
.machine_id()
|
||||||
.await?
|
.await?
|
||||||
.target_exe(&self.exe)
|
.target_exe(&self.exe)
|
||||||
.target_options(self.options)
|
.target_options(&self.options)
|
||||||
.setup_dir(&self.setup_dir)
|
.setup_dir(&self.setup_dir)
|
||||||
.set_optional(corpus_dir, |tester, corpus_dir| {
|
.set_optional(corpus_dir, |tester, corpus_dir| {
|
||||||
tester.input_corpus(&corpus_dir)
|
tester.input_corpus(&corpus_dir)
|
||||||
})
|
})
|
||||||
.set_optional(fault_dir, |tester, fault_dir| tester.crashes(&fault_dir));
|
.set_optional(fault_dir, |tester, fault_dir| tester.crashes(&fault_dir));
|
||||||
|
|
||||||
for (k, v) in self.env {
|
for (k, v) in &self.env {
|
||||||
cmd.env(k, expand.evaluate_value(v)?);
|
cmd.env(k, expand.evaluate_value(v)?);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Pass custom option arguments.
|
// Pass custom option arguments.
|
||||||
for o in expand.evaluate(self.options)? {
|
for o in expand.evaluate(&self.options)? {
|
||||||
cmd.arg(o);
|
cmd.arg(o);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -307,10 +307,10 @@ impl<'a> LibFuzzer<'a> {
|
|||||||
timeout: Option<u64>,
|
timeout: Option<u64>,
|
||||||
retry: u64,
|
retry: u64,
|
||||||
) -> Result<TestResult> {
|
) -> Result<TestResult> {
|
||||||
let mut options = self.options.to_owned();
|
let mut options = self.options.clone();
|
||||||
options.push("{input}".to_string());
|
options.push("{input}".to_string());
|
||||||
|
|
||||||
let mut tester = Tester::new(&self.setup_dir, &self.exe, &options, self.env)
|
let mut tester = Tester::new(&self.setup_dir, &self.exe, &options, &self.env)
|
||||||
.check_asan_stderr(true)
|
.check_asan_stderr(true)
|
||||||
.check_retry_count(retry)
|
.check_retry_count(retry)
|
||||||
.add_setup_to_path(true)
|
.add_setup_to_path(true)
|
||||||
@ -430,7 +430,12 @@ mod tests {
|
|||||||
let input_file = temp_setup_dir.path().join("input.txt");
|
let input_file = temp_setup_dir.path().join("input.txt");
|
||||||
write_file(&input_file, "input").await?;
|
write_file(&input_file, "input").await?;
|
||||||
|
|
||||||
let fuzzer = LibFuzzer::new(bad_bin, &options, &env, &temp_setup_dir.path());
|
let fuzzer = LibFuzzer::new(
|
||||||
|
bad_bin,
|
||||||
|
options.clone(),
|
||||||
|
env.clone(),
|
||||||
|
&temp_setup_dir.path(),
|
||||||
|
);
|
||||||
|
|
||||||
// verify catching bad exits with -help=1
|
// verify catching bad exits with -help=1
|
||||||
assert!(
|
assert!(
|
||||||
@ -453,7 +458,12 @@ mod tests {
|
|||||||
"checking false without inputs"
|
"checking false without inputs"
|
||||||
);
|
);
|
||||||
|
|
||||||
let fuzzer = LibFuzzer::new(good_bin, &options, &env, &temp_setup_dir.path());
|
let fuzzer = LibFuzzer::new(
|
||||||
|
good_bin,
|
||||||
|
options.clone(),
|
||||||
|
env.clone(),
|
||||||
|
&temp_setup_dir.path(),
|
||||||
|
);
|
||||||
// verify good exits with -help=1
|
// verify good exits with -help=1
|
||||||
assert!(
|
assert!(
|
||||||
fuzzer.verify(true, None).await.is_ok(),
|
fuzzer.verify(true, None).await.is_ok(),
|
||||||
|
Reference in New Issue
Block a user