about summary refs log tree commit diff
diff options
context:
space:
mode:
authorbors <bors@rust-lang.org>2016-03-16 02:58:35 -0700
committerbors <bors@rust-lang.org>2016-03-16 02:58:35 -0700
commit9afa5a13cc258315d012d5e3a42740e4ac0dff2a (patch)
tree40f05f8961ea10fe5fb342dc3f797c3809ecd77e
parent3317cc9d758faf9b875122217b0d765619dbcd07 (diff)
parent0943b1668d9dcf486a77a97d6c28ccd64ffed609 (diff)
downloadrust-9afa5a13cc258315d012d5e3a42740e4ac0dff2a.tar.gz
rust-9afa5a13cc258315d012d5e3a42740e4ac0dff2a.zip
Auto merge of #32273 - alexcrichton:fix-time-sub, r=aturon
std: Fix overflow when subtracting Instant

This code was currently only exercised on OSX, but this applies the same method
of subtraction used on Linux which doesn't have the same overflow issues.

Note that this currently includes no tests, but that's because this is only
visible with debug assertions enabled. Soon, however, I'll enable debug
assertions on all auto builds on the bots so we should get testing for this.

Closes #32268
-rw-r--r--src/libstd/sys/unix/time.rs8
1 files changed, 4 insertions, 4 deletions
diff --git a/src/libstd/sys/unix/time.rs b/src/libstd/sys/unix/time.rs
index dd248416f84..1444cf31e85 100644
--- a/src/libstd/sys/unix/time.rs
+++ b/src/libstd/sys/unix/time.rs
@@ -88,11 +88,11 @@ mod inner {
                         -> Result<Duration, Duration> {
             if self >= other {
                 Ok(if self.t.tv_usec >= other.t.tv_usec {
-                    Duration::new(self.t.tv_sec as u64 - other.t.tv_sec as u64,
-                                  (self.t.tv_usec as u32 -
-                                   other.t.tv_usec as u32) * 1000)
+                    Duration::new((self.t.tv_sec - other.t.tv_sec) as u64,
+                                  ((self.t.tv_usec -
+                                    other.t.tv_usec) as u32) * 1000)
                 } else {
-                    Duration::new(self.t.tv_sec as u64 - 1 - other.t.tv_sec as u64,
+                    Duration::new((self.t.tv_sec - 1 - other.t.tv_sec) as u64,
                                   (self.t.tv_usec as u32 + (USEC_PER_SEC as u32) -
                                    other.t.tv_usec as u32) * 1000)
                 })