]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
Fix test_strftime.py to escape locale time values that have characters that
authorBrett Cannon <bcannon@gmail.com>
Sat, 20 Mar 2004 23:13:49 +0000 (23:13 +0000)
committerBrett Cannon <bcannon@gmail.com>
Sat, 20 Mar 2004 23:13:49 +0000 (23:13 +0000)
might be mistaken for regex syntax.
Fixes bug #883604 .

Lib/test/test_strftime.py
Misc/NEWS

index 9bd045d8944786527a6be014eace29cf3600891b..40445575510c04d60411b75ecdd3f69c64e208fa 100755 (executable)
@@ -28,6 +28,16 @@ def main():
         for i in range(25):
             strftest(now + (i + j*100)*23*3603)
 
+def escapestr(text, ampm):
+    """Escape text to deal with possible locale values that have regex
+    syntax while allowing regex syntax used for the comparison."""
+    new_text = re.escape(text)
+    new_text = new_text.replace(re.escape(ampm), ampm)
+    new_text = new_text.replace("\%", "%")
+    new_text = new_text.replace("\:", ":")
+    new_text = new_text.replace("\?", "?")
+    return new_text
+
 def strftest(now):
     if verbose:
         print "strftime test for", time.ctime(now)
@@ -50,6 +60,8 @@ def strftest(now):
     elif now[3] > 0: clock12 = now[3]
     else: clock12 = 12
 
+    # Make sure any characters that could be taken as regex syntax is
+    # escaped in escapestr()
     expectations = (
         ('%a', calendar.day_abbr[now[6]], 'abbreviated weekday name'),
         ('%A', calendar.day_name[now[6]], 'full weekday name'),
@@ -110,7 +122,7 @@ def strftest(now):
         except ValueError, error:
             print "Standard '%s' format gave error:" % e[0], error
             continue
-        if re.match(e[1], result): continue
+        if re.match(escapestr(e[1], ampm), result): continue
         if not result or result[0] == '%':
             print "Does not support standard '%s' format (%s)" % (e[0], e[2])
         else:
@@ -125,7 +137,7 @@ def strftest(now):
                 print "Error for nonstandard '%s' format (%s): %s" % \
                       (e[0], e[2], str(result))
             continue
-        if re.match(e[1], result):
+        if re.match(escapestr(e[1], ampm), result):
             if verbose:
                 print "Supports nonstandard '%s' format (%s)" % (e[0], e[2])
         elif not result or result[0] == '%':
index e90770f96382a2853b8adeadea70ca636b919634..448e6c8775db24eec43f2a7b77bf6d9198f84f6d 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -38,6 +38,9 @@ Core and builtins
 Library
 -------
 
+- Bug #883604: Fix Lib/test/test_strftime.py to escape characters from locale
+  time values that might be mistaken as regex syntax.
+
 - Bug #700055: .pth files can now have any type of line endings.
 
 - Patch 817379: Allow absolute ftp paths in urllib2.