mirror of
https://github.com/uutils/coreutils.git
synced 2026-06-10 15:48:22 -07:00
date: fix panic when input will cause overflow (#5160)
* fix issue 5149 * fix clippy style issue * fix spell issue * address comment * address comments * fix cspell
This commit is contained in:
+14
-2
@@ -227,8 +227,20 @@ pub fn uumain(args: impl uucore::Args) -> UResult<()> {
|
||||
DateSource::Human(relative_time) => {
|
||||
// Get the current DateTime<FixedOffset> for things like "1 year ago"
|
||||
let current_time = DateTime::<FixedOffset>::from(Local::now());
|
||||
let iter = std::iter::once(Ok(current_time + relative_time));
|
||||
Box::new(iter)
|
||||
// double check the result is overflow or not of the current_time + relative_time
|
||||
// it may cause a panic of chrono::datetime::DateTime add
|
||||
match current_time.checked_add_signed(relative_time) {
|
||||
Some(date) => {
|
||||
let iter = std::iter::once(Ok(date));
|
||||
Box::new(iter)
|
||||
}
|
||||
None => {
|
||||
return Err(USimpleError::new(
|
||||
1,
|
||||
format!("invalid date {}", relative_time),
|
||||
));
|
||||
}
|
||||
}
|
||||
}
|
||||
DateSource::File(ref path) => {
|
||||
if path.is_dir() {
|
||||
|
||||
@@ -395,3 +395,12 @@ fn test_invalid_date_string() {
|
||||
.no_stdout()
|
||||
.stderr_contains("invalid date");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_date_overflow() {
|
||||
new_ucmd!()
|
||||
.arg("-d68888888888888sms")
|
||||
.fails()
|
||||
.no_stdout()
|
||||
.stderr_contains("invalid date");
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user