[Python-checkins] python/dist/src/Objects typeobject.c,2.126.4.32,2.126.4.33

nnorwitz@users.sourceforge.net nnorwitz@users.sourceforge.net
2003年3月23日 06:36:53 -0800


Update of /cvsroot/python/python/dist/src/Objects
In directory sc8-pr-cvs1:/tmp/cvs-serv7534/Objects
Modified Files:
 Tag: release22-maint
	typeobject.c 
Log Message:
Backport Tim's checkin 2.218:
 slot_sq_contains(): This leaked a reference to the result of calling
 __contains__().
Index: typeobject.c
===================================================================
RCS file: /cvsroot/python/python/dist/src/Objects/typeobject.c,v
retrieving revision 2.126.4.32
retrieving revision 2.126.4.33
diff -C2 -d -r2.126.4.32 -r2.126.4.33
*** typeobject.c	2 Feb 2003 19:59:59 -0000	2.126.4.32
--- typeobject.c	23 Mar 2003 14:36:50 -0000	2.126.4.33
***************
*** 3026,3033 ****
 {
 	PyObject *func, *res, *args;
 	static PyObject *contains_str;
 
 	func = lookup_maybe(self, "__contains__", &contains_str);
- 
 	if (func != NULL) {
 		args = Py_BuildValue("(O)", value);
--- 3026,3034 ----
 {
 	PyObject *func, *res, *args;
+ 	int result = -1;
+ 
 	static PyObject *contains_str;
 
 	func = lookup_maybe(self, "__contains__", &contains_str);
 	if (func != NULL) {
 		args = Py_BuildValue("(O)", value);
***************
*** 3039,3052 ****
 		}
 		Py_DECREF(func);
! 		if (res == NULL)
! 			return -1;
! 		return PyObject_IsTrue(res);
 	}
! 	else if (PyErr_Occurred())
! 		return -1;
! 	else {
! 		return _PySequence_IterSearch(self, value,
! 					 PY_ITERSEARCH_CONTAINS);
 	}
 }
 
--- 3040,3053 ----
 		}
 		Py_DECREF(func);
! 		if (res != NULL) {
! 			result = PyObject_IsTrue(res);
! 			Py_DECREF(res);
! 		}
 	}
! 	else if (! PyErr_Occurred()) {
! 		result = _PySequence_IterSearch(self, value,
! 						 PY_ITERSEARCH_CONTAINS);
 	}
+ 	return result;
 }
 

AltStyle によって変換されたページ (->オリジナル) /