summaryrefslogtreecommitdiffstats
path: root/Modules
diff options
context:
space:
mode:
authorVictor Stinner <vstinner@python.org>2022-06-27 21:46:22 (GMT)
committerGitHub <noreply@github.com>2022-06-27 21:46:22 (GMT)
commitedb10cab39748cb5cd5ba12080e410f0e0baff66 (patch)
treea409105a598fcd992c8303c26b3b18533c7e6976 /Modules
parentacc6468f7ee0d1f22633f0b84df28f69e75f1260 (diff)
downloadcpython-edb10cab39748cb5cd5ba12080e410f0e0baff66.zip
cpython-edb10cab39748cb5cd5ba12080e410f0e0baff66.tar.gz
cpython-edb10cab39748cb5cd5ba12080e410f0e0baff66.tar.bz2
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().
Diffstat (limited to 'Modules')
-rw-r--r--Modules/_testcapimodule.c30
1 files changed, 15 insertions, 15 deletions
diff --git a/Modules/_testcapimodule.c b/Modules/_testcapimodule.c
index f8fb6ee..7d88f4f 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},