diff --git a/.vscode/cspell.dictionaries/workspace.wordlist.txt b/.vscode/cspell.dictionaries/workspace.wordlist.txt index 3757980d334..d917d30a4de 100644 --- a/.vscode/cspell.dictionaries/workspace.wordlist.txt +++ b/.vscode/cspell.dictionaries/workspace.wordlist.txt @@ -331,6 +331,7 @@ utmpx uucore uucore_procs uudoc +uufuzz uumain uutil uutests diff --git a/fuzz/Cargo.lock b/fuzz/Cargo.lock index 37b66a3fa31..d7d066515c3 100644 --- a/fuzz/Cargo.lock +++ b/fuzz/Cargo.lock @@ -1347,12 +1347,8 @@ dependencies = [ name = "uucore-fuzz" version = "0.0.0" dependencies = [ - "console", - "libc", "libfuzzer-sys", "rand 0.9.1", - "similar", - "tempfile", "uu_cksum", "uu_cut", "uu_date", @@ -1367,6 +1363,7 @@ dependencies = [ "uu_tr", "uu_wc", "uucore", + "uufuzz", ] [[package]] @@ -1378,6 +1375,18 @@ dependencies = [ "uuhelp_parser", ] +[[package]] +name = "uufuzz" +version = "0.0.30" +dependencies = [ + "console", + "libc", + "rand 0.9.1", + "similar", + "tempfile", + "uucore", +] + [[package]] name = "uuhelp_parser" version = "0.0.30" diff --git a/fuzz/Cargo.toml b/fuzz/Cargo.toml index 255d11d5b72..48da8e846b4 100644 --- a/fuzz/Cargo.toml +++ b/fuzz/Cargo.toml @@ -1,20 +1,22 @@ [package] name = "uucore-fuzz" version = "0.0.0" +description = "uutils ~ 'core' uutils fuzzers" +repository = "https://github.com/uutils/coreutils/tree/main/fuzz/" +edition.workspace = true publish = false + +[workspace.package] edition = "2024" +license = "MIT" [package.metadata] cargo-fuzz = true [dependencies] -console = "0.15.0" libfuzzer-sys = "0.4.7" -libc = "0.2.153" -tempfile = "3.15.0" rand = { version = "0.9.0", features = ["small_rng"] } -similar = "2.5.0" - +uufuzz = { path = "uufuzz/" } uucore = { path = "../src/uucore/", features = ["parser"] } uu_date = { path = "../src/uu/date/" } uu_test = { path = "../src/uu/test/" } diff --git a/fuzz/fuzz_targets/fuzz_cksum.rs b/fuzz/fuzz_targets/fuzz_cksum.rs index 3b5ddb8bb18..be93a96050e 100644 --- a/fuzz/fuzz_targets/fuzz_cksum.rs +++ b/fuzz/fuzz_targets/fuzz_cksum.rs @@ -6,20 +6,19 @@ #![no_main] use libfuzzer_sys::fuzz_target; +use rand::Rng; +use std::env::temp_dir; use std::ffi::OsString; +use std::fs::{self, File}; +use std::io::Write; +use std::process::Command; use uu_cksum::uumain; -mod fuzz_common; -use crate::fuzz_common::{ +use uufuzz::{ CommandResult, compare_result, generate_and_run_uumain, generate_random_file, generate_random_string, pretty_print::{print_or_empty, print_test_begin}, 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"; diff --git a/fuzz/fuzz_targets/fuzz_cut.rs b/fuzz/fuzz_targets/fuzz_cut.rs index 828a7c6190b..4a5215f8aec 100644 --- a/fuzz/fuzz_targets/fuzz_cut.rs +++ b/fuzz/fuzz_targets/fuzz_cut.rs @@ -11,8 +11,7 @@ use uu_cut::uumain; use rand::Rng; use std::ffi::OsString; -mod fuzz_common; -use crate::fuzz_common::{ +use uufuzz::{ CommandResult, compare_result, generate_and_run_uumain, generate_random_string, run_gnu_cmd, }; static CMD_PATH: &str = "cut"; diff --git a/fuzz/fuzz_targets/fuzz_echo.rs b/fuzz/fuzz_targets/fuzz_echo.rs index a36a7ebadfc..e6b0ba9a6aa 100644 --- a/fuzz/fuzz_targets/fuzz_echo.rs +++ b/fuzz/fuzz_targets/fuzz_echo.rs @@ -6,11 +6,8 @@ use rand::Rng; use rand::prelude::IndexedRandom; use std::ffi::OsString; -mod fuzz_common; -use crate::fuzz_common::CommandResult; -use crate::fuzz_common::{ - compare_result, generate_and_run_uumain, generate_random_string, run_gnu_cmd, -}; +use uufuzz::CommandResult; +use uufuzz::{compare_result, generate_and_run_uumain, generate_random_string, run_gnu_cmd}; static CMD_PATH: &str = "echo"; diff --git a/fuzz/fuzz_targets/fuzz_env.rs b/fuzz/fuzz_targets/fuzz_env.rs index f38dced076e..284089f8378 100644 --- a/fuzz/fuzz_targets/fuzz_env.rs +++ b/fuzz/fuzz_targets/fuzz_env.rs @@ -10,11 +10,10 @@ use uu_env::uumain; use std::ffi::OsString; -mod fuzz_common; -use crate::fuzz_common::{ +use rand::Rng; +use uufuzz::{ CommandResult, compare_result, generate_and_run_uumain, generate_random_string, run_gnu_cmd, }; -use rand::Rng; static CMD_PATH: &str = "env"; diff --git a/fuzz/fuzz_targets/fuzz_expr.rs b/fuzz/fuzz_targets/fuzz_expr.rs index a2c232ab333..77ecffabc1b 100644 --- a/fuzz/fuzz_targets/fuzz_expr.rs +++ b/fuzz/fuzz_targets/fuzz_expr.rs @@ -12,11 +12,8 @@ use rand::Rng; use rand::prelude::IndexedRandom; use std::{env, ffi::OsString}; -mod fuzz_common; -use crate::fuzz_common::CommandResult; -use crate::fuzz_common::{ - compare_result, generate_and_run_uumain, generate_random_string, run_gnu_cmd, -}; +use uufuzz::CommandResult; +use uufuzz::{compare_result, generate_and_run_uumain, generate_random_string, run_gnu_cmd}; static CMD_PATH: &str = "expr"; fn generate_expr(max_depth: u32) -> String { diff --git a/fuzz/fuzz_targets/fuzz_printf.rs b/fuzz/fuzz_targets/fuzz_printf.rs index e8d74e2bedd..885ebb815bf 100644 --- a/fuzz/fuzz_targets/fuzz_printf.rs +++ b/fuzz/fuzz_targets/fuzz_printf.rs @@ -13,11 +13,8 @@ use rand::seq::IndexedRandom; use std::env; use std::ffi::OsString; -mod fuzz_common; -use crate::fuzz_common::CommandResult; -use crate::fuzz_common::{ - compare_result, generate_and_run_uumain, generate_random_string, run_gnu_cmd, -}; +use uufuzz::CommandResult; +use uufuzz::{compare_result, generate_and_run_uumain, generate_random_string, run_gnu_cmd}; static CMD_PATH: &str = "printf"; diff --git a/fuzz/fuzz_targets/fuzz_seq.rs b/fuzz/fuzz_targets/fuzz_seq.rs index d36f0720a65..35721865e8c 100644 --- a/fuzz/fuzz_targets/fuzz_seq.rs +++ b/fuzz/fuzz_targets/fuzz_seq.rs @@ -11,11 +11,8 @@ use uu_seq::uumain; use rand::Rng; use std::ffi::OsString; -mod fuzz_common; -use crate::fuzz_common::CommandResult; -use crate::fuzz_common::{ - compare_result, generate_and_run_uumain, generate_random_string, run_gnu_cmd, -}; +use uufuzz::CommandResult; +use uufuzz::{compare_result, generate_and_run_uumain, generate_random_string, run_gnu_cmd}; static CMD_PATH: &str = "seq"; fn generate_seq() -> String { diff --git a/fuzz/fuzz_targets/fuzz_sort.rs b/fuzz/fuzz_targets/fuzz_sort.rs index e94938c3903..8b38f39ec1b 100644 --- a/fuzz/fuzz_targets/fuzz_sort.rs +++ b/fuzz/fuzz_targets/fuzz_sort.rs @@ -12,11 +12,8 @@ use rand::Rng; use std::env; use std::ffi::OsString; -mod fuzz_common; -use crate::fuzz_common::CommandResult; -use crate::fuzz_common::{ - compare_result, generate_and_run_uumain, generate_random_string, run_gnu_cmd, -}; +use uufuzz::CommandResult; +use uufuzz::{compare_result, generate_and_run_uumain, generate_random_string, run_gnu_cmd}; static CMD_PATH: &str = "sort"; fn generate_sort_args() -> String { diff --git a/fuzz/fuzz_targets/fuzz_split.rs b/fuzz/fuzz_targets/fuzz_split.rs index 9a925b222ad..70860ece731 100644 --- a/fuzz/fuzz_targets/fuzz_split.rs +++ b/fuzz/fuzz_targets/fuzz_split.rs @@ -11,8 +11,7 @@ use uu_split::uumain; use rand::Rng; use std::ffi::OsString; -mod fuzz_common; -use crate::fuzz_common::{ +use uufuzz::{ CommandResult, compare_result, generate_and_run_uumain, generate_random_string, run_gnu_cmd, }; static CMD_PATH: &str = "split"; diff --git a/fuzz/fuzz_targets/fuzz_test.rs b/fuzz/fuzz_targets/fuzz_test.rs index 39926b26f76..894a1dcd56b 100644 --- a/fuzz/fuzz_targets/fuzz_test.rs +++ b/fuzz/fuzz_targets/fuzz_test.rs @@ -12,11 +12,8 @@ use rand::Rng; use rand::prelude::IndexedRandom; use std::ffi::OsString; -mod fuzz_common; -use crate::fuzz_common::CommandResult; -use crate::fuzz_common::{ - compare_result, generate_and_run_uumain, generate_random_string, run_gnu_cmd, -}; +use uufuzz::CommandResult; +use uufuzz::{compare_result, generate_and_run_uumain, generate_random_string, run_gnu_cmd}; #[allow(clippy::upper_case_acronyms)] #[derive(PartialEq, Debug, Clone)] @@ -146,10 +143,7 @@ fn generate_test_arg() -> String { let random_str = generate_random_string(rng.random_range(1..=10)); let random_str2 = generate_random_string(rng.random_range(1..=10)); - arg.push_str(&format!( - "{random_str} {} {random_str2}", - test_arg.arg, - )); + arg.push_str(&format!("{random_str} {} {random_str2}", test_arg.arg,)); } else if test_arg.arg_type == ArgType::STRING { let random_str = generate_random_string(rng.random_range(1..=10)); arg.push_str(&format!("{} {random_str}", test_arg.arg)); diff --git a/fuzz/fuzz_targets/fuzz_tr.rs b/fuzz/fuzz_targets/fuzz_tr.rs index d260e378088..5055ec0d748 100644 --- a/fuzz/fuzz_targets/fuzz_tr.rs +++ b/fuzz/fuzz_targets/fuzz_tr.rs @@ -10,8 +10,7 @@ use uu_tr::uumain; use rand::Rng; -mod fuzz_common; -use crate::fuzz_common::{ +use uufuzz::{ CommandResult, compare_result, generate_and_run_uumain, generate_random_string, run_gnu_cmd, }; static CMD_PATH: &str = "tr"; diff --git a/fuzz/fuzz_targets/fuzz_wc.rs b/fuzz/fuzz_targets/fuzz_wc.rs index 39dfb1ee862..dbc046522bb 100644 --- a/fuzz/fuzz_targets/fuzz_wc.rs +++ b/fuzz/fuzz_targets/fuzz_wc.rs @@ -11,8 +11,7 @@ use uu_wc::uumain; use rand::Rng; use std::ffi::OsString; -mod fuzz_common; -use crate::fuzz_common::{ +use uufuzz::{ CommandResult, compare_result, generate_and_run_uumain, generate_random_string, run_gnu_cmd, }; static CMD_PATH: &str = "wc"; diff --git a/fuzz/uufuzz/Cargo.toml b/fuzz/uufuzz/Cargo.toml new file mode 100644 index 00000000000..20c3e8847d2 --- /dev/null +++ b/fuzz/uufuzz/Cargo.toml @@ -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" diff --git a/fuzz/fuzz_targets/fuzz_common/mod.rs b/fuzz/uufuzz/src/lib.rs similarity index 100% rename from fuzz/fuzz_targets/fuzz_common/mod.rs rename to fuzz/uufuzz/src/lib.rs diff --git a/fuzz/fuzz_targets/fuzz_common/pretty_print.rs b/fuzz/uufuzz/src/pretty_print.rs similarity index 100% rename from fuzz/fuzz_targets/fuzz_common/pretty_print.rs rename to fuzz/uufuzz/src/pretty_print.rs