diff --git a/src/uu/cksum/src/cksum.rs b/src/uu/cksum/src/cksum.rs index e3fb78ec4..40c06a386 100644 --- a/src/uu/cksum/src/cksum.rs +++ b/src/uu/cksum/src/cksum.rs @@ -207,6 +207,13 @@ where (ALGORITHM_OPTIONS_CRC, true) => println!("{sum} {sz}"), (ALGORITHM_OPTIONS_CRC, false) => println!("{sum} {sz} {}", filename.display()), (ALGORITHM_OPTIONS_BLAKE2B, _) if !options.untagged => { + if filename.is_dir() { + return Err(io::Error::new( + io::ErrorKind::InvalidInput, + format!("{}: Is a directory", filename.display()), + ) + .into()); + } if let Some(length) = options.length { // Multiply by 8 here, as we want to print the length in bits. println!("BLAKE2b-{} ({}) = {sum}", length * 8, filename.display()); diff --git a/tests/by-util/test_cksum.rs b/tests/by-util/test_cksum.rs index a4e877b1c..2d4fad923 100644 --- a/tests/by-util/test_cksum.rs +++ b/tests/by-util/test_cksum.rs @@ -308,3 +308,17 @@ fn test_raw_multiple_files() { .stderr_contains("cksum: the --raw option is not supported with multiple files") .code_is(1); } + +#[test] +fn test_blake2b_fail_on_directory() { + let (at, mut ucmd) = at_and_ucmd!(); + + let folder_name = "a_folder"; + at.mkdir(folder_name); + + ucmd.arg("--algorithm=blake2b") + .arg(folder_name) + .fails() + .no_stdout() + .stderr_contains(format!("cksum: {folder_name}: Is a directory")); +}