diff --git a/src/uu/dd/src/parseargs.rs b/src/uu/dd/src/parseargs.rs index 42235cabda5..c1fcd811732 100644 --- a/src/uu/dd/src/parseargs.rs +++ b/src/uu/dd/src/parseargs.rs @@ -320,8 +320,12 @@ impl Parser { } fn parse_bytes(arg: &str, val: &str) -> Result { - parse_bytes_with_opt_multiplier(val)? - .try_into() + let num = parse_bytes_with_opt_multiplier(val)?; + + if num == 0 { + return Err(ParseError::InvalidNumber(val.to_string())); + } + num.try_into() .map_err(|_| ParseError::BsOutOfRange(arg.to_string())) } diff --git a/tests/by-util/test_dd.rs b/tests/by-util/test_dd.rs index d2dfb7bda2c..f38d770c4b8 100644 --- a/tests/by-util/test_dd.rs +++ b/tests/by-util/test_dd.rs @@ -2100,3 +2100,17 @@ fn test_ascii_case_conversion_fallback() { .succeeds(); assert_eq!(result.stdout(), input); } + +#[test] +fn test_bs_not_positive() { + for bs in [-5, 0, 0x0] { + for bs_param in ["bs", "ibs", "obs", "cbs"] { + new_ucmd!() + .args(&[format!("{bs_param}={bs}")]) + .fails() + .no_stdout() + .code_is(1) + .stderr_is(format!("dd: invalid number: ‘{bs}’\n")); + } + } +}