about summary refs log tree commit diff
path: root/src/libstd/time
diff options
context:
space:
mode:
authorTobias Bucher <tobiasbucher5991@gmail.com>2016-04-18 12:31:16 +0200
committerTobias Bucher <tobiasbucher5991@gmail.com>2016-04-18 12:41:30 +0200
commitb25bb53043a92dc343ebdf9f4e71fefffe4fee2a (patch)
tree7064a85f86b912eb5b6749f7f55d72a515a08a42 /src/libstd/time
parent63760acf31e605c8a91bb5cbcbcb4bfb95435e48 (diff)
downloadrust-b25bb53043a92dc343ebdf9f4e71fefffe4fee2a.tar.gz
rust-b25bb53043a92dc343ebdf9f4e71fefffe4fee2a.zip
Panic on overflow in `Duration::new` constructor
Panicking on overflow is also done for `+`, and it replaces the
currently incorrect overflow behavior of wrapping around, which does not
make sense for `Duration`s.
Diffstat (limited to 'src/libstd/time')
-rw-r--r--src/libstd/time/duration.rs8
1 files changed, 7 insertions, 1 deletions
diff --git a/src/libstd/time/duration.rs b/src/libstd/time/duration.rs
index 8a50f07e6d8..79bbe5e7daa 100644
--- a/src/libstd/time/duration.rs
+++ b/src/libstd/time/duration.rs
@@ -51,10 +51,16 @@ impl Duration {
     ///
     /// If the nanoseconds is greater than 1 billion (the number of nanoseconds
     /// in a second), then it will carry over into the seconds provided.
+    ///
+    /// # Panics
+    ///
+    /// This constructor will panic if the carry from the nanoseconds overflows
+    /// the seconds counter.
     #[stable(feature = "duration", since = "1.3.0")]
     #[inline]
     pub fn new(secs: u64, nanos: u32) -> Duration {
-        let secs = secs + (nanos / NANOS_PER_SEC) as u64;
+        let secs = secs.checked_add((nanos / NANOS_PER_SEC) as u64)
+            .expect("overflow in Duration::new");
         let nanos = nanos % NANOS_PER_SEC;
         Duration { secs: secs, nanos: nanos }
     }