From 8f377a3bbe5588da3328ab816ce5f707aa3c97ac Mon Sep 17 00:00:00 2001
From: Senthil Kumaran <orsenthil@gmail.com>
Date: Wed, 6 Apr 2011 12:54:06 +0800
Subject: Issue #10762: Guard against invalid/non-supported format string '%f'
 on Windows. Patch Santoso Wijaya.

---
 Lib/test/test_time.py | 8 ++++++++
 Modules/timemodule.c  | 2 +-
 2 files changed, 9 insertions(+), 1 deletion(-)

diff --git a/Lib/test/test_time.py b/Lib/test/test_time.py
index b68cd6a..65b2735 100644
--- a/Lib/test/test_time.py
+++ b/Lib/test/test_time.py
@@ -2,6 +2,7 @@ from test import support
 import time
 import unittest
 import locale
+import sys
 
 class TimeTestCase(unittest.TestCase):
 
@@ -37,6 +38,13 @@ class TimeTestCase(unittest.TestCase):
             except ValueError:
                 self.fail('conversion specifier: %r failed.' % format)
 
+        # Issue #10762: Guard against invalid/non-supported format string
+        # so that Python don't crash (Windows crashes when the format string
+        # input to [w]strftime is not kosher.
+        if sys.platform.startswith('win'):
+            with self.assertRaises(ValueError):
+                time.strftime('%f')
+
     def test_strftime_bounds_checking(self):
         # Make sure that strftime() checks the bounds of the various parts
         #of the time tuple (0 is valid for *all* values).
diff --git a/Modules/timemodule.c b/Modules/timemodule.c
index a24728a..faed0e1 100644
--- a/Modules/timemodule.c
+++ b/Modules/timemodule.c
@@ -549,7 +549,7 @@ time_strftime(PyObject *self, PyObject *args)
         if (outbuf[1]=='#')
             ++outbuf; /* not documented by python, */
         if (outbuf[1]=='\0' ||
-            !wcschr(L"aAbBcdfHIjmMpSUwWxXyYzZ%", outbuf[1]))
+            !wcschr(L"aAbBcdHIjmMpSUwWxXyYzZ%", outbuf[1]))
         {
             PyErr_SetString(PyExc_ValueError, "Invalid format string");
             return 0;
-- 
cgit v0.12

