diff options
author | Miss Islington (bot) <31488909+miss-islington@users.noreply.github.com> | 2022-10-02 04:19:57 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-10-02 04:19:57 (GMT) |
commit | dbde686a49c2d0d7ce476d134f8daffd636382df (patch) | |
tree | 29b0f26d9dba15424127d730b3cf2bf4bb894821 /Objects/exceptions.c | |
parent | 9189cd6b05a32b67981d2157947d745b2d0dac88 (diff) | |
download | cpython-dbde686a49c2d0d7ce476d134f8daffd636382df.zip cpython-dbde686a49c2d0d7ce476d134f8daffd636382df.tar.gz cpython-dbde686a49c2d0d7ce476d134f8daffd636382df.tar.bz2 |
gh-97591: In `Exception.__setstate__()` acquire strong references before calling `tp_hash` slot (GH-97700)
(cherry picked from commit d63943860974f232b5f027dc6535d25d1b4d8fc0)
Co-authored-by: Ofey Chan <ofey206@gmail.com>
Diffstat (limited to 'Objects/exceptions.c')
-rw-r--r-- | Objects/exceptions.c | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/Objects/exceptions.c b/Objects/exceptions.c index 319eb23..5ab4ac0 100644 --- a/Objects/exceptions.c +++ b/Objects/exceptions.c @@ -167,8 +167,14 @@ BaseException_setstate(PyObject *self, PyObject *state) return NULL; } while (PyDict_Next(state, &i, &d_key, &d_value)) { - if (PyObject_SetAttr(self, d_key, d_value) < 0) + Py_INCREF(d_key); + Py_INCREF(d_value); + int res = PyObject_SetAttr(self, d_key, d_value); + Py_DECREF(d_value); + Py_DECREF(d_key); + if (res < 0) { return NULL; + } } } Py_RETURN_NONE; |