diff options
| author | bors <bors@rust-lang.org> | 2016-05-06 00:58:59 -0700 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2016-05-06 00:58:59 -0700 |
| commit | 6301e22e157ba676b0b2477f6670ab8f954767a8 (patch) | |
| tree | e6daa3e2a6282cb762813090ec5929851e319213 | |
| parent | 68d399d7e3fc96f08744fc3fb057e17b8b365308 (diff) | |
| parent | b25bb53043a92dc343ebdf9f4e71fefffe4fee2a (diff) | |
| download | rust-6301e22e157ba676b0b2477f6670ab8f954767a8.tar.gz rust-6301e22e157ba676b0b2477f6670ab8f954767a8.zip | |
Auto merge of #33072 - tbu-:pr_duration_new_overflow, r=alexcrichton
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.
| -rw-r--r-- | src/libstd/time/duration.rs | 8 |
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 } } |
