[3.15] gh-152060: Fix _pydatetime.fromisoformat() raising AssertionError on invalid lengths (GH-152061) (#152081)

(cherry picked from commit ff781d52d4)

Co-authored-by: tonghuaroot (童话) <tonghuaroot@gmail.com>
This commit is contained in:
Miss Islington (bot)
2026-06-24 16:10:54 +02:00
committed by GitHub
parent 9fb286eae9
commit 8146fa4727
3 changed files with 6 additions and 1 deletions
+2 -1
View File
@@ -358,7 +358,8 @@ def _find_isoformat_datetime_separator(dtstr):
def _parse_isoformat_date(dtstr):
# It is assumed that this is an ASCII-only string of lengths 7, 8 or 10,
# see the comment on Modules/_datetimemodule.c:_find_isoformat_datetime_separator
assert len(dtstr) in (7, 8, 10)
if len(dtstr) not in (7, 8, 10):
raise ValueError("Invalid isoformat string")
year = int(dtstr[0:4])
has_sep = dtstr[4] == '-'
+1
View File
@@ -3757,6 +3757,7 @@ class TestDateTime(TestDate):
'2009-04-19T12:30:45+00:00:90', # Time zone field out from range
'2009-04-19T12:30:45-00:90:00', # Time zone field out from range
'2009-04-19T12:30:45-00:00:90', # Time zone field out from range
'2020-2020', # Ambiguous 9-char date portion
]
for bad_str in bad_strs:
@@ -0,0 +1,3 @@
Fix :meth:`datetime.datetime.fromisoformat` raising :exc:`AssertionError`
instead of :exc:`ValueError` for some malformed strings in the pure-Python
implementation, matching the C implementation.