Commit b7d40d17 authored by Alexander Belopolsky's avatar Alexander Belopolsky

Issue #1726687: time.mktime() will now correctly compute value one

second before epoch.  Original patch by Peter Wang, reported by Martin
Blais.
parent 72344795
......@@ -339,6 +339,19 @@ class _Test4dYear(_BaseYearTest):
self.assertEqual(self.yearstr(-1234), '-1234')
self.assertEqual(self.yearstr(-123456), '-123456')
def test_mktime(self):
# Issue #1726687
for t in (-2, -1, 0, 1):
try:
tt = time.localtime(t)
except (OverflowError, ValueError):
pass
self.assertEqual(time.mktime(tt), t)
# Hopefully year = -1 is enough to make OS mktime fail
self.assertRaises(OverflowError, time.mktime,
(-1, 1, 1, 0, 0, 0, -1, -1, -1))
class TestAsctimeAccept2dYear(_TestAsctimeYear, _Test2dYear):
pass
......
......@@ -694,8 +694,11 @@ time_mktime(PyObject *self, PyObject *tup)
time_t tt;
if (!gettmarg(tup, &buf))
return NULL;
buf.tm_wday = -1; /* sentinel; original value ignored */
tt = mktime(&buf);
if (tt == (time_t)(-1)) {
/* Return value of -1 does not necessarily mean an error, but tm_wday
* cannot remain set to -1 if mktime succedded. */
if (tt == (time_t)(-1) && buf.tm_wday == -1) {
PyErr_SetString(PyExc_OverflowError,
"mktime argument out of range");
return NULL;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment