diff --git a/src/uu/dd/src/parseargs.rs b/src/uu/dd/src/parseargs.rs index 42235cabda5..d26528559a4 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(num.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..7801483667a 100644 --- a/tests/by-util/test_dd.rs +++ b/tests/by-util/test_dd.rs @@ -2100,3 +2100,16 @@ fn test_ascii_case_conversion_fallback() { .succeeds(); assert_eq!(result.stdout(), input); } + +#[test] +fn test_bs_not_positive() { + for bs in [-5, 0] { + for bs_param in ["bs", "ibs", "obs", "cbs"] { + new_ucmd!() + .args(&[format!("{bs_param}={bs}")]) + .fails() + .no_stdout() + .code_is(1); + } + } +}