From 3e7b4242afc10f225b557e3c0b0e355ef5c4de1e Mon Sep 17 00:00:00 2001 From: Ibrahim Burak Yorulmaz Date: Mon, 6 Apr 2026 04:08:15 +0200 Subject: [PATCH 1/2] dd: exit when bs/ibs/obs/cbs isn't positive --- src/uu/dd/src/parseargs.rs | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) 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())) } From ef02de9fb67490360636394d1b0d2bd4d323e221 Mon Sep 17 00:00:00 2001 From: Ibrahim Burak Yorulmaz Date: Mon, 6 Apr 2026 04:08:35 +0200 Subject: [PATCH 2/2] tests/dd: test supplying non-positive bs/ibs/cbs/obs --- tests/by-util/test_dd.rs | 14 ++++++++++++++ 1 file changed, 14 insertions(+) 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")); + } + } +}