From 1ac42614e3910232604fdb9de7b23ce0752bb635 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Fri, 21 Feb 2014 09:27:17 +0100 Subject: [PATCH] Issue #19748: On AIX, time.mktime() now raises an OverflowError for year outsize range [1902; 2037]. --- Lib/test/test_time.py | 2 +- Misc/NEWS | 10 ++++++++++ Modules/timemodule.c | 11 +++++++++++ 3 files changed, 22 insertions(+), 1 deletion(-) diff --git a/Lib/test/test_time.py b/Lib/test/test_time.py index 4bd1757b9c0..2aa22969d78 100644 --- a/Lib/test/test_time.py +++ b/Lib/test/test_time.py @@ -228,7 +228,7 @@ class TimeTestCase(unittest.TestCase): self.assertEqual(time.ctime(t), 'Sun Sep 16 01:03:52 1973') t = time.mktime((2000, 1, 1, 0, 0, 0, 0, 0, -1)) self.assertEqual(time.ctime(t), 'Sat Jan 1 00:00:00 2000') - for year in [-100, 100, 1000, 2000, 10000]: + for year in [-100, 100, 1000, 2000, 2050, 10000]: try: testval = time.mktime((year, 1, 10) + (0,)*6) except (ValueError, OverflowError): diff --git a/Misc/NEWS b/Misc/NEWS index b4374cc4879..4eaca12e340 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -2,6 +2,16 @@ Python News +++++++++++ +What's New in Python 3.4.1? +=========================== + +Library +------- + +- Issue #19748: On AIX, time.mktime() now raises an OverflowError for year + outsize range [1902; 2037]. + + What's New in Python 3.4.0 release candidate 2? =============================================== diff --git a/Modules/timemodule.c b/Modules/timemodule.c index 44540ea9197..d0917a40730 100644 --- a/Modules/timemodule.c +++ b/Modules/timemodule.c @@ -823,7 +823,18 @@ time_mktime(PyObject *self, PyObject *tup) time_t tt; if (!gettmarg(tup, &buf)) return NULL; +#ifdef _AIX + /* year < 1902 or year > 2037 */ + if (buf.tm_year < 2 || buf.tm_year > 137) { + /* Issue #19748: On AIX, mktime() doesn't report overflow error for + * timestamp < -2^31 or timestamp > 2**31-1. */ + PyErr_SetString(PyExc_OverflowError, + "mktime argument out of range"); + return NULL; + } +#else buf.tm_wday = -1; /* sentinel; original value ignored */ +#endif tt = mktime(&buf); /* Return value of -1 does not necessarily mean an error, but tm_wday * cannot remain set to -1 if mktime succeeded. */