Skip to content

Commit

Permalink
gh-87347: Fix test_pymem_new() reference leak (#94330)
Browse files Browse the repository at this point in the history
Delete the allocated object with Py_DECREF() rather than
PyObject_Free().

Rename also test_pymem_new() to test_pyobject_new().
  • Loading branch information
vstinner committed Jun 27, 2022
1 parent acc6468 commit edb10ca
Showing 1 changed file with 15 additions and 15 deletions.
30 changes: 15 additions & 15 deletions Modules/_testcapimodule.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand Down Expand Up @@ -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},
Expand Down

0 comments on commit edb10ca

Please sign in to comment.