#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.
This commit is contained in:
Amaury Forgeot d'Arc 2009-01-12 23:36:55 +00:00
parent f94d7fa5fb
commit a40d573664
9 changed files with 47 additions and 67 deletions

View file

@ -6090,8 +6090,12 @@ update_one_slot(PyTypeObject *type, slotdef *p)
}
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)