From 6c2b158b38b55d79aee2627fc203ac6afc72583c Mon Sep 17 00:00:00 2001 From: Addison Crump Date: Tue, 6 Jun 2023 12:04:24 +0200 Subject: [PATCH] add libafl compatibility --- fuzz/Cargo.lock | 14 ++++++++++++-- fuzz/Cargo.toml | 6 +++++- fuzz/README.md | 8 ++++++++ fuzz/fuzz_targets/ruff_fix_validity.rs | 3 +++ fuzz/fuzz_targets/ruff_parse_idempotency.rs | 3 +++ fuzz/fuzz_targets/ruff_parse_simple.rs | 3 +++ 6 files changed, 34 insertions(+), 3 deletions(-) diff --git a/fuzz/Cargo.lock b/fuzz/Cargo.lock index 8ea69673b6d799..6b6d05f1aeaa69 100644 --- a/fuzz/Cargo.lock +++ b/fuzz/Cargo.lock @@ -628,6 +628,16 @@ dependencies = [ "static_assertions", ] +[[package]] +name = "libafl_libfuzzer" +version = "0.1.0" +source = "git+https://github.com/AFLplusplus/LibAFL.git?branch=libfuzzer#016cadf3b28f7acbbcd8e6dc80515cfab58e409b" +dependencies = [ + "cc", + "libfuzzer-sys", + "rustversion", +] + [[package]] name = "libc" version = "0.2.144" @@ -661,8 +671,7 @@ dependencies = [ [[package]] name = "libfuzzer-sys" version = "0.4.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "beb09950ae85a0a94b27676cccf37da5ff13f27076aa1adbc6545dd0d0e1bd4e" +source = "git+https://github.com/rust-fuzz/libfuzzer#1221c356e993b9f82d1ccd152f1c7636468758d2" dependencies = [ "arbitrary", "cc", @@ -1092,6 +1101,7 @@ name = "ruff-fuzz" version = "0.0.0" dependencies = [ "arbitrary", + "libafl_libfuzzer", "libfuzzer-sys", "ruff", "ruff_python_ast", diff --git a/fuzz/Cargo.toml b/fuzz/Cargo.toml index a26c8a2cfce62b..099102a7e0665f 100644 --- a/fuzz/Cargo.toml +++ b/fuzz/Cargo.toml @@ -9,14 +9,18 @@ publish = false edition = "2021" [features] +default = ["libfuzzer"] full-idempotency = [] +libafl = ["libafl_libfuzzer"] +libfuzzer = ["libfuzzer-sys/link_libfuzzer"] [package.metadata] cargo-fuzz = true [dependencies] arbitrary = { version = "1.3.0", features = ["derive"] } -libfuzzer-sys = { version = "0.4.1" } +libafl_libfuzzer = { git = "https://github.com/AFLplusplus/LibAFL.git", branch = "libfuzzer", optional = true } +libfuzzer-sys = { git = "https://github.com/rust-fuzz/libfuzzer", default-features = false } ruff = { path = "../crates/ruff" } ruff_python_ast = { path = "../crates/ruff_python_ast" } ruff_python_formatter = { path = "../crates/ruff_python_formatter" } diff --git a/fuzz/README.md b/fuzz/README.md index 0446acc3820282..42907fd9f18e42 100644 --- a/fuzz/README.md +++ b/fuzz/README.md @@ -95,3 +95,11 @@ This fuzz harness checks that fixes applied by Ruff do not introduce new errors [`ruff::test::test_snippet`](../crates/ruff/src/test.rs) testing utility. It currently is only configured to use default settings, but may be extended in future versions to test non-default linter settings. + +## Experimental settings + +You can optionally use `--no-default-features --features libafl` to use the libafl fuzzer instead of +libfuzzer. +This fuzzer has experimental support, but can vastly improve fuzzer performance. +If you are not already familiar with [LibAFL](https://github.com/AFLplusplus/LibAFL), this mode is +not currently recommended. diff --git a/fuzz/fuzz_targets/ruff_fix_validity.rs b/fuzz/fuzz_targets/ruff_fix_validity.rs index 2b9764314e0887..750cda89b9487a 100644 --- a/fuzz/fuzz_targets/ruff_fix_validity.rs +++ b/fuzz/fuzz_targets/ruff_fix_validity.rs @@ -3,6 +3,9 @@ #![no_main] +#[cfg(feature = "libafl")] +extern crate libafl_libfuzzer; + use libfuzzer_sys::{fuzz_target, Corpus}; use ruff::settings::Settings; use std::sync::OnceLock; diff --git a/fuzz/fuzz_targets/ruff_parse_idempotency.rs b/fuzz/fuzz_targets/ruff_parse_idempotency.rs index ac4387e3b43eaf..c09eee16c073b6 100644 --- a/fuzz/fuzz_targets/ruff_parse_idempotency.rs +++ b/fuzz/fuzz_targets/ruff_parse_idempotency.rs @@ -3,6 +3,9 @@ #![no_main] +#[cfg(feature = "libafl")] +extern crate libafl_libfuzzer; + use libfuzzer_sys::{fuzz_target, Corpus}; use ruff_python_ast::source_code::round_trip; use similar::TextDiff; diff --git a/fuzz/fuzz_targets/ruff_parse_simple.rs b/fuzz/fuzz_targets/ruff_parse_simple.rs index e685f738575246..117ff38f12119c 100644 --- a/fuzz/fuzz_targets/ruff_parse_simple.rs +++ b/fuzz/fuzz_targets/ruff_parse_simple.rs @@ -3,6 +3,9 @@ #![no_main] +#[cfg(feature = "libafl")] +extern crate libafl_libfuzzer; + use libfuzzer_sys::{fuzz_target, Corpus}; use ruff_python_ast::source_code::round_trip;