From 17811984c9cf95360bc6c901740fd024a177d4bf Mon Sep 17 00:00:00 2001 From: Greg Shuflin Date: Mon, 13 Jul 2020 19:18:49 -0700 Subject: [PATCH] Add check for invalid concrete time dates --- src/rust/engine/Cargo.lock | 1 + src/rust/engine/concrete_time/Cargo.toml | 1 + src/rust/engine/concrete_time/src/lib.rs | 9 ++++++++- 3 files changed, 10 insertions(+), 1 deletion(-) diff --git a/src/rust/engine/Cargo.lock b/src/rust/engine/Cargo.lock index db64c030bbc0..d61bfeda060c 100644 --- a/src/rust/engine/Cargo.lock +++ b/src/rust/engine/Cargo.lock @@ -379,6 +379,7 @@ dependencies = [ name = "concrete_time" version = "0.0.1" dependencies = [ + "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", "protobuf 2.0.6 (git+https://github.com/pantsbuild/rust-protobuf?rev=171611c33ec92f07e1b7107327f6d0139a7afebf)", "serde 1.0.111 (registry+https://github.com/rust-lang/crates.io-index)", "serde_derive 1.0.111 (registry+https://github.com/rust-lang/crates.io-index)", diff --git a/src/rust/engine/concrete_time/Cargo.toml b/src/rust/engine/concrete_time/Cargo.toml index 1772d06aa89a..86b557e637a9 100644 --- a/src/rust/engine/concrete_time/Cargo.toml +++ b/src/rust/engine/concrete_time/Cargo.toml @@ -9,3 +9,4 @@ publish = false protobuf = { version = "2.0.6", features = ["with-bytes"] } serde_derive = "1.0.98" serde = "1.0.98" +log = "0.4" diff --git a/src/rust/engine/concrete_time/src/lib.rs b/src/rust/engine/concrete_time/src/lib.rs index 824700c5423e..7ee9a83bd2b3 100644 --- a/src/rust/engine/concrete_time/src/lib.rs +++ b/src/rust/engine/concrete_time/src/lib.rs @@ -102,7 +102,14 @@ impl TimeSpan { end: &std::time::SystemTime, ) -> TimeSpan { let start = Self::since_epoch(start); - let duration = Self::since_epoch(end) - start; + let end = Self::since_epoch(end); + let duration = match end.checked_sub(start) { + Some(d) => d, + None => { + log::warn!("Invalid TimeSpan - start: {:?}, end: {:?}", start, end); + std::time::Duration::new(0, 0) + } + }; TimeSpan { start: start.into(), duration: duration.into(),