mirror of
https://github.com/python/cpython.git
synced 2025-12-04 00:30:19 +00:00
Issue #24917: time_strftime() Buffer Over-read. Patch by John Leitch.
This commit is contained in:
parent
7d293ee97d
commit
373602fa3f
3 changed files with 20 additions and 0 deletions
|
|
@ -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
|
||||||
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)
|
||||||
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)
|
||||||
"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
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue