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_procs
uudoc
uufuzz
uumain
uutil
uutests

17
fuzz/Cargo.lock generated
View file

@ -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"

View file

@ -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/" }

View file

@ -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";

View file

@ -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";

View file

@ -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";

View file

@ -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";

View file

@ -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 {

View file

@ -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";

View file

@ -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 {

View file

@ -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 {

View file

@ -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";

View file

@ -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)]

View file

@ -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";

View file

@ -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";

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"