mirror of
https://github.com/RGBCube/uutils-coreutils
synced 2025-07-28 11:37:44 +00:00
cksum: fails in case of unknown algo
This commit is contained in:
parent
9c52ca8d55
commit
1b78102a6b
2 changed files with 31 additions and 13 deletions
|
@ -43,6 +43,20 @@ const ALGORITHM_OPTIONS_SHA512: &str = "sha512";
|
||||||
const ALGORITHM_OPTIONS_BLAKE2B: &str = "blake2b";
|
const ALGORITHM_OPTIONS_BLAKE2B: &str = "blake2b";
|
||||||
const ALGORITHM_OPTIONS_SM3: &str = "sm3";
|
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)]
|
#[derive(Debug)]
|
||||||
enum CkSumError {
|
enum CkSumError {
|
||||||
RawMultipleFiles,
|
RawMultipleFiles,
|
||||||
|
@ -479,6 +493,11 @@ where
|
||||||
let (algo_name, length) = if algo_based_format {
|
let (algo_name, length) = if algo_based_format {
|
||||||
// When the algo-based format is matched, extract details from regex captures
|
// 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();
|
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
|
let bits = caps
|
||||||
.name("bits")
|
.name("bits")
|
||||||
.map(|m| m.as_str().parse::<usize>().unwrap() / 8);
|
.map(|m| m.as_str().parse::<usize>().unwrap() / 8);
|
||||||
|
@ -688,19 +707,7 @@ pub fn uu_app() -> Command {
|
||||||
.short('a')
|
.short('a')
|
||||||
.help("select the digest type to use. See DIGEST below")
|
.help("select the digest type to use. See DIGEST below")
|
||||||
.value_name("ALGORITHM")
|
.value_name("ALGORITHM")
|
||||||
.value_parser([
|
.value_parser(SUPPORTED_ALGO),
|
||||||
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,
|
|
||||||
]),
|
|
||||||
)
|
)
|
||||||
.arg(
|
.arg(
|
||||||
Arg::new(options::UNTAGGED)
|
Arg::new(options::UNTAGGED)
|
||||||
|
|
|
@ -1136,3 +1136,14 @@ fn test_blake2d_tested_with_sha1() {
|
||||||
.fails()
|
.fails()
|
||||||
.stderr_contains("f: no properly formatted checksum lines found");
|
.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");
|
||||||
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue