[PATCH] Fix 32-bit overflow in mktime() when time_t is 64-bits long

classic Classic list List threaded Threaded
2 messages Options
Reply | Threaded
Open this post in threaded view
|

[PATCH] Fix 32-bit overflow in mktime() when time_t is 64-bits long

Freddie Chopin
Hello!

Currently when time_t is configured to be 64-bits long, mktime() will
fail for years above 2038. For example converting 01.01.2040 00:00:00
gives -2085978496 instead of the expected 2208988800. Patch which fixes
this behaviour is attached.

I'll try to post an improved version of mktime() in a few days.

Regards,
FCh

0001-Fix-32-bit-overflow-in-mktime-when-time_t-is-64-bits.patch (1K) Download Attachment
Reply | Threaded
Open this post in threaded view
|

Re: [PATCH] Fix 32-bit overflow in mktime() when time_t is 64-bits long

Corinna Vinschen
On May 15 21:08, Freddie Chopin wrote:

> Hello!
>
> Currently when time_t is configured to be 64-bits long, mktime() will
> fail for years above 2038. For example converting 01.01.2040 00:00:00
> gives -2085978496 instead of the expected 2208988800. Patch which fixes
> this behaviour is attached.
>
> I'll try to post an improved version of mktime() in a few days.
>
> Regards,
> FCh

> From 08f891e37a850c1229d33460f0846c2cbcc08245 Mon Sep 17 00:00:00 2001
> From: Freddie Chopin <[hidden email]>
> Date: Tue, 15 May 2018 20:58:08 +0200
> Subject: [PATCH] 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 <[hidden email]>
Pushed.


Thanks,
Corinna

--
Corinna Vinschen
Cygwin Maintainer
Red Hat

signature.asc (849 bytes) Download Attachment