[Python-checkins] python/dist/src/Objects abstract.c,2.136,2.137
mwh@users.sourceforge.net
mwh at users.sourceforge.net
Tue Jul 12 12:21:21 CEST 2005
Update of /cvsroot/python/python/dist/src/Objects
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv10231/Objects
Modified Files:
abstract.c
Log Message:
Fix:
[ 1229429 ] missing Py_DECREF in PyObject_CallMethod
Add a test in test_enumerate, which is a bit random, but suffices
(reversed_new calls PyObject_CallMethod under some circumstances).
Index: abstract.c
===================================================================
RCS file: /cvsroot/python/python/dist/src/Objects/abstract.c,v
retrieving revision 2.136
retrieving revision 2.137
diff -u -d -r2.136 -r2.137
--- abstract.c 26 Apr 2005 03:45:25 -0000 2.136
+++ abstract.c 12 Jul 2005 10:21:02 -0000 2.137
@@ -1797,7 +1797,9 @@
PyObject_CallMethod(PyObject *o, char *name, char *format, ...)
{
va_list va;
- PyObject *args, *func = 0, *retval;
+ PyObject *args = NULL;
+ PyObject *func = NULL;
+ PyObject *retval = NULL;
if (o == NULL || name == NULL)
return null_error();
@@ -1808,8 +1810,10 @@
return 0;
}
- if (!PyCallable_Check(func))
- return type_error("call of non-callable attribute");
+ if (!PyCallable_Check(func)) {
+ type_error("call of non-callable attribute");
+ goto exit;
+ }
if (format && *format) {
va_start(va, format);
@@ -1820,23 +1824,24 @@
args = PyTuple_New(0);
if (!args)
- return NULL;
+ goto exit;
if (!PyTuple_Check(args)) {
PyObject *a;
a = PyTuple_New(1);
if (a == NULL)
- return NULL;
+ goto exit;
if (PyTuple_SetItem(a, 0, args) < 0)
- return NULL;
+ goto exit;
args = a;
}
retval = PyObject_Call(func, args, NULL);
- Py_DECREF(args);
- Py_DECREF(func);
+ exit:
+ Py_XDECREF(args);
+ Py_XDECREF(func);
return retval;
}
More information about the Python-checkins
mailing list