From: Victor Stinner Date: Mon, 27 Jun 2022 21:46:22 +0000 (+0200) Subject: gh-87347: Fix test_pymem_new() reference leak (#94330) X-Git-Tag: v3.12.0a1~1092 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=edb10cab39748cb5cd5ba12080e410f0e0baff66;p=thirdparty%2FPython%2Fcpython.git gh-87347: Fix test_pymem_new() reference leak (#94330) Delete the allocated object with Py_DECREF() rather than PyObject_Free(). Rename also test_pymem_new() to test_pyobject_new(). --- diff --git a/Modules/_testcapimodule.c b/Modules/_testcapimodule.c index f8fb6eeec66f..7d88f4f51f83 100644 --- a/Modules/_testcapimodule.c +++ b/Modules/_testcapimodule.c @@ -4189,39 +4189,39 @@ test_pymem_alloc0(PyObject *self, PyObject *Py_UNUSED(ignored)) } static PyObject * -test_pymem_new(PyObject *self, PyObject *Py_UNUSED(ignored)) +test_pyobject_new(PyObject *self, PyObject *Py_UNUSED(ignored)) { - char *ptr; + PyObject *obj; PyTypeObject *type = &PyBaseObject_Type; PyTypeObject *var_type = &PyLong_Type; // PyObject_New() - ptr = PyObject_New(char, type); - if (ptr == NULL) { + obj = PyObject_New(PyObject, type); + if (obj == NULL) { goto alloc_failed; } - PyObject_Free(ptr); + Py_DECREF(obj); // PyObject_NEW() - ptr = PyObject_NEW(char, type); - if (ptr == NULL) { + obj = PyObject_NEW(PyObject, type); + if (obj == NULL) { goto alloc_failed; } - PyObject_Free(ptr); + Py_DECREF(obj); // PyObject_NewVar() - ptr = PyObject_NewVar(char, var_type, 3); - if (ptr == NULL) { + obj = PyObject_NewVar(PyObject, var_type, 3); + if (obj == NULL) { goto alloc_failed; } - PyObject_Free(ptr); + Py_DECREF(obj); // PyObject_NEW_VAR() - ptr = PyObject_NEW_VAR(char, var_type, 3); - if (ptr == NULL) { + obj = PyObject_NEW_VAR(PyObject, var_type, 3); + if (obj == NULL) { goto alloc_failed; } - PyObject_Free(ptr); + Py_DECREF(obj); Py_RETURN_NONE; @@ -6326,7 +6326,7 @@ static PyMethodDef TestMethods[] = { {"with_tp_del", with_tp_del, METH_VARARGS}, {"create_cfunction", create_cfunction, METH_NOARGS}, {"test_pymem_alloc0", test_pymem_alloc0, METH_NOARGS}, - {"test_pymem_new", test_pymem_new, METH_NOARGS}, + {"test_pyobject_new", test_pyobject_new, METH_NOARGS}, {"test_pymem_setrawallocators",test_pymem_setrawallocators, METH_NOARGS}, {"test_pymem_setallocators",test_pymem_setallocators, METH_NOARGS}, {"test_pyobject_setallocators",test_pyobject_setallocators, METH_NOARGS},