diff --git "a/.\\Python-3.5.0rc1/Lib/test/test_time.py" "b/.\\Python-3.5.0rc1/Lib/test/test_time.py" index 6334e02..3f571a0 100644 --- "a/.\\Python-3.5.0rc1/Lib/test/test_time.py" +++ "b/.\\Python-3.5.0rc1/Lib/test/test_time.py" @@ -174,6 +174,12 @@ class TimeTestCase(unittest.TestCase): def test_strftime_bounding_check(self): self._bounds_checking(lambda tup: time.strftime('', tup)) + def test_strftime_format_check(self): + for x in [ '', 'A', '%A', '%AA' ]: + for y in range(0x0, 0x10): + for z in [ '%', 'A%', 'AA%', '%A%', 'A%A%', '%#' ]: + self.assertRaises(ValueError, time.strftime, x * y + z) + def test_default_values_for_zero(self): # Make sure that using all zeros uses the proper default # values. No test for daylight savings since strftime() does diff --git "a/.\\Python-3.5.0rc1/Modules/timemodule.c" "b/.\\Python-3.5.0rc1/Modules/timemodule.c" index 197d2c0..bdc21ef 100644 --- "a/.\\Python-3.5.0rc1/Modules/timemodule.c" +++ "b/.\\Python-3.5.0rc1/Modules/timemodule.c" @@ -623,6 +623,12 @@ time_strftime(PyObject *self, PyObject *args) Py_DECREF(format); return NULL; } + else if (outbuf[1] == NULL) + { + PyErr_SetString(PyExc_ValueError, "incomplete format"); + Py_DECREF(format); + return NULL; + } } #elif (defined(_AIX) || defined(sun)) && defined(HAVE_WCSFTIME) for(outbuf = wcschr(fmt, '%'); @@ -635,6 +641,9 @@ time_strftime(PyObject *self, PyObject *args) PyErr_SetString(PyExc_ValueError, "format %y requires year >= 1900 on AIX"); return NULL; + } else if (outbuf[1] == NULL) { + PyErr_SetString(PyExc_ValueError, "incomplete format"); + return NULL; } } #endif