Skip to content

Commit

Permalink
[3.8] bpo-38150: Fix refleak in the finalizer of a _testcapimodule ty…
Browse files Browse the repository at this point in the history
…pe (GH-16115) (GH-16118)

The PyLong created in the finalizer was not being cleaned up

https://bugs.python.org/issue38150

Automerge-Triggered-By: @matrixise
(cherry picked from commit a67ac2f)

Co-authored-by: Eddie Elizondo <eelizondo@fb.com>
  • Loading branch information
matrixise and eduardo-elizondo committed Sep 13, 2019
1 parent 436b429 commit 53ff2ca
Showing 1 changed file with 13 additions and 5 deletions.
18 changes: 13 additions & 5 deletions Modules/_testcapimodule.c
Original file line number Diff line number Diff line change
Expand Up @@ -6090,7 +6090,7 @@ static void
heapctypesubclasswithfinalizer_finalize(PyObject *self)
{
PyObject *error_type, *error_value, *error_traceback, *m;
PyObject *oldtype = NULL, *newtype = NULL;
PyObject *oldtype = NULL, *newtype = NULL, *refcnt = NULL;

/* Save the current exception, if any. */
PyErr_Fetch(&error_type, &error_value, &error_traceback);
Expand All @@ -6108,18 +6108,26 @@ heapctypesubclasswithfinalizer_finalize(PyObject *self)
if (PyObject_SetAttrString(self, "__class__", newtype) < 0) {
goto cleanup_finalize;
}
if (PyObject_SetAttrString(
oldtype, "refcnt_in_del", PyLong_FromSsize_t(Py_REFCNT(oldtype))) < 0) {
refcnt = PyLong_FromSsize_t(Py_REFCNT(oldtype));
if (refcnt == NULL) {
goto cleanup_finalize;
}
if (PyObject_SetAttrString(
newtype, "refcnt_in_del", PyLong_FromSsize_t(Py_REFCNT(newtype))) < 0) {
if (PyObject_SetAttrString(oldtype, "refcnt_in_del", refcnt) < 0) {
goto cleanup_finalize;
}
Py_DECREF(refcnt);
refcnt = PyLong_FromSsize_t(Py_REFCNT(newtype));
if (refcnt == NULL) {
goto cleanup_finalize;
}
if (PyObject_SetAttrString(newtype, "refcnt_in_del", refcnt) < 0) {
goto cleanup_finalize;
}

cleanup_finalize:
Py_XDECREF(oldtype);
Py_XDECREF(newtype);
Py_XDECREF(refcnt);

/* Restore the saved exception. */
PyErr_Restore(error_type, error_value, error_traceback);
Expand Down

0 comments on commit 53ff2ca

Please sign in to comment.