Index: Modules/timemodule.c =================================================================== --- Modules/timemodule.c (révision 70478) +++ Modules/timemodule.c (copie de travail) @@ -619,8 +619,11 @@ time_t tt; if (!gettmarg(tup, &buf)) return NULL; + + /* invalid value that will not be changed if there is an error. */ + buf.tm_wday = 42; tt = mktime(&buf); - if (tt == (time_t)(-1)) { + if ((tt == (time_t)(-1)) && (buf.tm_wday == 42)) { PyErr_SetString(PyExc_OverflowError, "mktime argument out of range"); return NULL; Index: Lib/test/test_time.py =================================================================== --- Lib/test/test_time.py (révision 70478) +++ Lib/test/test_time.py (copie de travail) @@ -218,6 +218,19 @@ t1 = time.mktime(lt1) self.assert_(0 <= (t1-t0) < 0.2) + def test_mktime(self): + for epoch in (-2, -1, 0, 1): + try: + timetuple = time.localtime(epoch) + mktime_epoch = time.mktime(timetuple) + except OverflowError: + if epoch == -2: + # Negative epoch is not supported on some OS like Windows + break + else: + raise + self.assertEquals(mktime_epoch, float(epoch)) + def test_main(): test_support.run_unittest(TimeTestCase)