summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBrett Cannon <bcannon@gmail.com>2005-09-15 02:34:56 (GMT)
committerBrett Cannon <bcannon@gmail.com>2005-09-15 02:34:56 (GMT)
commita783d06f8cb4077dd34567fde418bf6c23073912 (patch)
tree5b8fd68bf9715fdb363227fce18d6bf77e71f19d
parentfb1ef85b0bbb6336e03489af7adaff494bd2b2bb (diff)
downloadcpython-a783d06f8cb4077dd34567fde418bf6c23073912.zip
cpython-a783d06f8cb4077dd34567fde418bf6c23073912.tar.gz
cpython-a783d06f8cb4077dd34567fde418bf6c23073912.tar.bz2
Clear out the regex cache when the TimeRE cache is invalidated by a locale
change. Fixes bug #1290505.
-rw-r--r--Lib/_strptime.py3
-rw-r--r--Lib/test/test_strptime.py2
-rw-r--r--Misc/NEWS2
3 files changed, 6 insertions, 1 deletions
diff --git a/Lib/_strptime.py b/Lib/_strptime.py
index 90928ff..08d7960 100644
--- a/Lib/_strptime.py
+++ b/Lib/_strptime.py
@@ -275,13 +275,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 785497a..f9763aa 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 f63d711..fca9b55 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -217,6 +217,8 @@ Extension Modules
Library
-------
+- Bug #1290505: Fix clearing the regex cache for time.strptime().
+
- Bug #1167128: Fix size of a symlink in a tarfile to be 0.
- Patch #810023: Fix off-by-one bug in urllib.urlretrieve reporthook