From 0943b1668d9dcf486a77a97d6c28ccd64ffed609 Mon Sep 17 00:00:00 2001 From: Alex Crichton Date: Tue, 15 Mar 2016 15:19:11 -0700 Subject: [PATCH] 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 --- src/libstd/sys/unix/time.rs | 8 ++++---- 1 file 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 { 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) })