diff Objects/typeobject.c @ 50754:e9748db47635 legacy-trunk

#3720: Interpreter crashes when an evil iterator removes its own next function. Now the slot is filled with a function that always raises. Will not backport: extensions compiled with 2.6.x would not run on 2.6.0.
author Amaury Forgeot d'Arc <amauryfa@gmail.com>
date Mon, 12 Jan 2009 23:36:55 +0000
parents 73b9fe1c5397
children 27ba803bdea9
line wrap: on
line diff
--- a/Objects/typeobject.c	Mon Jan 12 22:58:41 2009 +0000
+++ b/Objects/typeobject.c	Mon Jan 12 23:36:55 2009 +0000
@@ -6090,8 +6090,12 @@
 	}
 	do {
 		descr = _PyType_Lookup(type, p->name_strobj);
-		if (descr == NULL)
+		if (descr == NULL) {
+			if (ptr == (void**)&type->tp_iternext) {
+				specific = _PyObject_NextNotImplemented;
+			}
 			continue;
+		}
 		if (Py_TYPE(descr) == &PyWrapperDescr_Type) {
 			void **tptr = resolve_slotdups(type, p->name_strobj);
 			if (tptr == NULL || tptr == ptr)