Merge fix for #25029

This commit is contained in:
Steve Dower 2015-09-08 21:26:59 -07:00
commit f711a90ea8

View file

@ -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);