]> granicus.if.org Git - python/commitdiff
Issue #24917: time_strftime() Buffer Over-read. Patch by John Leitch.
authorSteve Dower <steve.dower@microsoft.com>
Sat, 5 Sep 2015 19:16:06 +0000 (12:16 -0700)
committerSteve Dower <steve.dower@microsoft.com>
Sat, 5 Sep 2015 19:16:06 +0000 (12:16 -0700)
Lib/test/test_time.py
Misc/NEWS
Modules/timemodule.c

index 6334e022e007c90d22689cee49672db34273c6a2..3f571a0e6f615d7ca953439e6aa55c16f6ad1636 100644 (file)
@@ -174,6 +174,12 @@ class TimeTestCase(unittest.TestCase):
     def test_strftime_bounding_check(self):
         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):
         # Make sure that using all zeros uses the proper default
         # values.  No test for daylight savings since strftime() does
index 2b1f2785833dbee825128f566b31e106c5132477..b8698eba35881cda40c4753b53f76371018eda77 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -10,6 +10,8 @@ Release date: 2015-09-06
 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 #24975: Fix AST compilation for PEP 448 syntax.
index 197d2c0b8dd357eaf60e6f90c6c638d83199691d..55e26fa8a253c7e175415184d6db591529646c67 100644 (file)
@@ -623,6 +623,12 @@ time_strftime(PyObject *self, PyObject *args)
             Py_DECREF(format);
             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)
     for(outbuf = wcschr(fmt, '%');
@@ -636,6 +642,12 @@ time_strftime(PyObject *self, PyObject *args)
                             "format %y requires year >= 1900 on AIX");
             return NULL;
         }
+        else if (outbuf[1] == '\0')
+        {
+            PyErr_SetString(PyExc_ValueError, "Incomplete format string");
+            Py_DECREF(format);
+            return NULL;
+        }
     }
 #endif