From b8e8a2f2535482f850aa12808dee030f38bb8e3b Mon Sep 17 00:00:00 2001 From: Jake Wallin Date: Thu, 15 Oct 2026 05:45:03 +0000 Subject: [PATCH] cksum: reject empty checksum filenames on WASI --- .../src/lib/features/checksum/validate.rs | 11 ++++++++++- tests/by-util/test_b2sum.rs | 17 +++++++++++++++++ 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/src/uucore/src/lib/features/checksum/validate.rs b/src/uucore/src/lib/features/checksum/validate.rs index 3153f74451d..ee525a9b98e 100644 --- a/src/uucore/src/lib/features/checksum/validate.rs +++ b/src/uucore/src/lib/features/checksum/validate.rs @@ -595,7 +595,16 @@ fn get_file_to_check( let print_error = |err: io::Error| { show!(err.map_err_context(|| { locale_aware_shell_escape(filename) })); }; - match File::open(filename) { + // WASI can resolve an empty path to a preopened directory. + let file = if filename.is_empty() { + Err(io::Error::new( + io::ErrorKind::NotFound, + translate!("error-file-not-found"), + )) + } else { + File::open(filename) + }; + match file { Ok(f) => { if f.metadata() .map_err(|_| LineCheckError::CantOpenFile)? diff --git a/tests/by-util/test_b2sum.rs b/tests/by-util/test_b2sum.rs index 8d523c371f7..fa565b6d06c 100644 --- a/tests/by-util/test_b2sum.rs +++ b/tests/by-util/test_b2sum.rs @@ -190,6 +190,23 @@ fn test_check_status_reports_unusable_checksum_input() { .stderr_contains("'standard input': no properly formatted checksum lines found"); } +#[test] +fn test_check_empty_filename() { + let digest = "786a02f742015903c6c6fd852552d272912f4740e15847618a86e217f71f5419d25e1031afee585313896444934eb04b903a685b1448b755d56f701afe9be2ce"; + + for line in [format!("{digest} \n"), format!(" {digest}\t\n")] { + new_ucmd!() + .arg("--check") + .pipe_in(line) + .fails_with_code(1) + .stdout_is("'': FAILED open or read\n") + .stderr_is( + "b2sum: '': No such file or directory\n\ + b2sum: WARNING: 1 listed file could not be read\n", + ); + } +} + #[test] fn test_invalid_b2sum_length_option_not_multiple_of_8() { let scene = TestScenario::new(util_name!());