gh-152212: Reject a POSIX TZ footer with a missing std offset in pure-Python zoneinfo (#152213)

This commit is contained in:
tonghuaroot (童话) 2026-06-27 17:16:43 +08:00 committed by GitHub
parent b3154aa450
commit 93454fe0da
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 10 additions and 1 deletions

View file

@ -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

View file

@ -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"):

View file

@ -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.