Issue 15750: test_localtime_daylight_false_dst_true raises OverflowError: mktime argument out of range (original) (raw)

Created on 2012-08-21 05:15 by trent, last changed 2022-04-11 14:57 by admin. This issue is now closed.

Messages (10)
msg168741 - (view) Author: Trent Nelson (trent) * (Python committer) Date: 2012-08-21 05:15
On the FreeBSD 8.2 build slave: ====================================================================== ERROR: test_localtime_daylight_false_dst_true (test_utils.LocaltimeTests) ---------------------------------------------------------------------- Traceback (most recent call last): File "/home/buildslave/python/3.x.snakebite-freebsd82-amd64/build/Lib/test/test_email/test_utils.py", line 86, in test_localtime_daylight_false_dst_true t1 = utils.localtime(t0, isdst=1) File "/home/buildslave/python/3.x.snakebite-freebsd82-amd64/build/Lib/email/utils.py", line 397, in localtime seconds = time.mktime(tm) OverflowError: mktime argument out of range ====================================================================== ERROR: test_localtime_daylight_true_dst_true (test_utils.LocaltimeTests) ---------------------------------------------------------------------- Traceback (most recent call last): File "/home/buildslave/python/3.x.snakebite-freebsd82-amd64/build/Lib/test/test_email/test_utils.py", line 79, in test_localtime_daylight_true_dst_true t1 = utils.localtime(t0, isdst=1) File "/home/buildslave/python/3.x.snakebite-freebsd82-amd64/build/Lib/email/utils.py", line 397, in localtime seconds = time.mktime(tm) OverflowError: mktime argument out of range ---------------------------------------------------------------------- Placeholder issue, haven't looked into it in detail yet.
msg168743 - (view) Author: Trent Nelson (trent) * (Python committer) Date: 2012-08-21 05:31
Narrowed it down to the following snippet: >>> time.mktime((2012, 3, 12, 1, 1, 0, 0, 72, -1)) 1331514060.0 [70780 refs] >>> time.mktime((2012, 3, 12, 1, 1, 0, 0, 72, 1)) Traceback (most recent call last): File "", line 1, in OverflowError: mktime argument out of range [70832 refs] On all my FreeBSD boxes, that latter invocation always raises an OverflowError.
msg168747 - (view) Author: Trent Nelson (trent) * (Python committer) Date: 2012-08-21 06:47
All my servers are set to use UTC, which affects how FreeBSD (and other BSDs) treat the isdst param in struct tm in mktime: #include <stdio.h> #include <string.h> #include <time.h> int main(int argc, char **argv) { struct tm tm1, tm2; time_t t1, t2; memset((void *)&tm1, 0, sizeof(struct tm)); memset((void *)&tm2, 0, sizeof(struct tm)); // UTC setenv("TZ", "UTC", 1); tzset(); tm1.tm_sec = 0; tm1.tm_min = 1; tm1.tm_hour = 1; tm1.tm_mday = 12; tm1.tm_mon = 3; tm1.tm_year = 2012; tm1.tm_wday = -1; tm1.tm_yday = -1; tm1.tm_isdst = 1; t1 = mktime(&tm1); printf("t1 (UTC): %d\n", t1); // EST setenv("TZ", "CET", 1); tzset(); tm2.tm_sec = 0; tm2.tm_min = 1; tm2.tm_hour = 1; tm2.tm_mday = 12; tm2.tm_mon = 3; tm2.tm_year = 2012; tm2.tm_wday = -1; tm2.tm_yday = -1; tm2.tm_isdst = 1; t2 = mktime(&tm2); printf("t2 (CET): %d\n", t2); return 0; } % gcc -g test_mktime.c -o test_time && ./test_time t1 (UTC): -1 t2 (CET): 1162787116 The two tests causing problems are Lib/test/test_email/test_utils.py: def test_localtime_daylight_false_dst_false(self): test.support.patch(self, time, 'daylight', False) t0 = datetime.datetime(2012, 3, 12, 1, 1) t1 = utils.localtime(t0, isdst=-1) t2 = utils.localtime(t1) self.assertEqual(t1, t2) def test_localtime_daylight_true_dst_true(self): test.support.patch(self, time, 'daylight', True) t0 = datetime.datetime(2012, 3, 12, 1, 1) t1 = utils.localtime(t0, isdst=1) t2 = utils.localtime(t1) self.assertEqual(t1, t2) In order for those tests to work on a *BSD server with a TZ set to UTC, TZ is going to need to be set to something else first, and then tzset() called. Otherwise, mktime() will return -1, which triggers the overflow error.
msg168755 - (view) Author: STINNER Victor (vstinner) * (Python committer) Date: 2012-08-21 11:40
email.utils.localtime() may reuse the new datetime.datetime.timestamp() method, except that this method doesn't support setting isdst (it is set to -1).
msg168760 - (view) Author: R. David Murray (r.david.murray) * (Python committer) Date: 2012-08-21 12:10
This is 3.3 only, as those tests and the function they test were only introduced in 3.3.
msg168836 - (view) Author: R. David Murray (r.david.murray) * (Python committer) Date: 2012-08-22 02:03
So you are saying that if the current timezone is UTC, FreeBSD's mktime just arbitrarily returns -1 for any time passed to it with the 'guess the DST flag' value set for is_dst? And for is_dst set to 1 as well? This isn't mentioned on the FreeBSD man page for mktime, as far as I can see. If this is the real problem, we can fix it with the support.run_with_tz decorator, but...compiling and running your program on my linux box, I get -1 in both prints.
msg168839 - (view) Author: Alexander Belopolsky (belopolsky) * (Python committer) Date: 2012-08-22 02:13
> So you are saying that if the current timezone is UTC, FreeBSD's mktime > just arbitrarily returns -1 for any time passed to it with the 'guess > the DST flag' value set for is_dst? I don't know about FreeBSD, but I recall seeing a comment in mxDT sources that some systems only allow isdst flag of -1 in mktime. Adding Marc-Andre.
msg221856 - (view) Author: Mark Lawrence (BreamoreBoy) * Date: 2014-06-29 16:04
Are these tests still failing, can this issue be closed as "out of date" or what?
msg221857 - (view) Author: STINNER Victor (vstinner) * (Python committer) Date: 2014-06-29 16:07
I don't see the issue anymore, I guess that it was fixed.
msg330442 - (view) Author: STINNER Victor (vstinner) * (Python committer) Date: 2018-11-26 15:49
I mark this issue as a duplicate of bpo-35317.
History
Date User Action Args
2022-04-11 14:57:35 admin set github: 59955
2018-11-26 15:49:11 vstinner set superseder: test_email: test_localtime_daylight_false_dst_true() fails depending on the timezoneresolution: fixed -> duplicatemessages: +
2014-06-29 16:07:03 vstinner set status: open -> closedresolution: fixedmessages: +
2014-06-29 16:04:19 BreamoreBoy set nosy: + BreamoreBoymessages: + versions: + Python 3.4, Python 3.5, - Python 3.3
2012-08-22 02:13:03 belopolsky set nosy: + lemburgmessages: +
2012-08-22 02:03:51 r.david.murray set messages: +
2012-08-21 12:10:05 r.david.murray set versions: - Python 3.2nosy: + barry, r.david.murraymessages: + components: + email
2012-08-21 11:40:17 vstinner set messages: +
2012-08-21 11:38:58 vstinner set nosy: + belopolsky, vstinner
2012-08-21 06:47:50 trent set messages: +
2012-08-21 05:31:58 trent set messages: +
2012-08-21 05:15:23 trent create