handle duration overflow error (#2616)

* handle duration overflow error

* handle checked_add_signed result
This commit is contained in:
Samuel Vanderwaal 2020-10-08 17:51:47 -08:00 committed by GitHub
parent 973a8ee8f3
commit 2b076369e0
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 32 additions and 3 deletions

View file

@ -199,9 +199,13 @@ pub fn compute_values(
let result = match operator {
Operator::Plus => {
// FIXME: Not sure if I could do something better with the Span.
let y = Primitive::into_chrono_duration(rhs.clone(), Span::unknown())
.expect("Could not convert nushell Duration into chrono Duration.");
Ok(x.checked_add_signed(y).expect("Data overflow."))
match Primitive::into_chrono_duration(rhs.clone(), Span::unknown()) {
Ok(y) => match x.checked_add_signed(y) {
Some(value) => Ok(value),
None => Err(("Date", "Duration and date addition overflow")),
},
Err(_) => Err(("Date", "Duration overflow")),
}
}
_ => Err((left.type_name(), right.type_name())),
}?;

View file

@ -586,6 +586,31 @@ fn table_with_commas() {
assert_eq!(actual.out, "141");
}
#[test]
fn duration_overflow() {
let actual = nu!(
cwd: ".", pipeline(
r#"
ls | get modified | = $it + 1000000000000000000yr
"#)
);
assert!(actual.err.contains("Duration overflow"));
}
#[test]
fn date_and_duration_overflow() {
let actual = nu!(
cwd: ".", pipeline(
r#"
ls | get modified | = $it + 1000000yr
"#)
);
// assert_eq!(actual.err, "overflow");
assert!(actual.err.contains("Duration and date addition overflow"));
}
mod parse {
use nu_test_support::nu;