From: Brett Cannon Date: Thu, 15 Sep 2005 02:42:05 +0000 (+0000) Subject: Clear the regex cache when the locale changes. X-Git-Tag: v2.4.2c1~29 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=fc252265dc91dc3e29c11c1a9c8f3c67dd0c157b;p=thirdparty%2FPython%2Fcpython.git Clear the regex cache when the locale changes. Backport of fix for bug #1290505. --- diff --git a/Lib/_strptime.py b/Lib/_strptime.py index f8dbdd5679b1..3bd5a8f2384b 100644 --- a/Lib/_strptime.py +++ b/Lib/_strptime.py @@ -272,13 +272,14 @@ _regex_cache = {} def strptime(data_string, format="%a %b %d %H:%M:%S %Y"): """Return a time struct based on the input string and the format string.""" - global _TimeRE_cache + global _TimeRE_cache, _regex_cache _cache_lock.acquire() try: time_re = _TimeRE_cache locale_time = time_re.locale_time if _getlang() != locale_time.lang: _TimeRE_cache = TimeRE() + _regex_cache = {} if len(_regex_cache) > _CACHE_MAX_SIZE: _regex_cache.clear() format_regex = _regex_cache.get(format) diff --git a/Lib/test/test_strptime.py b/Lib/test/test_strptime.py index 785497a8d553..f9763aa34c2c 100644 --- a/Lib/test/test_strptime.py +++ b/Lib/test/test_strptime.py @@ -462,10 +462,12 @@ class CacheTests(unittest.TestCase): # Make sure cache is recreated when current locale does not match what # cached object was created with. _strptime.strptime("10", "%d") + _strptime.strptime("2005", "%Y") _strptime._TimeRE_cache.locale_time.lang = "Ni" original_time_re = id(_strptime._TimeRE_cache) _strptime.strptime("10", "%d") self.failIfEqual(original_time_re, id(_strptime._TimeRE_cache)) + self.failUnlessEqual(len(_strptime._regex_cache), 1) def test_regex_cleanup(self): # Make sure cached regexes are discarded when cache becomes "full". diff --git a/Misc/NEWS b/Misc/NEWS index cbc6dc146e3f..793c4c35350e 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -92,6 +92,9 @@ Extension Modules Library ------- +- Bug #1290505: time.strptime() was not invalidating its regex cache when the + locale changed. + - Fix a misuse of str.find() in detection of use of %U or %W in datetime format.