From 295eea45c04196b831cffb965b6aaffb04b9f1d4 Mon Sep 17 00:00:00 2001 From: pocopepe Date: Tue, 21 Apr 2026 13:22:49 +0530 Subject: [PATCH 1/2] fix: fuzz targets missing target dir and silent CI failures --- .github/workflows/fuzzing.yml | 2 +- fuzz/fuzz_targets/fuzz_cmp.rs | 4 ++-- fuzz/fuzz_targets/fuzz_ed.rs | 1 + fuzz/fuzz_targets/fuzz_normal.rs | 1 + fuzz/fuzz_targets/fuzz_patch.rs | 1 + fuzz/fuzz_targets/fuzz_side.rs | 3 ++- 6 files changed, 8 insertions(+), 4 deletions(-) diff --git a/.github/workflows/fuzzing.yml b/.github/workflows/fuzzing.yml index c7e0599..9e09913 100644 --- a/.github/workflows/fuzzing.yml +++ b/.github/workflows/fuzzing.yml @@ -68,7 +68,7 @@ jobs: fuzz/corpus/${{ matrix.test-target.name }} - name: Run ${{ matrix.test-target.name }} for XX seconds shell: bash - continue-on-error: ${{ !matrix.test-target.name.should_pass }} + continue-on-error: ${{ !matrix.test-target.should_pass }} run: | cargo fuzz run ${{ matrix.test-target.name }} -- -max_total_time=${{ env.RUN_FOR }} -detect_leaks=0 - name: Save Corpus Cache diff --git a/fuzz/fuzz_targets/fuzz_cmp.rs b/fuzz/fuzz_targets/fuzz_cmp.rs index e9d0e4c..8b500fa 100644 --- a/fuzz/fuzz_targets/fuzz_cmp.rs +++ b/fuzz/fuzz_targets/fuzz_cmp.rs @@ -4,7 +4,7 @@ extern crate libfuzzer_sys; use diffutilslib::cmp::{self, Cmp}; use std::ffi::OsString; -use std::fs::File; +use std::fs::{self, File}; use std::io::Write; fn os(s: &str) -> OsString { @@ -18,7 +18,7 @@ fuzz_target!(|x: (Vec, Vec)| { .peekable(); let (from, to) = x; - + fs::create_dir_all("target").unwrap(); File::create("target/fuzz.cmp.a") .unwrap() .write_all(&from) diff --git a/fuzz/fuzz_targets/fuzz_ed.rs b/fuzz/fuzz_targets/fuzz_ed.rs index 7c38fda..fefb9c1 100644 --- a/fuzz/fuzz_targets/fuzz_ed.rs +++ b/fuzz/fuzz_targets/fuzz_ed.rs @@ -38,6 +38,7 @@ fuzz_target!(|x: (Vec, Vec)| { } else { return; } + fs::create_dir_all("target").unwrap(); let diff = diff_w(&from, &to, "target/fuzz.file").unwrap(); File::create("target/fuzz.file.original") .unwrap() diff --git a/fuzz/fuzz_targets/fuzz_normal.rs b/fuzz/fuzz_targets/fuzz_normal.rs index 6b1e6b9..132cd25 100644 --- a/fuzz/fuzz_targets/fuzz_normal.rs +++ b/fuzz/fuzz_targets/fuzz_normal.rs @@ -23,6 +23,7 @@ fuzz_target!(|x: (Vec, Vec)| { return }*/ let diff = normal_diff::diff(&from, &to, &Params::default()); + fs::create_dir_all("target").unwrap(); File::create("target/fuzz.file.original") .unwrap() .write_all(&from) diff --git a/fuzz/fuzz_targets/fuzz_patch.rs b/fuzz/fuzz_targets/fuzz_patch.rs index 4dea4b5..cac6a53 100644 --- a/fuzz/fuzz_targets/fuzz_patch.rs +++ b/fuzz/fuzz_targets/fuzz_patch.rs @@ -21,6 +21,7 @@ fuzz_target!(|x: (Vec, Vec, u8)| { } else { return }*/ + fs::create_dir_all("target").unwrap(); let diff = unified_diff::diff( &from, &to, diff --git a/fuzz/fuzz_targets/fuzz_side.rs b/fuzz/fuzz_targets/fuzz_side.rs index 8a69c07..8084494 100644 --- a/fuzz/fuzz_targets/fuzz_side.rs +++ b/fuzz/fuzz_targets/fuzz_side.rs @@ -4,7 +4,7 @@ extern crate libfuzzer_sys; use diffutilslib::side_diff; -use std::fs::File; +use std::fs::{self, File}; use std::io::Write; use diffutilslib::params::Params; @@ -21,6 +21,7 @@ fuzz_target!(|x: (Vec, Vec, /* usize, usize */ bool)| { expand_tabs: expand, ..Default::default() }; + fs::create_dir_all("target").unwrap(); let mut output_buf = vec![]; side_diff::diff(&original, &new, &mut output_buf, ¶ms); File::create("target/fuzz.file.original") From b1d91ba997f2ce9c9cc871f98d4f119703484dea Mon Sep 17 00:00:00 2001 From: pocopepe Date: Tue, 21 Apr 2026 13:39:11 +0530 Subject: [PATCH 2/2] skip --help args in fuzz_cmp_args since it causes process exit --- fuzz/fuzz_targets/fuzz_cmp_args.rs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/fuzz/fuzz_targets/fuzz_cmp_args.rs b/fuzz/fuzz_targets/fuzz_cmp_args.rs index 579cf34..667319f 100644 --- a/fuzz/fuzz_targets/fuzz_cmp_args.rs +++ b/fuzz/fuzz_targets/fuzz_cmp_args.rs @@ -11,6 +11,9 @@ fn os(s: &str) -> OsString { } fuzz_target!(|x: Vec| -> Corpus { + if x.iter().any(|a| a == "--help") { + return Corpus::Reject; + } if x.len() > 6 { // Make sure we try to parse an option when we get longer args. x[0] will be // the executable name.