From: Brett Cannon Date: Sun, 3 Jun 2007 23:13:41 +0000 (+0000) Subject: Make _strptime.TimeRE().pattern() use ``\s+`` for matching whitespace instead X-Git-Tag: v2.6a1~1660 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=f7188cefb31371394201ec7f1fd321936f5b37a1;p=python Make _strptime.TimeRE().pattern() use ``\s+`` for matching whitespace instead of ``\s*``. This prevents patterns from "stealing" bits from other patterns in order to make a match work. Closes bug #1730389. Will be backported. --- diff --git a/Lib/_strptime.py b/Lib/_strptime.py index 9e7823abdd..166cf82203 100644 --- a/Lib/_strptime.py +++ b/Lib/_strptime.py @@ -250,7 +250,7 @@ class TimeRE(dict): regex_chars = re_compile(r"([\\.^$*+?\(\){}\[\]|])") format = regex_chars.sub(r"\\\1", format) whitespace_replacement = re_compile('\s+') - format = whitespace_replacement.sub('\s*', format) + format = whitespace_replacement.sub('\s+', format) while '%' in format: directive_index = format.index('%')+1 processed_format = "%s%s%s" % (processed_format, diff --git a/Lib/test/test_strptime.py b/Lib/test/test_strptime.py index f4747521bf..92c722ab15 100644 --- a/Lib/test/test_strptime.py +++ b/Lib/test/test_strptime.py @@ -190,6 +190,15 @@ class TimeRETests(unittest.TestCase): "locale data that contains regex metacharacters is not" " properly escaped") + def test_whitespace_substitution(self): + # When pattern contains whitespace, make sure it is taken into account + # so as to not allow to subpatterns to end up next to each other and + # "steal" characters from each other. + pattern = self.time_re.pattern('%j %H') + self.failUnless(not re.match(pattern, "180")) + self.failUnless(re.match(pattern, "18 0")) + + class StrptimeTests(unittest.TestCase): """Tests for _strptime.strptime.""" diff --git a/Misc/NEWS b/Misc/NEWS index 562033ed20..cf61b89f20 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -222,6 +222,9 @@ Core and builtins Library ------- +- Bug #1730389: Change time.strptime() to use ``\s+`` instead of ``\s*`` when + matching spaces in the specified format argument. + - SF 1668596/1720897: distutils now copies data files even if package_dir is empty.