From db58d2b6b53466e1250c23c6d051621316b1cb10 Mon Sep 17 00:00:00 2001 From: Sylvestre Ledru Date: Fri, 17 May 2024 21:06:32 +0200 Subject: [PATCH] cksum: when length/bits can't be divided by 8, generate an error --- src/uu/cksum/src/cksum.rs | 22 ++++++++++++++++++---- tests/by-util/test_cksum.rs | 1 - 2 files changed, 18 insertions(+), 5 deletions(-) diff --git a/src/uu/cksum/src/cksum.rs b/src/uu/cksum/src/cksum.rs index 54b6d13c9..554fe8514 100644 --- a/src/uu/cksum/src/cksum.rs +++ b/src/uu/cksum/src/cksum.rs @@ -498,10 +498,24 @@ where properly_formatted = false; continue; } - let bits = caps - .name("bits") - .map(|m| m.as_str().parse::().unwrap() / 8); - (algorithm, bits) + + let bits = caps.name("bits").map_or(Some(None), |m| { + let bits_value = m.as_str().parse::().unwrap(); + if bits_value % 8 == 0 { + Some(Some(bits_value / 8)) + } else { + properly_formatted = false; + None // Return None to signal a parsing or divisibility issue + } + }); + + if bits.is_none() { + // If bits is None, we have a parsing or divisibility issue + // Exit the loop outside of the closure + continue; + } + + (algorithm, bits.unwrap()) } else if let Some(a) = algo_name_input { // When a specific algorithm name is input, use it and default bits to None (a.to_lowercase(), None) diff --git a/tests/by-util/test_cksum.rs b/tests/by-util/test_cksum.rs index 3002753d8..2bfe1b3b8 100644 --- a/tests/by-util/test_cksum.rs +++ b/tests/by-util/test_cksum.rs @@ -1105,7 +1105,6 @@ fn test_md5_bits() { .stderr_contains("f: no properly formatted checksum lines found"); } -#[ignore = "Should fail on bits"] #[test] fn test_blake2b_bits() { let (at, mut ucmd) = at_and_ucmd!();