mirror of
https://github.com/python/cpython.git
synced 2025-07-24 11:44:31 +00:00
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:
parent
e16f4dc80a
commit
e8f706eda7
6 changed files with 225 additions and 15 deletions
|
@ -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))
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue