[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