uucore: error on negative interval in parse_time

Return an error when a negative interval is provided as the argument
to `uucore::parse_time::from_str()`, since a `Duration` should only be
non-negative.
This commit is contained in:
Jeffrey Finkelstein
2022-03-21 21:11:31 -04:00
parent 5eeac5881a
commit f4af226820
3 changed files with 25 additions and 0 deletions
+9
View File
@@ -63,6 +63,10 @@ pub fn from_str(string: &str) -> Result<Duration, String> {
.parse::<f64>()
.map_err(|e| format!("invalid time interval {}: {}", string.quote(), e))?;
if num < 0. {
return Err(format!("invalid time interval {}", string.quote()));
}
const NANOS_PER_SEC: u32 = 1_000_000_000;
let whole_secs = num.trunc();
let nanos = (num.fract() * (NANOS_PER_SEC as f64)).trunc();
@@ -105,4 +109,9 @@ mod tests {
fn test_error_invalid_magnitude() {
assert!(from_str("12abc3s").is_err());
}
#[test]
fn test_negative() {
assert!(from_str("-1").is_err());
}
}
+8
View File
@@ -149,3 +149,11 @@ fn test_sum_overflow() {
.no_stderr()
.no_stdout();
}
#[test]
fn test_negative_interval() {
new_ucmd!()
.args(&["--", "-1"])
.fails()
.usage_error("invalid time interval '-1'");
}
+8
View File
@@ -89,3 +89,11 @@ fn test_dont_overflow() {
.no_stderr()
.no_stdout();
}
#[test]
fn test_negative_interval() {
new_ucmd!()
.args(&["--", "-1", "sleep", "0"])
.fails()
.usage_error("invalid time interval '-1'");
}