Skip to content

Commit 075bff3

Browse files
committed
aflplusplus-persistent is not supported on macOS
1 parent 30dace2 commit 075bff3

File tree

4 files changed

+22
-10
lines changed

4 files changed

+22
-10
lines changed

cargo-test-fuzz/src/fuzzer/mod.rs

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,23 @@
11
use super::{Executable, TestFuzz};
2-
use anyhow::Result;
2+
use anyhow::{ensure, Result};
33
use internal::Fuzzer;
44
use semver::Version;
55
use std::{path::Path, process::Command};
66

77
mod impls;
88

9-
pub(super) fn instantiate(fuzzer: Fuzzer) -> &'static dyn Interface {
9+
pub(super) fn instantiate(fuzzer: Fuzzer) -> Result<&'static dyn Interface> {
1010
match fuzzer {
11-
Fuzzer::Aflplusplus => impls::aflplusplus::instantiate(false),
12-
Fuzzer::AflplusplusPersistent => impls::aflplusplus::instantiate(true),
13-
Fuzzer::Libfuzzer => impls::libfuzzer::instantiate(),
11+
Fuzzer::Aflplusplus => Ok(impls::aflplusplus::instantiate(false)),
12+
Fuzzer::AflplusplusPersistent => {
13+
// smoelius: https://github.com/AFLplusplus/AFLplusplus/blob/7b40d7b9420b2e3adb7d9afa88610199718dedba/include/forkserver.h#L114-L118
14+
ensure!(
15+
cfg!(not(target_os = "macos")),
16+
"`aflplusplus-persistent` is not supported on macOS"
17+
);
18+
Ok(impls::aflplusplus::instantiate(true))
19+
}
20+
Fuzzer::Libfuzzer => Ok(impls::libfuzzer::instantiate()),
1421
}
1522
}
1623

cargo-test-fuzz/src/lib.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -155,7 +155,7 @@ fn run(opts: TestFuzz) -> Result<()> {
155155
};
156156

157157
let fuzzer_env = fuzzer()?;
158-
let fuzzer = fuzzer::instantiate(opts.fuzzer.unwrap_or(fuzzer_env));
158+
let fuzzer = fuzzer::instantiate(opts.fuzzer.unwrap_or(fuzzer_env))?;
159159

160160
if let Some(object) = opts.replay {
161161
ensure!(

internal/src/fuzzer.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ use strum_macros::{Display, EnumIter};
99
// command line option. Hence, cargo-test-fuzz needs to know all available fuzzers. This is unlike
1010
// the Serde format, which the user selects via a Cargo feature.
1111
#[derive(
12-
Clone, Copy, Debug, Display, Deserialize, EnumIter, PartialEq, Eq, Serialize, ValueEnum,
12+
Clone, Copy, Debug, Deserialize, Display, EnumIter, PartialEq, Eq, Serialize, ValueEnum,
1313
)]
1414
#[remain::sorted]
1515
pub enum Fuzzer {

test-fuzz/tests/github.rs

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ enum SerdeFormat {
1414
Cbor4ii,
1515
}
1616

17-
#[derive(Clone, Copy, Debug, Display, EnumIter)]
17+
#[derive(Clone, Copy, Debug, Display, EnumIter, Eq, PartialEq)]
1818
enum Environment {
1919
UbuntuLatest,
2020
MacosLatest,
@@ -31,8 +31,8 @@ fn matrix() {
3131
let expecteds = std::iter::repeat(
3232
Fuzzer::iter()
3333
.cartesian_product(Environment::iter())
34-
.filter(|(fuzzer, environment)| {
35-
*fuzzer != Fuzzer::AflplusplusPersistent || *environment != Environment::MacosLatest
34+
.filter(|&(fuzzer, environment)| {
35+
fuzzer != Fuzzer::AflplusplusPersistent || environment != Environment::MacosLatest
3636
}),
3737
)
3838
.take(2)
@@ -58,6 +58,11 @@ fn matrix() {
5858
for (expected, actual) in expecteds.zip(actuals) {
5959
let ((expected_fuzzer, expected_environment), (expected_serde_format, expected_toolchain)) =
6060
expected;
61+
if expected_fuzzer == Fuzzer::AflplusplusPersistent
62+
&& expected_environment == Environment::MacosLatest
63+
{
64+
continue;
65+
}
6166
assert_eq!(
6267
expected_fuzzer.to_string().to_kebab_case(),
6368
actual["fuzzer"].as_str().unwrap()

0 commit comments

Comments
 (0)