Skip to content

Commit 0919dec

Browse files
committed
Fix segmentation fault in deeply nested filter() iterator chains
1 parent 0c8fecc commit 0919dec

File tree

1 file changed

+10
-2
lines changed

1 file changed

+10
-2
lines changed

Python/bltinmodule.c

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -579,6 +579,14 @@ filter_traverse(PyObject *self, visitproc visit, void *arg)
579579
return 0;
580580
}
581581

582+
static int
583+
filter_clear(filterobject *lz)
584+
{
585+
Py_CLEAR(lz->it);
586+
Py_CLEAR(lz->func);
587+
return 0;
588+
}
589+
582590
static PyObject *
583591
filter_next(PyObject *self)
584592
{
@@ -660,8 +668,8 @@ PyTypeObject PyFilter_Type = {
660668
Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC |
661669
Py_TPFLAGS_BASETYPE, /* tp_flags */
662670
filter_doc, /* tp_doc */
663-
filter_traverse, /* tp_traverse */
664-
0, /* tp_clear */
671+
(traverseproc)filter_traverse, /* tp_traverse */
672+
(inquiry)filter_clear, /* tp_clear */
665673
0, /* tp_richcompare */
666674
0, /* tp_weaklistoffset */
667675
PyObject_SelfIter, /* tp_iter */

0 commit comments

Comments
 (0)