Kaydet (Commit) 373602fa authored tarafından Steve Dower's avatar Steve Dower

Issue #24917: time_strftime() Buffer Over-read. Patch by John Leitch.

üst 7d293ee9
...@@ -174,6 +174,12 @@ class TimeTestCase(unittest.TestCase): ...@@ -174,6 +174,12 @@ class TimeTestCase(unittest.TestCase):
def test_strftime_bounding_check(self): def test_strftime_bounding_check(self):
self._bounds_checking(lambda tup: time.strftime('', tup)) 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): def test_default_values_for_zero(self):
# Make sure that using all zeros uses the proper default # Make sure that using all zeros uses the proper default
# values. No test for daylight savings since strftime() does # values. No test for daylight savings since strftime() does
......
...@@ -10,6 +10,8 @@ Release date: 2015-09-06 ...@@ -10,6 +10,8 @@ Release date: 2015-09-06
Core and Builtins Core and Builtins
----------------- -----------------
- Issue #24917: time_strftime() Buffer Over-read. Patch by John Leitch.
- Issue #24912: Prevent __class__ assignment to immutable built-in objects. - Issue #24912: Prevent __class__ assignment to immutable built-in objects.
- Issue #24975: Fix AST compilation for PEP 448 syntax. - Issue #24975: Fix AST compilation for PEP 448 syntax.
......
...@@ -623,6 +623,12 @@ time_strftime(PyObject *self, PyObject *args) ...@@ -623,6 +623,12 @@ time_strftime(PyObject *self, PyObject *args)
Py_DECREF(format); Py_DECREF(format);
return NULL; return NULL;
} }
else if (outbuf[1] == '\0')
{
PyErr_SetString(PyExc_ValueError, "Incomplete format string");
Py_DECREF(format);
return NULL;
}
} }
#elif (defined(_AIX) || defined(sun)) && defined(HAVE_WCSFTIME) #elif (defined(_AIX) || defined(sun)) && defined(HAVE_WCSFTIME)
for(outbuf = wcschr(fmt, '%'); for(outbuf = wcschr(fmt, '%');
...@@ -636,6 +642,12 @@ time_strftime(PyObject *self, PyObject *args) ...@@ -636,6 +642,12 @@ time_strftime(PyObject *self, PyObject *args)
"format %y requires year >= 1900 on AIX"); "format %y requires year >= 1900 on AIX");
return NULL; return NULL;
} }
else if (outbuf[1] == '\0')
{
PyErr_SetString(PyExc_ValueError, "Incomplete format string");
Py_DECREF(format);
return NULL;
}
} }
#endif #endif
......
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