Issue #14010: Fix a crash when iterating or deleting deeply nested filters

(builting and in itertools module, i.e. map(), itertools.chain(), etc).
This commit is contained in:
Serhiy Storchaka 2013-04-06 21:14:43 +03:00
parent e16f4dc80a
commit e8f706eda7
6 changed files with 225 additions and 15 deletions

View file

@ -1217,7 +1217,7 @@ PyNumber_AsSsize_t(PyObject *item, PyObject *err)
to be an int or have an __int__ method. Steals integral's
reference. error_format will be used to create the TypeError if integral
isn't actually an Integral instance. error_format should be a format string
that can accept a char* naming integral's type.
that can accept a char* naming integral's type.
*/
static PyObject *
convert_integral_to_int(PyObject *integral, const char *error_format)
@ -1236,7 +1236,7 @@ convert_integral_to_int(PyObject *integral, const char *error_format)
}
PyErr_Format(PyExc_TypeError, error_format, Py_TYPE(integral)->tp_name);
Py_DECREF(integral);
return NULL;
return NULL;
}
@ -2681,7 +2681,10 @@ PyObject *
PyIter_Next(PyObject *iter)
{
PyObject *result;
if (Py_EnterRecursiveCall(" while iterating"))
return NULL;
result = (*iter->ob_type->tp_iternext)(iter);
Py_LeaveRecursiveCall();
if (result == NULL &&
PyErr_Occurred() &&
PyErr_ExceptionMatches(PyExc_StopIteration))