Issue #25029: MemoryError in test_strptime
This commit is contained in:
parent
c1635e497d
commit
97cded934f
|
@ -648,9 +648,6 @@ time_strftime(PyObject *self, PyObject *args)
|
||||||
* will be ahead of time...
|
* will be ahead of time...
|
||||||
*/
|
*/
|
||||||
for (i = 1024; ; i += i) {
|
for (i = 1024; ; i += i) {
|
||||||
#if defined _MSC_VER && _MSC_VER >= 1400 && defined(__STDC_SECURE_LIB__)
|
|
||||||
int err;
|
|
||||||
#endif
|
|
||||||
outbuf = (time_char *)PyMem_Malloc(i*sizeof(time_char));
|
outbuf = (time_char *)PyMem_Malloc(i*sizeof(time_char));
|
||||||
if (outbuf == NULL) {
|
if (outbuf == NULL) {
|
||||||
PyErr_NoMemory();
|
PyErr_NoMemory();
|
||||||
|
@ -660,10 +657,14 @@ time_strftime(PyObject *self, PyObject *args)
|
||||||
buflen = format_time(outbuf, i, fmt, &buf);
|
buflen = format_time(outbuf, i, fmt, &buf);
|
||||||
_Py_END_SUPPRESS_IPH
|
_Py_END_SUPPRESS_IPH
|
||||||
#if defined _MSC_VER && _MSC_VER >= 1400 && defined(__STDC_SECURE_LIB__)
|
#if defined _MSC_VER && _MSC_VER >= 1400 && defined(__STDC_SECURE_LIB__)
|
||||||
err = errno;
|
/* VisualStudio .NET 2005 does this properly */
|
||||||
|
if (buflen == 0 && errno == EINVAL) {
|
||||||
|
PyErr_SetString(PyExc_ValueError, "Invalid format string");
|
||||||
|
PyMem_Free(outbuf);
|
||||||
|
break;
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
if (buflen > 0 || fmtlen == 0 ||
|
if (buflen > 0 || i >= 256 * fmtlen) {
|
||||||
(fmtlen > 4 && i >= 256 * fmtlen)) {
|
|
||||||
/* If the buffer is 256 times as long as the format,
|
/* If the buffer is 256 times as long as the format,
|
||||||
it's probably not failing for lack of room!
|
it's probably not failing for lack of room!
|
||||||
More likely, the format yields an empty result,
|
More likely, the format yields an empty result,
|
||||||
|
@ -679,13 +680,6 @@ time_strftime(PyObject *self, PyObject *args)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
PyMem_Free(outbuf);
|
PyMem_Free(outbuf);
|
||||||
#if defined _MSC_VER && _MSC_VER >= 1400 && defined(__STDC_SECURE_LIB__)
|
|
||||||
/* VisualStudio .NET 2005 does this properly */
|
|
||||||
if (buflen == 0 && err == EINVAL) {
|
|
||||||
PyErr_SetString(PyExc_ValueError, "Invalid format string");
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
#ifdef HAVE_WCSFTIME
|
#ifdef HAVE_WCSFTIME
|
||||||
PyMem_Free(format);
|
PyMem_Free(format);
|
||||||
|
|
Loading…
Reference in New Issue