mirror of https://github.com/python/cpython.git
Issue #1726687: time.mktime() will now correctly compute value one
second before epoch. Original patch by Peter Wang, reported by Martin Blais.
This commit is contained in:
parent
7234479580
commit
b7d40d1702
|
@ -339,6 +339,19 @@ def test_negative(self):
|
||||||
self.assertEqual(self.yearstr(-1234), '-1234')
|
self.assertEqual(self.yearstr(-1234), '-1234')
|
||||||
self.assertEqual(self.yearstr(-123456), '-123456')
|
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):
|
class TestAsctimeAccept2dYear(_TestAsctimeYear, _Test2dYear):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
|
@ -694,8 +694,11 @@ time_mktime(PyObject *self, PyObject *tup)
|
||||||
time_t tt;
|
time_t tt;
|
||||||
if (!gettmarg(tup, &buf))
|
if (!gettmarg(tup, &buf))
|
||||||
return NULL;
|
return NULL;
|
||||||
|
buf.tm_wday = -1; /* sentinel; original value ignored */
|
||||||
tt = mktime(&buf);
|
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,
|
PyErr_SetString(PyExc_OverflowError,
|
||||||
"mktime argument out of range");
|
"mktime argument out of range");
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
Loading…
Reference in New Issue