From c92a616554d19c5e98df81856e37b37fd7f406cd Mon Sep 17 00:00:00 2001 From: sweeneyde Date: Sun, 17 Apr 2022 02:10:19 -0400 Subject: [PATCH] Fix refleaks in PyErr_SetHandledException --- Python/errors.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/Python/errors.c b/Python/errors.c index ce7785855b8e54..3eb8a5ef04d284 100644 --- a/Python/errors.c +++ b/Python/errors.c @@ -520,9 +520,7 @@ PyErr_GetHandledException(void) void _PyErr_SetHandledException(PyThreadState *tstate, PyObject *exc) { - PyObject *oldexc = tstate->exc_info->exc_value; - tstate->exc_info->exc_value = Py_XNewRef(exc); - Py_XDECREF(oldexc); + Py_XSETREF(tstate->exc_info->exc_value, Py_XNewRef(exc)); } void @@ -543,6 +541,7 @@ void PyErr_SetExcInfo(PyObject *type, PyObject *value, PyObject *traceback) { PyErr_SetHandledException(value); + Py_XDECREF(value); /* These args are no longer used, but we still need to steal a ref */ Py_XDECREF(type); Py_XDECREF(traceback);