Create an uufuzz crate for common functions and use it (#7954)

* uufuzz: create a crate with the common functions

* uufuzz: move the fuzz-common functions

* uufuzz: polish the crate

* adjust the fuzzer to use uufuzz
This commit is contained in:
Sylvestre Ledru 2025-05-21 09:26:59 +02:00 committed by GitHub
parent a9e259369b
commit eff2cd997e
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
18 changed files with 62 additions and 57 deletions

View file

@ -331,6 +331,7 @@ utmpx
uucore uucore
uucore_procs uucore_procs
uudoc uudoc
uufuzz
uumain uumain
uutil uutil
uutests uutests

17
fuzz/Cargo.lock generated
View file

@ -1347,12 +1347,8 @@ dependencies = [
name = "uucore-fuzz" name = "uucore-fuzz"
version = "0.0.0" version = "0.0.0"
dependencies = [ dependencies = [
"console",
"libc",
"libfuzzer-sys", "libfuzzer-sys",
"rand 0.9.1", "rand 0.9.1",
"similar",
"tempfile",
"uu_cksum", "uu_cksum",
"uu_cut", "uu_cut",
"uu_date", "uu_date",
@ -1367,6 +1363,7 @@ dependencies = [
"uu_tr", "uu_tr",
"uu_wc", "uu_wc",
"uucore", "uucore",
"uufuzz",
] ]
[[package]] [[package]]
@ -1378,6 +1375,18 @@ dependencies = [
"uuhelp_parser", "uuhelp_parser",
] ]
[[package]]
name = "uufuzz"
version = "0.0.30"
dependencies = [
"console",
"libc",
"rand 0.9.1",
"similar",
"tempfile",
"uucore",
]
[[package]] [[package]]
name = "uuhelp_parser" name = "uuhelp_parser"
version = "0.0.30" version = "0.0.30"

View file

@ -1,20 +1,22 @@
[package] [package]
name = "uucore-fuzz" name = "uucore-fuzz"
version = "0.0.0" version = "0.0.0"
description = "uutils ~ 'core' uutils fuzzers"
repository = "https://github.com/uutils/coreutils/tree/main/fuzz/"
edition.workspace = true
publish = false publish = false
[workspace.package]
edition = "2024" edition = "2024"
license = "MIT"
[package.metadata] [package.metadata]
cargo-fuzz = true cargo-fuzz = true
[dependencies] [dependencies]
console = "0.15.0"
libfuzzer-sys = "0.4.7" libfuzzer-sys = "0.4.7"
libc = "0.2.153"
tempfile = "3.15.0"
rand = { version = "0.9.0", features = ["small_rng"] } rand = { version = "0.9.0", features = ["small_rng"] }
similar = "2.5.0" uufuzz = { path = "uufuzz/" }
uucore = { path = "../src/uucore/", features = ["parser"] } uucore = { path = "../src/uucore/", features = ["parser"] }
uu_date = { path = "../src/uu/date/" } uu_date = { path = "../src/uu/date/" }
uu_test = { path = "../src/uu/test/" } uu_test = { path = "../src/uu/test/" }

View file

@ -6,20 +6,19 @@
#![no_main] #![no_main]
use libfuzzer_sys::fuzz_target; use libfuzzer_sys::fuzz_target;
use rand::Rng;
use std::env::temp_dir;
use std::ffi::OsString; use std::ffi::OsString;
use std::fs::{self, File};
use std::io::Write;
use std::process::Command;
use uu_cksum::uumain; use uu_cksum::uumain;
mod fuzz_common; use uufuzz::{
use crate::fuzz_common::{
CommandResult, compare_result, generate_and_run_uumain, generate_random_file, CommandResult, compare_result, generate_and_run_uumain, generate_random_file,
generate_random_string, generate_random_string,
pretty_print::{print_or_empty, print_test_begin}, pretty_print::{print_or_empty, print_test_begin},
replace_fuzz_binary_name, run_gnu_cmd, replace_fuzz_binary_name, run_gnu_cmd,
}; };
use rand::Rng;
use std::env::temp_dir;
use std::fs::{self, File};
use std::io::Write;
use std::process::Command;
static CMD_PATH: &str = "cksum"; static CMD_PATH: &str = "cksum";

View file

@ -11,8 +11,7 @@ use uu_cut::uumain;
use rand::Rng; use rand::Rng;
use std::ffi::OsString; use std::ffi::OsString;
mod fuzz_common; use uufuzz::{
use crate::fuzz_common::{
CommandResult, compare_result, generate_and_run_uumain, generate_random_string, run_gnu_cmd, CommandResult, compare_result, generate_and_run_uumain, generate_random_string, run_gnu_cmd,
}; };
static CMD_PATH: &str = "cut"; static CMD_PATH: &str = "cut";

View file

@ -6,11 +6,8 @@ use rand::Rng;
use rand::prelude::IndexedRandom; use rand::prelude::IndexedRandom;
use std::ffi::OsString; use std::ffi::OsString;
mod fuzz_common; use uufuzz::CommandResult;
use crate::fuzz_common::CommandResult; use uufuzz::{compare_result, generate_and_run_uumain, generate_random_string, run_gnu_cmd};
use crate::fuzz_common::{
compare_result, generate_and_run_uumain, generate_random_string, run_gnu_cmd,
};
static CMD_PATH: &str = "echo"; static CMD_PATH: &str = "echo";

View file

@ -10,11 +10,10 @@ use uu_env::uumain;
use std::ffi::OsString; use std::ffi::OsString;
mod fuzz_common; use rand::Rng;
use crate::fuzz_common::{ use uufuzz::{
CommandResult, compare_result, generate_and_run_uumain, generate_random_string, run_gnu_cmd, CommandResult, compare_result, generate_and_run_uumain, generate_random_string, run_gnu_cmd,
}; };
use rand::Rng;
static CMD_PATH: &str = "env"; static CMD_PATH: &str = "env";

View file

@ -12,11 +12,8 @@ use rand::Rng;
use rand::prelude::IndexedRandom; use rand::prelude::IndexedRandom;
use std::{env, ffi::OsString}; use std::{env, ffi::OsString};
mod fuzz_common; use uufuzz::CommandResult;
use crate::fuzz_common::CommandResult; use uufuzz::{compare_result, generate_and_run_uumain, generate_random_string, run_gnu_cmd};
use crate::fuzz_common::{
compare_result, generate_and_run_uumain, generate_random_string, run_gnu_cmd,
};
static CMD_PATH: &str = "expr"; static CMD_PATH: &str = "expr";
fn generate_expr(max_depth: u32) -> String { fn generate_expr(max_depth: u32) -> String {

View file

@ -13,11 +13,8 @@ use rand::seq::IndexedRandom;
use std::env; use std::env;
use std::ffi::OsString; use std::ffi::OsString;
mod fuzz_common; use uufuzz::CommandResult;
use crate::fuzz_common::CommandResult; use uufuzz::{compare_result, generate_and_run_uumain, generate_random_string, run_gnu_cmd};
use crate::fuzz_common::{
compare_result, generate_and_run_uumain, generate_random_string, run_gnu_cmd,
};
static CMD_PATH: &str = "printf"; static CMD_PATH: &str = "printf";

View file

@ -11,11 +11,8 @@ use uu_seq::uumain;
use rand::Rng; use rand::Rng;
use std::ffi::OsString; use std::ffi::OsString;
mod fuzz_common; use uufuzz::CommandResult;
use crate::fuzz_common::CommandResult; use uufuzz::{compare_result, generate_and_run_uumain, generate_random_string, run_gnu_cmd};
use crate::fuzz_common::{
compare_result, generate_and_run_uumain, generate_random_string, run_gnu_cmd,
};
static CMD_PATH: &str = "seq"; static CMD_PATH: &str = "seq";
fn generate_seq() -> String { fn generate_seq() -> String {

View file

@ -12,11 +12,8 @@ use rand::Rng;
use std::env; use std::env;
use std::ffi::OsString; use std::ffi::OsString;
mod fuzz_common; use uufuzz::CommandResult;
use crate::fuzz_common::CommandResult; use uufuzz::{compare_result, generate_and_run_uumain, generate_random_string, run_gnu_cmd};
use crate::fuzz_common::{
compare_result, generate_and_run_uumain, generate_random_string, run_gnu_cmd,
};
static CMD_PATH: &str = "sort"; static CMD_PATH: &str = "sort";
fn generate_sort_args() -> String { fn generate_sort_args() -> String {

View file

@ -11,8 +11,7 @@ use uu_split::uumain;
use rand::Rng; use rand::Rng;
use std::ffi::OsString; use std::ffi::OsString;
mod fuzz_common; use uufuzz::{
use crate::fuzz_common::{
CommandResult, compare_result, generate_and_run_uumain, generate_random_string, run_gnu_cmd, CommandResult, compare_result, generate_and_run_uumain, generate_random_string, run_gnu_cmd,
}; };
static CMD_PATH: &str = "split"; static CMD_PATH: &str = "split";

View file

@ -12,11 +12,8 @@ use rand::Rng;
use rand::prelude::IndexedRandom; use rand::prelude::IndexedRandom;
use std::ffi::OsString; use std::ffi::OsString;
mod fuzz_common; use uufuzz::CommandResult;
use crate::fuzz_common::CommandResult; use uufuzz::{compare_result, generate_and_run_uumain, generate_random_string, run_gnu_cmd};
use crate::fuzz_common::{
compare_result, generate_and_run_uumain, generate_random_string, run_gnu_cmd,
};
#[allow(clippy::upper_case_acronyms)] #[allow(clippy::upper_case_acronyms)]
#[derive(PartialEq, Debug, Clone)] #[derive(PartialEq, Debug, Clone)]

View file

@ -10,8 +10,7 @@ use uu_tr::uumain;
use rand::Rng; use rand::Rng;
mod fuzz_common; use uufuzz::{
use crate::fuzz_common::{
CommandResult, compare_result, generate_and_run_uumain, generate_random_string, run_gnu_cmd, CommandResult, compare_result, generate_and_run_uumain, generate_random_string, run_gnu_cmd,
}; };
static CMD_PATH: &str = "tr"; static CMD_PATH: &str = "tr";

View file

@ -11,8 +11,7 @@ use uu_wc::uumain;
use rand::Rng; use rand::Rng;
use std::ffi::OsString; use std::ffi::OsString;
mod fuzz_common; use uufuzz::{
use crate::fuzz_common::{
CommandResult, compare_result, generate_and_run_uumain, generate_random_string, run_gnu_cmd, CommandResult, compare_result, generate_and_run_uumain, generate_random_string, run_gnu_cmd,
}; };
static CMD_PATH: &str = "wc"; static CMD_PATH: &str = "wc";

17
fuzz/uufuzz/Cargo.toml Normal file
View file

@ -0,0 +1,17 @@
[package]
name = "uufuzz"
authors = ["uutils developers"]
description = "uutils ~ 'core' uutils fuzzing library"
repository = "https://github.com/uutils/coreutils/tree/main/fuzz/uufuzz"
version = "0.0.30"
edition.workspace = true
license.workspace = true
[dependencies]
console = "0.15.0"
libc = "0.2.153"
rand = { version = "0.9.0", features = ["small_rng"] }
similar = "2.5.0"
uucore = { path = "../../src/uucore/", features = ["parser"] }
tempfile = "3.15.0"