1
Fork 0
mirror of https://github.com/RGBCube/uutils-coreutils synced 2025-07-28 03:27:44 +00:00

cksum: fails in case of unknown algo

This commit is contained in:
Sylvestre Ledru 2024-05-17 20:21:14 +02:00
parent 9c52ca8d55
commit 1b78102a6b
2 changed files with 31 additions and 13 deletions

View file

@ -43,6 +43,20 @@ const ALGORITHM_OPTIONS_SHA512: &str = "sha512";
const ALGORITHM_OPTIONS_BLAKE2B: &str = "blake2b";
const ALGORITHM_OPTIONS_SM3: &str = "sm3";
const SUPPORTED_ALGO: [&str; 11] = [
ALGORITHM_OPTIONS_SYSV,
ALGORITHM_OPTIONS_BSD,
ALGORITHM_OPTIONS_CRC,
ALGORITHM_OPTIONS_MD5,
ALGORITHM_OPTIONS_SHA1,
ALGORITHM_OPTIONS_SHA224,
ALGORITHM_OPTIONS_SHA256,
ALGORITHM_OPTIONS_SHA384,
ALGORITHM_OPTIONS_SHA512,
ALGORITHM_OPTIONS_BLAKE2B,
ALGORITHM_OPTIONS_SM3,
];
#[derive(Debug)]
enum CkSumError {
RawMultipleFiles,
@ -479,6 +493,11 @@ where
let (algo_name, length) = if algo_based_format {
// When the algo-based format is matched, extract details from regex captures
let algorithm = caps.name("algo").map_or("", |m| m.as_str()).to_lowercase();
if !SUPPORTED_ALGO.contains(&algorithm.as_str()) {
// Not supported algo, leave early
properly_formatted = false;
continue;
}
let bits = caps
.name("bits")
.map(|m| m.as_str().parse::<usize>().unwrap() / 8);
@ -688,19 +707,7 @@ pub fn uu_app() -> Command {
.short('a')
.help("select the digest type to use. See DIGEST below")
.value_name("ALGORITHM")
.value_parser([
ALGORITHM_OPTIONS_SYSV,
ALGORITHM_OPTIONS_BSD,
ALGORITHM_OPTIONS_CRC,
ALGORITHM_OPTIONS_MD5,
ALGORITHM_OPTIONS_SHA1,
ALGORITHM_OPTIONS_SHA224,
ALGORITHM_OPTIONS_SHA256,
ALGORITHM_OPTIONS_SHA384,
ALGORITHM_OPTIONS_SHA512,
ALGORITHM_OPTIONS_BLAKE2B,
ALGORITHM_OPTIONS_SM3,
]),
.value_parser(SUPPORTED_ALGO),
)
.arg(
Arg::new(options::UNTAGGED)

View file

@ -1136,3 +1136,14 @@ fn test_blake2d_tested_with_sha1() {
.fails()
.stderr_contains("f: no properly formatted checksum lines found");
}
#[test]
fn test_unknown_sha() {
let (at, mut ucmd) = at_and_ucmd!();
at.write("f", "SHA4 (README.md) = 00000000\n");
ucmd.arg("-c")
.arg("f")
.fails()
.stderr_contains("f: no properly formatted checksum lines found");
}