diff --git a/Cargo.lock b/Cargo.lock index 778b6a169..2e1569e45 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -72,9 +72,9 @@ dependencies = [ [[package]] name = "arbitrary" -version = "1.3.1" +version = "1.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2e1373abdaa212b704512ec2bd8b26bd0b7d5c3f70117411a5d9a451383c859" +checksum = "7d5a26814d8dcb93b0e5a0ff3c6d80a8843bafb21b39e8e18a6f05471870e110" dependencies = [ "derive_arbitrary", ] @@ -154,18 +154,18 @@ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" [[package]] name = "clap" -version = "4.4.6" +version = "4.4.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d04704f56c2cde07f43e8e2c154b43f216dc5c92fc98ada720177362f953b956" +checksum = "ac495e00dcec98c83465d5ad66c5c4fabd652fd6686e7c6269b117e729a6f17b" dependencies = [ "clap_builder", ] [[package]] name = "clap_builder" -version = "4.4.6" +version = "4.4.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e231faeaca65ebd1ea3c737966bf858971cd38c3849107aa3ea7de90a804e45" +checksum = "c77ed9a32a62e6ca27175d00d29d05ca32e396ea1eb5fb01d8256b669cec7663" dependencies = [ "anstream", "anstyle", @@ -175,9 +175,9 @@ dependencies = [ [[package]] name = "clap_lex" -version = "0.5.0" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2da6da31387c7e4ef160ffab6d5e7f00c42626fe39aea70a7b0f1773f7dd6c1b" +checksum = "702fc72eb24e5a1e48ce58027a675bc24edd52096d5397d4aea7c6dd9eca0bd1" [[package]] name = "colorchoice" @@ -197,9 +197,9 @@ dependencies = [ [[package]] name = "derive_arbitrary" -version = "1.3.1" +version = "1.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53e0efad4403bfc52dc201159c4b842a246a14b98c64b55dfd0f2d89729dfeb8" +checksum = "67e77553c4162a157adbf834ebae5b415acbecbeafc7a74b0e886657506a7611" dependencies = [ "proc-macro2", "quote", @@ -286,9 +286,9 @@ dependencies = [ [[package]] name = "libc" -version = "0.2.149" +version = "0.2.150" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a08173bc88b7955d1b3145aa561539096c421ac8debde8cbc3612ec635fee29b" +checksum = "89d92a4743f9a61002fae18374ed11e7973f530cb3a3255fb354818118b2203c" [[package]] name = "linux-raw-sys" @@ -374,9 +374,9 @@ dependencies = [ [[package]] name = "redox_syscall" -version = "0.3.5" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29" +checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa" dependencies = [ "bitflags 1.3.2", ] @@ -427,9 +427,9 @@ dependencies = [ [[package]] name = "rustix" -version = "0.38.19" +version = "0.38.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "745ecfa778e66b2b63c88a61cb36e0eea109e803b0b86bf9879fbc77c70e86ed" +checksum = "2b426b0506e5d50a7d8dafcf2e81471400deb602392c7dd110815afb4eaf02a3" dependencies = [ "bitflags 2.4.1", "errno", @@ -469,9 +469,9 @@ dependencies = [ [[package]] name = "tempfile" -version = "3.8.0" +version = "3.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb94d2f3cc536af71caac6b6fcebf65860b347e7ce0cc9ebe8f70d3e521054ef" +checksum = "7ef1adac450ad7f4b3c28589471ade84f25f731a7a0fe30d71dfa9f60fd808e5" dependencies = [ "cfg-if", "fastrand", diff --git a/cargo-afl/AFLplusplus b/cargo-afl/AFLplusplus index ad2af7cae..7e67dc9d6 160000 --- a/cargo-afl/AFLplusplus +++ b/cargo-afl/AFLplusplus @@ -1 +1 @@ -Subproject commit ad2af7caec2df6ceec87669864f47b9567c672af +Subproject commit 7e67dc9d6938aadef19d5697a448cdf15a50172f diff --git a/cargo-afl/src/bin/cargo-afl.rs b/cargo-afl/src/bin/cargo-afl.rs index 69403eaf9..08a34c868 100644 --- a/cargo-afl/src/bin/cargo-afl.rs +++ b/cargo-afl/src/bin/cargo-afl.rs @@ -386,6 +386,7 @@ mod tests { use super::*; use assert_cmd::Command; use std::os::unix::ffi::OsStringExt; + use std::process::Output; #[test] fn test_app() { @@ -394,26 +395,34 @@ mod tests { #[test] fn display_name() { - assert!( - String::from_utf8(cargo_afl(&["-V"]).output().unwrap().stdout) - .unwrap() - .starts_with("cargo-afl") - ); + let output = cargo_afl(&["-V"]).output().unwrap(); + assert_success(&output, None); + assert!(String::from_utf8(output.stdout) + .unwrap() + .starts_with("cargo-afl")); } #[test] fn afl_required_else_help() { + let lhs = command().arg("--help").output().unwrap(); + let rhs = command().output().unwrap(); + assert_success(&lhs, None); + assert_failure(&rhs, None); assert_eq!( - String::from_utf8(command().arg("--help").output().unwrap().stdout).unwrap(), - String::from_utf8(command().output().unwrap().stderr).unwrap() + String::from_utf8(lhs.stdout).unwrap(), + String::from_utf8(rhs.stderr).unwrap() ); } #[test] fn subcommand_required_else_help() { + let lhs = cargo_afl(&["--help"]).output().unwrap(); + let rhs = cargo_afl::<&OsStr>(&[]).output().unwrap(); + assert_success(&lhs, None); + assert_failure(&rhs, None); assert_eq!( - String::from_utf8(cargo_afl(&["--help"]).output().unwrap().stdout).unwrap(), - String::from_utf8(cargo_afl::<&OsStr>(&[]).output().unwrap().stderr).unwrap() + String::from_utf8(lhs.stdout).unwrap(), + String::from_utf8(rhs.stderr).unwrap() ); } @@ -467,52 +476,57 @@ mod tests { #[test] fn subcommands_help_subcommand_disabled() { - assert!( - String::from_utf8(cargo_afl(&["help"]).output().unwrap().stdout) - .unwrap() - .starts_with("Usage:") - ); + let output = cargo_afl(&["help"]).output().unwrap(); + assert_success(&output, None); + assert!(String::from_utf8(output.stdout) + .unwrap() + .starts_with("Usage:")); for &subcommand in SUBCOMMANDS { - assert!( - !String::from_utf8(cargo_afl(&[subcommand, "help"]).output().unwrap().stdout) - .unwrap() - .starts_with("Usage:") - ); + let output = cargo_afl(&[subcommand, "help"]).output().unwrap(); + assert_failure(&output, Some(subcommand)); + assert!(!String::from_utf8(output.stdout) + .unwrap() + .starts_with("Usage:")); } } #[test] fn subcommands_help_flag_disabled() { - assert!( - String::from_utf8(cargo_afl(&["--help"]).output().unwrap().stdout) - .unwrap() - .starts_with("Usage:") - ); - - for &subcommand in SUBCOMMANDS { - assert!(!String::from_utf8( - cargo_afl(&[subcommand, "--help"]).output().unwrap().stdout - ) + let output = cargo_afl(&["--help"]).output().unwrap(); + assert_success(&output, None); + assert!(String::from_utf8(output.stdout) .unwrap() .starts_with("Usage:")); + + for &subcommand in SUBCOMMANDS { + let output = cargo_afl(&[subcommand, "--help"]).output().unwrap(); + // smoelius: `afl-system-config` has a `--help` flag. + if subcommand == "system-config" { + assert_success(&output, Some(subcommand)); + } else { + assert_failure(&output, Some(subcommand)); + } + assert!(!String::from_utf8(output.stdout) + .unwrap() + .starts_with("Usage:")); } } #[test] fn subcommands_version_flag_disabled() { - assert!( - String::from_utf8(cargo_afl(&["-V"]).output().unwrap().stdout) - .unwrap() - .starts_with("cargo-afl") - ); + let output = cargo_afl(&["-V"]).output().unwrap(); + assert_success(&output, None); + assert!(String::from_utf8(output.stdout) + .unwrap() + .starts_with("cargo-afl")); for &subcommand in SUBCOMMANDS { - assert!( - !String::from_utf8(cargo_afl(&[subcommand, "-V"]).output().unwrap().stdout) - .unwrap() - .starts_with("cargo-afl") - ); + let output = cargo_afl(&[subcommand, "-V"]).output().unwrap(); + assert_failure(&output, Some(subcommand)); + assert!(!String::from_utf8(output.stdout) + .unwrap() + .starts_with("cargo-afl")); } } @@ -526,6 +540,30 @@ mod tests { Command::cargo_bin("cargo-afl").unwrap() } + fn assert_success(output: &Output, subcommand: Option<&str>) { + assert!( + output.status.success(), + "{}", + if let Some(subcommand) = subcommand { + format!("{subcommand} failed") + } else { + String::new() + } + ); + } + + fn assert_failure(output: &Output, subcommand: Option<&str>) { + assert!( + !output.status.success(), + "{}", + if let Some(subcommand) = subcommand { + format!("{subcommand} succeeded") + } else { + String::new() + } + ); + } + fn invalid_utf8() -> OsString { OsString::from_vec(vec![0xfe]) }