diff Objects/typeobject.c @ 27614:83701fab32fe 2.2

backport: revision 2.196 date: 2002/12/07 21:39:16; author: tim_one; state: Exp; lines: +27 -28 slot_nb_nonzero(): Another leak uncovered by the sandbox datetime tests. I found the logic too confusing to follow here, so rewrote more than was likely absolutely necessary.
author Neal Norwitz <nnorwitz@gmail.com>
date Sun, 02 Feb 2003 19:59:59 +0000
parents 8e21bcf2158a
children 1e0e67947175
line wrap: on
line diff
--- a/Objects/typeobject.c	Sun Feb 02 19:38:19 2003 +0000
+++ b/Objects/typeobject.c	Sun Feb 02 19:59:59 2003 +0000
@@ -3113,26 +3113,29 @@
 static int
 slot_nb_nonzero(PyObject *self)
 {
-	PyObject *func, *res;
+	PyObject *func, *args;
 	static PyObject *nonzero_str, *len_str;
+	int result = -1;
 
 	func = lookup_maybe(self, "__nonzero__", &nonzero_str);
 	if (func == NULL) {
 		if (PyErr_Occurred())
 			return -1;
 		func = lookup_maybe(self, "__len__", &len_str);
-		if (func == NULL) {
-			if (PyErr_Occurred())
-				return -1;
-			else
-				return 1;
+		if (func == NULL)
+			return PyErr_Occurred() ? -1 : 1;
+	}
+	args = PyTuple_New(0);
+	if (args != NULL) {
+		PyObject *temp = PyObject_Call(func, args, NULL);
+		Py_DECREF(args);
+		if (temp != NULL) {
+			result = PyObject_IsTrue(temp);
+			Py_DECREF(temp);
 		}
 	}
-	res = PyObject_CallObject(func, NULL);
 	Py_DECREF(func);
-	if (res == NULL)
-		return -1;
-	return PyObject_IsTrue(res);
+	return result;
 }
 
 SLOT0(slot_nb_invert, "__invert__")