https://github.com/python/cpython/commit/21a6a8a89246cb3c78d1e517084caf2d47c822f7
commit: 21a6a8a89246cb3c78d1e517084caf2d47c822f7
branch: main
author: Stan Ulbrych <[email protected]>
committer: StanFromIreland <[email protected]>
date: 2026-08-20T10:16:31+01:00
summary:
gh-156067: Fix two error handling issues in `_zoneinfo.load_data()` (#156068)
files:
A Misc/NEWS.d/next/Library/2026-08-19-21-01-19.gh-issue-156067.1CXkqc.rst
M Modules/_zoneinfo.c
diff --git
a/Misc/NEWS.d/next/Library/2026-08-19-21-01-19.gh-issue-156067.1CXkqc.rst
b/Misc/NEWS.d/next/Library/2026-08-19-21-01-19.gh-issue-156067.1CXkqc.rst
new file mode 100644
index 00000000000000..af4c778ece5d70
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2026-08-19-21-01-19.gh-issue-156067.1CXkqc.rst
@@ -0,0 +1,2 @@
+Fix error handling in the :mod:`zoneinfo` accelerator module when a
+transition index is ``-1`` or a TZ string's ``__bool__`` raises.
diff --git a/Modules/_zoneinfo.c b/Modules/_zoneinfo.c
index 464e145438ae73..56ccabbea0ab48 100644
--- a/Modules/_zoneinfo.c
+++ b/Modules/_zoneinfo.c
@@ -1070,7 +1070,7 @@ load_data(zoneinfo_state *state, PyZoneInfo_ZoneInfo
*self, PyObject *file_obj)
}
Py_ssize_t cur_trans_idx = PyLong_AsSsize_t(num);
- if (cur_trans_idx == -1) {
+ if (cur_trans_idx == -1 && PyErr_Occurred()) {
goto error;
}
@@ -1181,7 +1181,12 @@ load_data(zoneinfo_state *state, PyZoneInfo_ZoneInfo
*self, PyObject *file_obj)
self->ttinfo_before = &(self->_ttinfos[0]);
}
- if (tz_str != Py_None && PyObject_IsTrue(tz_str)) {
+ int has_tz_str = PyObject_IsTrue(tz_str);
+ if (has_tz_str < 0) {
+ goto error;
+ }
+
+ if (has_tz_str) {
if (parse_tz_str(state, tz_str, &(self->tzrule_after))) {
goto error;
}
_______________________________________________
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]