From ce2a026ff8d2979dbbaece541046a42af44cb53f Mon Sep 17 00:00:00 2001 From: Jeffrey Finkelstein Date: Fri, 18 Mar 2022 22:31:02 -0400 Subject: [PATCH] sleep: use Duration::saturating_add to sum times Use `Duration::saturating_add()` to avoid a panic due to overflow when adding the durations provided as command-line arguments. --- src/uu/sleep/src/sleep.rs | 2 +- tests/by-util/test_sleep.rs | 10 ++++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/src/uu/sleep/src/sleep.rs b/src/uu/sleep/src/sleep.rs index 0c8de143e..87cd15417 100644 --- a/src/uu/sleep/src/sleep.rs +++ b/src/uu/sleep/src/sleep.rs @@ -63,7 +63,7 @@ fn sleep(args: &[&str]) -> UResult<()> { args.iter().try_fold( Duration::new(0, 0), |result, arg| match uucore::parse_time::from_str(&arg[..]) { - Ok(m) => Ok(m + result), + Ok(m) => Ok(m.saturating_add(result)), Err(f) => Err(USimpleError::new(1, f)), }, )?; diff --git a/tests/by-util/test_sleep.rs b/tests/by-util/test_sleep.rs index 91b0cd02b..d33143ae0 100644 --- a/tests/by-util/test_sleep.rs +++ b/tests/by-util/test_sleep.rs @@ -131,3 +131,13 @@ fn test_dont_overflow() { .no_stderr() .no_stdout(); } + +// #[test] +#[allow(dead_code)] +fn test_sum_overflow() { + new_ucmd!() + .args(&["100000000000000d", "100000000000000d", "100000000000000d"]) + .succeeds() + .no_stderr() + .no_stdout(); +}