diff options
author | Brett Cannon <bcannon@gmail.com> | 2007-06-03 23:13:41 (GMT) |
---|---|---|
committer | Brett Cannon <bcannon@gmail.com> | 2007-06-03 23:13:41 (GMT) |
commit | f7188cefb31371394201ec7f1fd321936f5b37a1 (patch) | |
tree | 3868f9fb097070f6eb3f20bdb265b1cd92cdcb1b | |
parent | 994ebed50cb6dbdf96e63ed9f2c0697f2094f262 (diff) | |
download | cpython-f7188cefb31371394201ec7f1fd321936f5b37a1.zip cpython-f7188cefb31371394201ec7f1fd321936f5b37a1.tar.gz cpython-f7188cefb31371394201ec7f1fd321936f5b37a1.tar.bz2 |
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.
-rw-r--r-- | Lib/_strptime.py | 2 | ||||
-rw-r--r-- | Lib/test/test_strptime.py | 9 | ||||
-rw-r--r-- | Misc/NEWS | 3 |
3 files changed, 13 insertions, 1 deletions
diff --git a/Lib/_strptime.py b/Lib/_strptime.py index 9e7823a..166cf82 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 f474752..92c722a 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.""" @@ -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. |