diff options
author | Miss Islington (bot) <31488909+miss-islington@users.noreply.github.com> | 2023-06-09 22:54:00 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-06-09 22:54:00 (GMT) |
commit | 4ceb5c4924f8a63ddb45aac001565bb36cf94c1e (patch) | |
tree | 5faf1b79e865ea870d288d9f30e43fc69959107d | |
parent | 6cb130800554d2582d0e0f63246aa5f16d91e26b (diff) | |
download | cpython-4ceb5c4924f8a63ddb45aac001565bb36cf94c1e.zip cpython-4ceb5c4924f8a63ddb45aac001565bb36cf94c1e.tar.gz cpython-4ceb5c4924f8a63ddb45aac001565bb36cf94c1e.tar.bz2 |
[3.11] gh-105375: Improve error handling in `zoneinfo` module (GH-105586) (#105613)
Fix bugs where exceptions could end up being overwritten
because of deferred error handling.
(cherry picked from commit 33c92c4f15539806c8aff8574ff30a8b307e3e4d)
Co-authored-by: Nikita Sobolev <mail@sobolevn.me>
Co-authored-by: Erlend E. Aasland <erlend.aasland@protonmail.com>
-rw-r--r-- | Misc/NEWS.d/next/Library/2023-06-09-21-11-28.gh-issue-105375.4Mxn7t.rst | 1 | ||||
-rw-r--r-- | Modules/_zoneinfo.c | 17 |
2 files changed, 12 insertions, 6 deletions
diff --git a/Misc/NEWS.d/next/Library/2023-06-09-21-11-28.gh-issue-105375.4Mxn7t.rst b/Misc/NEWS.d/next/Library/2023-06-09-21-11-28.gh-issue-105375.4Mxn7t.rst new file mode 100644 index 0000000..4202b75 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2023-06-09-21-11-28.gh-issue-105375.4Mxn7t.rst @@ -0,0 +1 @@ +Fix bugs in :mod:`zoneinfo` where exceptions could be overwritten. diff --git a/Modules/_zoneinfo.c b/Modules/_zoneinfo.c index 55975f4..5f584ff 100644 --- a/Modules/_zoneinfo.c +++ b/Modules/_zoneinfo.c @@ -581,14 +581,19 @@ zoneinfo_fromutc(PyObject *obj_self, PyObject *dt) } else { PyObject *replace = PyObject_GetAttrString(tmp, "replace"); + Py_DECREF(tmp); + if (replace == NULL) { + return NULL; + } PyObject *args = PyTuple_New(0); + if (args == NULL) { + Py_DECREF(replace); + return NULL; + } PyObject *kwargs = PyDict_New(); - - Py_DECREF(tmp); - if (args == NULL || kwargs == NULL || replace == NULL) { - Py_XDECREF(args); - Py_XDECREF(kwargs); - Py_XDECREF(replace); + if (kwargs == NULL) { + Py_DECREF(replace); + Py_DECREF(args); return NULL; } |