Skip to content

Commit f0a5474

Browse files
committed
Relax fuzz dir name constraint for run command
1 parent 089dfae commit f0a5474

13 files changed

+183
-55
lines changed

src/options.rs

+18-1
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,8 @@ pub use self::{
1313
run::Run, tmin::Tmin,
1414
};
1515

16-
use std::fmt as stdfmt;
1716
use std::str::FromStr;
17+
use std::{fmt as stdfmt, path::PathBuf};
1818
use structopt::StructOpt;
1919

2020
#[derive(Debug, Clone, Copy, PartialEq)]
@@ -186,6 +186,23 @@ impl stdfmt::Display for BuildOptions {
186186
}
187187
}
188188

189+
#[derive(Clone, Debug, StructOpt, PartialEq)]
190+
pub struct FuzzDirWrapper {
191+
/// The path to the fuzz project directory.
192+
#[structopt(long = "fuzz-dir")]
193+
pub fuzz_dir: Option<PathBuf>,
194+
}
195+
196+
impl stdfmt::Display for FuzzDirWrapper {
197+
fn fmt(&self, f: &mut stdfmt::Formatter) -> stdfmt::Result {
198+
if let Some(ref elem) = self.fuzz_dir {
199+
write!(f, " --fuzz-dir={}", elem.display())?;
200+
}
201+
202+
Ok(())
203+
}
204+
}
205+
189206
#[cfg(test)]
190207
mod test {
191208
use super::*;

src/options/add.rs

+5-2
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,19 @@
1-
use crate::{project::FuzzProject, RunCommand};
1+
use crate::{options::FuzzDirWrapper, project::FuzzProject, RunCommand};
22
use anyhow::Result;
33
use structopt::StructOpt;
44

55
#[derive(Clone, Debug, StructOpt)]
66
pub struct Add {
7+
#[structopt(flatten)]
8+
pub fuzz_dir_wrapper: FuzzDirWrapper,
9+
710
/// Name of the new fuzz target
811
pub target: String,
912
}
1013

1114
impl RunCommand for Add {
1215
fn run_command(&mut self) -> Result<()> {
13-
let project = FuzzProject::find_existing()?;
16+
let project = FuzzProject::new(self.fuzz_dir_wrapper.fuzz_dir.to_owned())?;
1417
project.add_target(self)
1518
}
1619
}

src/options/build.rs

+9-2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,8 @@
1-
use crate::{options::BuildOptions, project::FuzzProject, RunCommand};
1+
use crate::{
2+
options::{BuildOptions, FuzzDirWrapper},
3+
project::FuzzProject,
4+
RunCommand,
5+
};
26
use anyhow::Result;
37
use structopt::StructOpt;
48

@@ -7,13 +11,16 @@ pub struct Build {
711
#[structopt(flatten)]
812
pub build: BuildOptions,
913

14+
#[structopt(flatten)]
15+
pub fuzz_dir_wrapper: FuzzDirWrapper,
16+
1017
/// Name of the fuzz target to build, or build all targets if not supplied
1118
pub target: Option<String>,
1219
}
1320

1421
impl RunCommand for Build {
1522
fn run_command(&mut self) -> Result<()> {
16-
let project = FuzzProject::find_existing()?;
23+
let project = FuzzProject::new(self.fuzz_dir_wrapper.fuzz_dir.to_owned())?;
1724
project.exec_build(&self.build, self.target.as_deref().map(|s| s))
1825
}
1926
}

src/options/cmin.rs

+9-2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,8 @@
1-
use crate::{options::BuildOptions, project::FuzzProject, RunCommand};
1+
use crate::{
2+
options::{BuildOptions, FuzzDirWrapper},
3+
project::FuzzProject,
4+
RunCommand,
5+
};
26
use anyhow::Result;
37
use std::path::PathBuf;
48
use structopt::StructOpt;
@@ -8,6 +12,9 @@ pub struct Cmin {
812
#[structopt(flatten)]
913
pub build: BuildOptions,
1014

15+
#[structopt(flatten)]
16+
pub fuzz_dir_wrapper: FuzzDirWrapper,
17+
1118
/// Name of the fuzz target
1219
pub target: String,
1320

@@ -22,7 +29,7 @@ pub struct Cmin {
2229

2330
impl RunCommand for Cmin {
2431
fn run_command(&mut self) -> Result<()> {
25-
let project = FuzzProject::find_existing()?;
32+
let project = FuzzProject::new(self.fuzz_dir_wrapper.fuzz_dir.to_owned())?;
2633
project.exec_cmin(self)
2734
}
2835
}

src/options/coverage.rs

+9-2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,8 @@
1-
use crate::{options::BuildOptions, project::FuzzProject, RunCommand};
1+
use crate::{
2+
options::{BuildOptions, FuzzDirWrapper},
3+
project::FuzzProject,
4+
RunCommand,
5+
};
26
use anyhow::Result;
37
use structopt::StructOpt;
48

@@ -7,6 +11,9 @@ pub struct Coverage {
711
#[structopt(flatten)]
812
pub build: BuildOptions,
913

14+
#[structopt(flatten)]
15+
pub fuzz_dir_wrapper: FuzzDirWrapper,
16+
1017
/// Name of the fuzz target
1118
pub target: String,
1219

@@ -20,7 +27,7 @@ pub struct Coverage {
2027

2128
impl RunCommand for Coverage {
2229
fn run_command(&mut self) -> Result<()> {
23-
let project = FuzzProject::find_existing()?;
30+
let project = FuzzProject::new(self.fuzz_dir_wrapper.fuzz_dir.to_owned())?;
2431
self.build.coverage = true;
2532
project.exec_coverage(self)
2633
}

src/options/fmt.rs

+9-2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,8 @@
1-
use crate::{options::BuildOptions, project::FuzzProject, RunCommand};
1+
use crate::{
2+
options::{BuildOptions, FuzzDirWrapper},
3+
project::FuzzProject,
4+
RunCommand,
5+
};
26
use anyhow::Result;
37
use structopt::StructOpt;
48

@@ -9,6 +13,9 @@ pub struct Fmt {
913
#[structopt(flatten)]
1014
pub build: BuildOptions,
1115

16+
#[structopt(flatten)]
17+
pub fuzz_dir_wrapper: FuzzDirWrapper,
18+
1219
/// Name of fuzz target
1320
pub target: String,
1421

@@ -18,7 +25,7 @@ pub struct Fmt {
1825

1926
impl RunCommand for Fmt {
2027
fn run_command(&mut self) -> Result<()> {
21-
let project = FuzzProject::find_existing()?;
28+
let project = FuzzProject::new(self.fuzz_dir_wrapper.fuzz_dir.to_owned())?;
2229
project.debug_fmt_input(self)
2330
}
2431
}

src/options/init.rs

+5-2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
use crate::{project::FuzzProject, RunCommand};
1+
use crate::{options::FuzzDirWrapper, project::FuzzProject, RunCommand};
22
use anyhow::Result;
33
use structopt::StructOpt;
44

@@ -12,11 +12,14 @@ pub struct Init {
1212
)]
1313
/// Name of the first fuzz target to create
1414
pub target: String,
15+
16+
#[structopt(flatten)]
17+
pub fuzz_dir_wrapper: FuzzDirWrapper,
1518
}
1619

1720
impl RunCommand for Init {
1821
fn run_command(&mut self) -> Result<()> {
19-
FuzzProject::init(self)?;
22+
FuzzProject::init(self, self.fuzz_dir_wrapper.fuzz_dir.to_owned())?;
2023
Ok(())
2124
}
2225
}

src/options/list.rs

+6-3
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,16 @@
1-
use crate::{project::FuzzProject, RunCommand};
1+
use crate::{options::FuzzDirWrapper, project::FuzzProject, RunCommand};
22
use anyhow::Result;
33
use structopt::StructOpt;
44

55
#[derive(Clone, Debug, StructOpt)]
6-
pub struct List {}
6+
pub struct List {
7+
#[structopt(flatten)]
8+
pub fuzz_dir_wrapper: FuzzDirWrapper,
9+
}
710

811
impl RunCommand for List {
912
fn run_command(&mut self) -> Result<()> {
10-
let project = FuzzProject::find_existing()?;
13+
let project = FuzzProject::new(self.fuzz_dir_wrapper.fuzz_dir.to_owned())?;
1114
project.list_targets()
1215
}
1316
}

src/options/run.rs

+9-2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,8 @@
1-
use crate::{options::BuildOptions, project::FuzzProject, RunCommand};
1+
use crate::{
2+
options::{BuildOptions, FuzzDirWrapper},
3+
project::FuzzProject,
4+
RunCommand,
5+
};
26
use anyhow::Result;
37
use structopt::StructOpt;
48

@@ -13,6 +17,9 @@ pub struct Run {
1317
/// Custom corpus directories or artifact files.
1418
pub corpus: Vec<String>,
1519

20+
#[structopt(flatten)]
21+
pub fuzz_dir_wrapper: FuzzDirWrapper,
22+
1623
#[structopt(
1724
short = "j",
1825
long = "jobs",
@@ -33,7 +40,7 @@ pub struct Run {
3340

3441
impl RunCommand for Run {
3542
fn run_command(&mut self) -> Result<()> {
36-
let project = FuzzProject::find_existing()?;
43+
let project = FuzzProject::new(self.fuzz_dir_wrapper.fuzz_dir.to_owned())?;
3744
project.exec_fuzz(self)
3845
}
3946
}

src/options/tmin.rs

+9-2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,8 @@
1-
use crate::{options::BuildOptions, project::FuzzProject, RunCommand};
1+
use crate::{
2+
options::{BuildOptions, FuzzDirWrapper},
3+
project::FuzzProject,
4+
RunCommand,
5+
};
26
use anyhow::Result;
37
use std::path::PathBuf;
48
use structopt::StructOpt;
@@ -8,6 +12,9 @@ pub struct Tmin {
812
#[structopt(flatten)]
913
pub build: BuildOptions,
1014

15+
#[structopt(flatten)]
16+
pub fuzz_dir_wrapper: FuzzDirWrapper,
17+
1118
/// Name of the fuzz target
1219
pub target: String,
1320

@@ -35,7 +42,7 @@ pub struct Tmin {
3542

3643
impl RunCommand for Tmin {
3744
fn run_command(&mut self) -> Result<()> {
38-
let project = FuzzProject::find_existing()?;
45+
let project = FuzzProject::new(self.fuzz_dir_wrapper.fuzz_dir.to_owned())?;
3946
project.exec_tmin(self)
4047
}
4148
}

0 commit comments

Comments
 (0)