Discussion:
[PATCH] Fix 32-bit overflow in mktime() when time_t is 64-bits long
Freddie Chopin
2018-05-15 19:08:11 UTC
Permalink
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
Corinna Vinschen
2018-05-29 13:27:38 UTC
Permalink
Post by 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
From 08f891e37a850c1229d33460f0846c2cbcc08245 Mon Sep 17 00:00:00 2001
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.
Pushed.


Thanks,
Corinna
--
Corinna Vinschen
Cygwin Maintainer
Red Hat
Loading...