https://github.com/python/cpython/commit/93454fe0daa2b29e8fefbe76aed7af4fa1eb8623
commit: 93454fe0daa2b29e8fefbe76aed7af4fa1eb8623
branch: main
author: tonghuaroot (童话) <[email protected]>
committer: StanFromIreland <[email protected]>
date: 2026-06-27T10:16:43+01:00
summary:
gh-152212: Reject a POSIX TZ footer with a missing std offset in pure-Python
`zoneinfo` (#152213)
files:
A Misc/NEWS.d/next/Library/2026-06-25-12-00-00.gh-issue-152212.Zk7Qm2.rst
M Lib/test/test_zoneinfo/test_zoneinfo.py
M Lib/zoneinfo/_zoneinfo.py
diff --git a/Lib/test/test_zoneinfo/test_zoneinfo.py
b/Lib/test/test_zoneinfo/test_zoneinfo.py
index d4d57b8f727584f..cf3f82db75b0b60 100644
--- a/Lib/test/test_zoneinfo/test_zoneinfo.py
+++ b/Lib/test/test_zoneinfo/test_zoneinfo.py
@@ -1142,6 +1142,11 @@ def test_extreme_tzstr(self):
def test_invalid_tzstr(self):
invalid_tzstrs = [
"PST8PDT", # DST but no transition specified
+ # gh-152212: the std offset is required (POSIX TZ grammar)
+ "AAA",
+ "A",
+ "AA",
+ "B",
"+11", # Unquoted alphanumeric
"GMT,M3.2.0/2,M11.1.0/3", # Transition rule but no DST
"GMT0+11,M3.2.0/2,M11.1.0/3", # Unquoted alphanumeric in DST
diff --git a/Lib/zoneinfo/_zoneinfo.py b/Lib/zoneinfo/_zoneinfo.py
index 3903d57d55417e3..52832f600c30448 100644
--- a/Lib/zoneinfo/_zoneinfo.py
+++ b/Lib/zoneinfo/_zoneinfo.py
@@ -672,7 +672,8 @@ def _parse_tz_str(tz_str):
except ValueError as e:
raise ValueError(f"Invalid STD offset in {tz_str}") from e
else:
- std_offset = 0
+ # The STD offset is required
+ raise ValueError(f"Invalid STD offset in {tz_str}")
if dst_abbr is not None:
if dst_offset := m.group("dstoff"):
diff --git
a/Misc/NEWS.d/next/Library/2026-06-25-12-00-00.gh-issue-152212.Zk7Qm2.rst
b/Misc/NEWS.d/next/Library/2026-06-25-12-00-00.gh-issue-152212.Zk7Qm2.rst
new file mode 100644
index 000000000000000..2b1d272638b11ab
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2026-06-25-12-00-00.gh-issue-152212.Zk7Qm2.rst
@@ -0,0 +1,3 @@
+Fix the pure-Python :mod:`zoneinfo` parser accepting a POSIX TZ string with a
+``std`` abbreviation but no offset. This is invalid per POSIX and now
+raises :exc:`ValueError`, matching the C accelerator. Patch by tonghuaroot.
_______________________________________________
Python-checkins mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3//lists/python-checkins.python.org
Member address: [email protected]