]> granicus.if.org Git - python/commitdiff
Issue #25029: MemoryError in test_strptime
authorSteve Dower <steve.dower@microsoft.com>
Wed, 9 Sep 2015 02:12:51 +0000 (19:12 -0700)
committerSteve Dower <steve.dower@microsoft.com>
Wed, 9 Sep 2015 02:12:51 +0000 (19:12 -0700)
Modules/timemodule.c

index eca67d9e28694b4ef4b3159e661240a09b2a9698..9de3c843322e6f9df36a9722f9fc59bd4fcfedb8 100644 (file)
@@ -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);