From: Miss Islington (bot) <31488909+miss-islington@users.noreply.github.com> Date: Tue, 10 Mar 2026 19:12:34 +0000 (+0100) Subject: [3.13] gh-142763: Fix race in ZoneInfo cache eviction (gh-144978) (#145782) X-Git-Tag: v3.13.13~105 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=af1ad531638cb8ef44efc83321e36a98fc55f7e5;p=thirdparty%2FPython%2Fcpython.git [3.13] gh-142763: Fix race in ZoneInfo cache eviction (gh-144978) (#145782) The cache may be cleared between the evaluation of the if statement and the call to popitem. (cherry picked from commit 665c1db94f46f8e1a18a8c2f89adb3bc72cb83dc) Co-authored-by: Sam Gross --- diff --git a/Lib/zoneinfo/_zoneinfo.py b/Lib/zoneinfo/_zoneinfo.py index 3ffdb4c83719..bd3fefc6c9d9 100644 --- a/Lib/zoneinfo/_zoneinfo.py +++ b/Lib/zoneinfo/_zoneinfo.py @@ -47,7 +47,11 @@ class ZoneInfo(tzinfo): cls._strong_cache[key] = cls._strong_cache.pop(key, instance) if len(cls._strong_cache) > cls._strong_cache_size: - cls._strong_cache.popitem(last=False) + try: + cls._strong_cache.popitem(last=False) + except KeyError: + # another thread may have already emptied the cache + pass return instance diff --git a/Misc/NEWS.d/next/Library/2025-12-18-00-00-00.gh-issue-142763.AJpZPVG5.rst b/Misc/NEWS.d/next/Library/2025-12-18-00-00-00.gh-issue-142763.AJpZPVG5.rst new file mode 100644 index 000000000000..a5330365e3e4 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2025-12-18-00-00-00.gh-issue-142763.AJpZPVG5.rst @@ -0,0 +1,2 @@ +Fix a race condition between :class:`zoneinfo.ZoneInfo` creation and +:func:`zoneinfo.ZoneInfo.clear_cache` that could raise :exc:`KeyError`.