diff options
author | Steve Dower <steve.dower@microsoft.com> | 2015-09-09 02:12:51 (GMT) |
---|---|---|
committer | Steve Dower <steve.dower@microsoft.com> | 2015-09-09 02:12:51 (GMT) |
commit | 97cded934f7511cdad33f1f883f549aebf4e191f (patch) | |
tree | d91d41d2e8d4b2a9e51369d9734d993fff467738 /Modules/timemodule.c | |
parent | c1635e497d060bae076127152801af2b2ec552ff (diff) | |
download | cpython-97cded934f7511cdad33f1f883f549aebf4e191f.zip cpython-97cded934f7511cdad33f1f883f549aebf4e191f.tar.gz cpython-97cded934f7511cdad33f1f883f549aebf4e191f.tar.bz2 |
Issue #25029: MemoryError in test_strptime
Diffstat (limited to 'Modules/timemodule.c')
-rw-r--r-- | Modules/timemodule.c | 20 |
1 files changed, 7 insertions, 13 deletions
diff --git a/Modules/timemodule.c b/Modules/timemodule.c index eca67d9..9de3c84 100644 --- a/Modules/timemodule.c +++ b/Modules/timemodule.c @@ -648,9 +648,6 @@ time_strftime(PyObject *self, PyObject *args) * will be ahead of time... */ 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)); if (outbuf == NULL) { PyErr_NoMemory(); @@ -660,10 +657,14 @@ time_strftime(PyObject *self, PyObject *args) buflen = format_time(outbuf, i, fmt, &buf); _Py_END_SUPPRESS_IPH #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 - if (buflen > 0 || fmtlen == 0 || - (fmtlen > 4 && i >= 256 * fmtlen)) { + if (buflen > 0 || i >= 256 * fmtlen) { /* If the buffer is 256 times as long as the format, it's probably not failing for lack of room! More likely, the format yields an empty result, @@ -679,13 +680,6 @@ time_strftime(PyObject *self, PyObject *args) break; } 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 PyMem_Free(format); |