From: Miss Islington (bot) <31488909+miss-islington@users.noreply.github.com> Date: Mon, 30 Jun 2025 14:58:18 +0000 (+0200) Subject: [3.14] gh-85702: Catch PermissionError in zoneinfo.load_tzdata() (GH-136117) (#136128) X-Git-Tag: v3.14.0b4~61 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=e86ac729953febddc13c59fb15be6d1cc6b80146;p=thirdparty%2FPython%2Fcpython.git [3.14] gh-85702: Catch PermissionError in zoneinfo.load_tzdata() (GH-136117) (#136128) gh-85702: Catch PermissionError in zoneinfo.load_tzdata() (GH-136117) (cherry picked from commit ee47670e8b8648b14fd4cb64a9d47d6ed3c5b6b7) Co-authored-by: Victor Stinner Co-authored-by: Peter Bierma --- diff --git a/Lib/zoneinfo/_common.py b/Lib/zoneinfo/_common.py index 6e05abc32394..03cc42149f9b 100644 --- a/Lib/zoneinfo/_common.py +++ b/Lib/zoneinfo/_common.py @@ -9,9 +9,13 @@ def load_tzdata(key): resource_name = components[-1] try: - return resources.files(package_name).joinpath(resource_name).open("rb") + path = resources.files(package_name).joinpath(resource_name) + # gh-85702: Prevent PermissionError on Windows + if path.is_dir(): + raise IsADirectoryError + return path.open("rb") except (ImportError, FileNotFoundError, UnicodeEncodeError, IsADirectoryError): - # There are three types of exception that can be raised that all amount + # There are four types of exception that can be raised that all amount # to "we cannot find this key": # # ImportError: If package_name doesn't exist (e.g. if tzdata is not diff --git a/Misc/NEWS.d/next/Library/2025-06-30-11-12-24.gh-issue-85702.0Lrbwu.rst b/Misc/NEWS.d/next/Library/2025-06-30-11-12-24.gh-issue-85702.0Lrbwu.rst new file mode 100644 index 000000000000..fc13eb1d9e0c --- /dev/null +++ b/Misc/NEWS.d/next/Library/2025-06-30-11-12-24.gh-issue-85702.0Lrbwu.rst @@ -0,0 +1,3 @@ +If ``zoneinfo._common.load_tzdata`` is given a package without a resource a +:exc:`zoneinfo.ZoneInfoNotFoundError` is raised rather than a :exc:`PermissionError`. +Patch by Victor Stinner.