From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 106005 invoked by alias); 29 May 2018 13:27:17 -0000 Mailing-List: contact newlib-cvs-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: newlib-cvs-owner@sourceware.org Received: (qmail 105915 invoked by uid 9078); 29 May 2018 13:27:15 -0000 Date: Tue, 29 May 2018 13:27:00 -0000 Message-ID: <20180529132715.105912.qmail@sourceware.org> Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: Corinna Vinschen To: newlib-cvs@sourceware.org Subject: [newlib-cygwin] Fix 32-bit overflow in mktime() when time_t is 64-bits long X-Act-Checkin: newlib-cygwin X-Git-Author: Freddie Chopin X-Git-Refname: refs/heads/master X-Git-Oldrev: e928275566ab8168c078eadee2043a002bd9352d X-Git-Newrev: 3305f3557064a3cc981e3566959d7833bb81e192 X-SW-Source: 2018-q2/txt/msg00004.txt.bz2 https://sourceware.org/git/gitweb.cgi?p=newlib-cygwin.git;h=3305f3557064a3cc981e3566959d7833bb81e192 commit 3305f3557064a3cc981e3566959d7833bb81e192 Author: Freddie Chopin Date: Tue May 15 20:58:08 2018 +0200 Fix 32-bit overflow in mktime() when time_t is 64-bits long When converting number of days since epoch (32-bits) to seconds, calculations using 32-bit `long` overflow for years above 2038. Solve this by casting number of days to `time_t` just before final multiplication. Signed-off-by: Freddie Chopin Diff: --- newlib/libc/time/mktime.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/newlib/libc/time/mktime.c b/newlib/libc/time/mktime.c index 9bcef32..0203259 100644 --- a/newlib/libc/time/mktime.c +++ b/newlib/libc/time/mktime.c @@ -188,7 +188,7 @@ mktime (struct tm *tim_p) } /* compute total seconds */ - tim += (days * _SEC_IN_DAY); + tim += (time_t)days * _SEC_IN_DAY; TZ_LOCK;