From 3c81b68ca399f16077c159e838da38968494f3a7 Mon Sep 17 00:00:00 2001 From: Tomas Weinfurt Date: Wed, 9 Jan 2019 02:53:35 -0800 Subject: fix DateTime overflow on ARM32 (#21902) --- src/System.Private.CoreLib/shared/System/DateTime.cs | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) (limited to 'src') diff --git a/src/System.Private.CoreLib/shared/System/DateTime.cs b/src/System.Private.CoreLib/shared/System/DateTime.cs index c0210b0741..a94171f133 100644 --- a/src/System.Private.CoreLib/shared/System/DateTime.cs +++ b/src/System.Private.CoreLib/shared/System/DateTime.cs @@ -455,10 +455,12 @@ namespace System // time units to this DateTime. private DateTime Add(double value, int scale) { - long millis = (long)(value * scale + (value >= 0 ? 0.5 : -0.5)); - if (millis <= -MaxMillis || millis >= MaxMillis) - throw new ArgumentOutOfRangeException(nameof(value), SR.ArgumentOutOfRange_AddValue); - return AddTicks(millis * TicksPerMillisecond); + double millis_double = value * (double)scale + (value >= 0 ? 0.5 : -0.5); + + if (millis_double <= (double)-MaxMillis || millis_double >= (double)MaxMillis) + throw new ArgumentOutOfRangeException(nameof(value), SR.ArgumentOutOfRange_AddValue); + + return AddTicks((long)millis_double * TicksPerMillisecond); } // Returns the DateTime resulting from adding a fractional number of -- cgit v1.2.3