summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Malcolm <dmalcolm@redhat.com>2011-12-15 22:22:56 -0500
committerAles Kozumplik <akozumpl@redhat.com>2011-12-21 08:45:52 +0100
commit59807943af5c10c892b239f11b8fafb209254a4a (patch)
treef32d8f33d7db8d7d165b36235f152539dc373f8f
parentead20c495c52bacfb5fd7fd796bee0fb56981c52 (diff)
downloadlibrpm-tizen-59807943af5c10c892b239f11b8fafb209254a4a.tar.gz
librpm-tizen-59807943af5c10c892b239f11b8fafb209254a4a.tar.bz2
librpm-tizen-59807943af5c10c892b239f11b8fafb209254a4a.zip
fix memory leaks in invocations of PyObject_Call
- Various functions in the Python bindings have expressions of the form: PyObject_Call(callable, Py_BuildValue(fmtstring, ...), NULL); This leaks memory for the case when Py_BuildValue succeeds (it returns a new reference, which is never freed; PyObject_Call doesn't steal the reference): the argument tuple and all of its components will not be freed (until the process exits). Signed-off-by: Ales Kozumplik <akozumpl@redhat.com>
-rw-r--r--python/header-py.c11
-rw-r--r--python/rpmfd-py.c4
2 files changed, 7 insertions, 8 deletions
diff --git a/python/header-py.c b/python/header-py.c
index 96cf20001..cef457b6e 100644
--- a/python/header-py.c
+++ b/python/header-py.c
@@ -295,8 +295,7 @@ static PyObject * hdrWrite(hdrObject *s, PyObject *args, PyObject *kwds)
*/
static PyObject * hdr_fiFromHeader(PyObject * s, PyObject * args, PyObject * kwds)
{
- return PyObject_Call((PyObject *) &rpmfi_Type,
- Py_BuildValue("(O)", s), NULL);
+ return PyObject_CallFunctionObjArgs((PyObject *) &rpmfi_Type, s, NULL);
}
/* Backwards compatibility. Flags argument is just a dummy and discarded. */
@@ -309,14 +308,14 @@ static PyObject * hdr_dsFromHeader(PyObject * s, PyObject * args, PyObject * kwd
tagNumFromPyObject, &tag, &flags))
return NULL;
- return PyObject_Call((PyObject *) &rpmds_Type,
- Py_BuildValue("(Oi)", s, tag), NULL);
+ return PyObject_CallFunction((PyObject *) &rpmds_Type,
+ "(Oi)", s, tag);
}
static PyObject * hdr_dsOfHeader(PyObject * s)
{
- return PyObject_Call((PyObject *) &rpmds_Type,
- Py_BuildValue("(Oi)", s, RPMTAG_NEVR), NULL);
+ return PyObject_CallFunction((PyObject *) &rpmds_Type,
+ "(Oi)", s, RPMTAG_NEVR);
}
static long hdr_hash(PyObject * h)
diff --git a/python/rpmfd-py.c b/python/rpmfd-py.c
index 89a70cd0e..1150aa1b2 100644
--- a/python/rpmfd-py.c
+++ b/python/rpmfd-py.c
@@ -23,8 +23,8 @@ int rpmfdFromPyObject(PyObject *obj, rpmfdObject **fdop)
Py_INCREF(obj);
fdo = (rpmfdObject *) obj;
} else {
- fdo = (rpmfdObject *) PyObject_Call((PyObject *)&rpmfd_Type,
- Py_BuildValue("(O)", obj), NULL);
+ fdo = (rpmfdObject *) PyObject_CallFunctionObjArgs((PyObject *)&rpmfd_Type,
+ obj, NULL);
}
if (fdo == NULL) return 0;