mirror of
https://github.com/uutils/coreutils
synced 2024-07-22 10:24:54 +00:00
cksum/blake2b: improve the error management
This commit is contained in:
parent
8ddb2131df
commit
843275a136
|
@ -358,7 +358,7 @@ fn had_reset(args: &[String]) -> bool {
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Calculates the length of the digest for the given algorithm.
|
/// Calculates the length of the digest for the given algorithm.
|
||||||
fn calculate_length(algo_name: &str, length: usize) -> UResult<Option<usize>> {
|
fn calculate_blake2b_length(length: usize) -> UResult<Option<usize>> {
|
||||||
match length {
|
match length {
|
||||||
0 => Ok(None),
|
0 => Ok(None),
|
||||||
n if n % 8 != 0 => {
|
n if n % 8 != 0 => {
|
||||||
|
@ -374,21 +374,13 @@ fn calculate_length(algo_name: &str, length: usize) -> UResult<Option<usize>> {
|
||||||
.into())
|
.into())
|
||||||
}
|
}
|
||||||
n => {
|
n => {
|
||||||
if algo_name == ALGORITHM_OPTIONS_BLAKE2B {
|
// Divide by 8, as our blake2b implementation expects bytes instead of bits.
|
||||||
// Divide by 8, as our blake2b implementation expects bytes instead of bits.
|
if n == 512 {
|
||||||
if n == 512 {
|
// When length is 512, it is blake2b's default.
|
||||||
// When length is 512, it is blake2b's default.
|
// So, don't show it
|
||||||
// So, don't show it
|
Ok(None)
|
||||||
Ok(None)
|
|
||||||
} else {
|
|
||||||
Ok(Some(n / 8))
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
Err(io::Error::new(
|
Ok(Some(n / 8))
|
||||||
io::ErrorKind::InvalidInput,
|
|
||||||
"--length is only supported with --algorithm=blake2b",
|
|
||||||
)
|
|
||||||
.into())
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -623,7 +615,17 @@ pub fn uumain(args: impl uucore::Args) -> UResult<()> {
|
||||||
let input_length = matches.get_one::<usize>(options::LENGTH);
|
let input_length = matches.get_one::<usize>(options::LENGTH);
|
||||||
|
|
||||||
let length = match input_length {
|
let length = match input_length {
|
||||||
Some(length) => calculate_length(algo_name, *length)?,
|
Some(length) => {
|
||||||
|
if algo_name != ALGORITHM_OPTIONS_BLAKE2B {
|
||||||
|
return Err(io::Error::new(
|
||||||
|
io::ErrorKind::InvalidInput,
|
||||||
|
"--length is only supported with --algorithm=blake2b",
|
||||||
|
)
|
||||||
|
.into());
|
||||||
|
} else {
|
||||||
|
calculate_blake2b_length(*length)?
|
||||||
|
}
|
||||||
|
}
|
||||||
None => None,
|
None => None,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -766,7 +768,7 @@ pub fn uu_app() -> Command {
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod tests {
|
mod tests {
|
||||||
use super::had_reset;
|
use super::had_reset;
|
||||||
use crate::calculate_length;
|
use crate::calculate_blake2b_length;
|
||||||
use crate::prompt_asterisk;
|
use crate::prompt_asterisk;
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
|
@ -836,17 +838,13 @@ mod tests {
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn test_calculate_length() {
|
fn test_calculate_length() {
|
||||||
assert_eq!(
|
assert_eq!(calculate_blake2b_length(256).unwrap(), Some(32));
|
||||||
calculate_length(crate::ALGORITHM_OPTIONS_BLAKE2B, 256).unwrap(),
|
assert_eq!(calculate_blake2b_length(512).unwrap(), None);
|
||||||
Some(32)
|
assert_eq!(calculate_blake2b_length(256).unwrap(), Some(32));
|
||||||
);
|
calculate_blake2b_length(255).unwrap_err();
|
||||||
|
|
||||||
calculate_length(crate::ALGORITHM_OPTIONS_BLAKE2B, 255).unwrap_err();
|
calculate_blake2b_length(33).unwrap_err();
|
||||||
|
|
||||||
calculate_length(crate::ALGORITHM_OPTIONS_SHA256, 33).unwrap_err();
|
calculate_blake2b_length(513).unwrap_err();
|
||||||
|
|
||||||
calculate_length(crate::ALGORITHM_OPTIONS_BLAKE2B, 513).unwrap_err();
|
|
||||||
|
|
||||||
calculate_length(crate::ALGORITHM_OPTIONS_SHA256, 256).unwrap_err();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -325,7 +325,7 @@ fn test_length_not_supported() {
|
||||||
.arg("lorem_ipsum.txt")
|
.arg("lorem_ipsum.txt")
|
||||||
.fails()
|
.fails()
|
||||||
.no_stdout()
|
.no_stdout()
|
||||||
.stderr_is_fixture("unsupported_length.expected")
|
.stderr_contains("--length is only supported with --algorithm=blake2b")
|
||||||
.code_is(1);
|
.code_is(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -337,7 +337,9 @@ fn test_length() {
|
||||||
.arg("lorem_ipsum.txt")
|
.arg("lorem_ipsum.txt")
|
||||||
.arg("alice_in_wonderland.txt")
|
.arg("alice_in_wonderland.txt")
|
||||||
.succeeds()
|
.succeeds()
|
||||||
.stdout_is_fixture("supported_length.expected");
|
.stdout_contains(
|
||||||
|
"BLAKE2b-16 (lorem_ipsum.txt) = 7e2f\nBLAKE2b-16 (alice_in_wonderland.txt) = a546",
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
|
|
|
@ -1,2 +0,0 @@
|
||||||
BLAKE2b-16 (lorem_ipsum.txt) = 7e2f
|
|
||||||
BLAKE2b-16 (alice_in_wonderland.txt) = a546
|
|
|
@ -1,2 +0,0 @@
|
||||||
cksum: invalid length: ‘15’
|
|
||||||
cksum: length is not a multiple of 8
|
|
Loading…
Reference in a new issue