1
Fork 0
mirror of https://github.com/RGBCube/uutils-coreutils synced 2025-07-28 11:37:44 +00:00

timeout: return 125 on invalid time interval args

Exit with status 125 (indicating an error in `timeout` itself) when
the timeout duration is invalid or the "kill after" duration is
invalid.
This commit is contained in:
Jeffrey Finkelstein 2022-03-26 10:22:23 -04:00 committed by Sylvestre Ledru
parent 9a0ef9a81f
commit b34685f8a5
2 changed files with 18 additions and 4 deletions

View file

@ -68,14 +68,18 @@ impl Config {
_ => uucore::signals::signal_by_name_or_value("TERM").unwrap(), _ => uucore::signals::signal_by_name_or_value("TERM").unwrap(),
}; };
let kill_after = options let kill_after = match options.value_of(options::KILL_AFTER) {
.value_of(options::KILL_AFTER) None => None,
.map(|time| uucore::parse_time::from_str(time).unwrap()); Some(kill_after) => match uucore::parse_time::from_str(kill_after) {
Ok(k) => Some(k),
Err(err) => return Err(UUsageError::new(ExitStatus::TimeoutFailed.into(), err)),
},
};
let duration = let duration =
match uucore::parse_time::from_str(options.value_of(options::DURATION).unwrap()) { match uucore::parse_time::from_str(options.value_of(options::DURATION).unwrap()) {
Ok(duration) => duration, Ok(duration) => duration,
Err(err) => return Err(UUsageError::new(1, err)), Err(err) => return Err(UUsageError::new(ExitStatus::TimeoutFailed.into(), err)),
}; };
let preserve_status: bool = options.is_present(options::PRESERVE_STATUS); let preserve_status: bool = options.is_present(options::PRESERVE_STATUS);

View file

@ -16,6 +16,16 @@ fn test_invalid_time_interval() {
new_ucmd!() new_ucmd!()
.args(&["xyz", "sleep", "0"]) .args(&["xyz", "sleep", "0"])
.fails() .fails()
.code_is(125)
.usage_error("invalid time interval 'xyz'");
}
#[test]
fn test_invalid_kill_after() {
new_ucmd!()
.args(&["-k", "xyz", "1", "sleep", "0"])
.fails()
.code_is(125)
.usage_error("invalid time interval 'xyz'"); .usage_error("invalid time interval 'xyz'");
} }