From 4e9d07e86cfe8069a9802ba1049cdc8afe60428a Mon Sep 17 00:00:00 2001 From: Dorian Peron Date: Sun, 26 Oct 2025 14:32:20 +0100 Subject: [PATCH] util(cksum): Fix unexpected fail when giving --length 0 to wrong algorithm --- src/uu/cksum/src/cksum.rs | 13 ++++++------- tests/by-util/test_cksum.rs | 14 ++++++++++++++ 2 files changed, 20 insertions(+), 7 deletions(-) diff --git a/src/uu/cksum/src/cksum.rs b/src/uu/cksum/src/cksum.rs index bdf94a4997d..4de22cf8a93 100644 --- a/src/uu/cksum/src/cksum.rs +++ b/src/uu/cksum/src/cksum.rs @@ -383,14 +383,13 @@ pub fn uumain(args: impl uucore::Args) -> UResult<()> { let input_length = matches.get_one::(options::LENGTH); let length = match input_length { - Some(length) => { - if algo_name == ALGORITHM_OPTIONS_BLAKE2B { - calculate_blake2b_length(*length)? - } else { - return Err(ChecksumError::LengthOnlyForBlake2b.into()); - } + None | Some(0) => None, + Some(length) if algo_name == ALGORITHM_OPTIONS_BLAKE2B => { + calculate_blake2b_length(*length)? + } + _ => { + return Err(ChecksumError::LengthOnlyForBlake2b.into()); } - None => None, }; if LEGACY_ALGORITHMS.contains(&algo_name) && check { diff --git a/tests/by-util/test_cksum.rs b/tests/by-util/test_cksum.rs index ef2f8d86fca..392efe688bf 100644 --- a/tests/by-util/test_cksum.rs +++ b/tests/by-util/test_cksum.rs @@ -348,6 +348,20 @@ fn test_length_with_wrong_algorithm() { .stderr_contains("cksum: --length is only supported with --algorithm=blake2b"); } +/// Giving --length to a wrong algorithm doesn't fail if the length is zero +#[test] +fn test_length_is_zero_with_wrong_algorithm() { + for algo in ["md5", "crc", "sha1", "sha224", "sha256", "sha384", "sha512"] { + new_ucmd!() + .arg("--length=0") + .args(&["-a", algo]) + .arg("lorem_ipsum.txt") + .succeeds() + .no_stderr() + .stdout_is_fixture(format!("{algo}_single_file.expected")); + } +} + #[test] fn test_length_not_supported() { new_ucmd!()