Skip to content

Commit 413beaa

Browse files
committed
Fix filter_clear signature and address review feedback
1 parent 1e63409 commit 413beaa

File tree

3 files changed

+6
-10
lines changed

3 files changed

+6
-10
lines changed

Lib/test/test_builtin.py

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1132,8 +1132,6 @@ def test_filter_dealloc(self):
11321132
del i
11331133
gc.collect()
11341134

1135-
@support.skip_wasi_stack_overflow()
1136-
@support.skip_emscripten_stack_overflow()
11371135
@support.requires_resource('cpu')
11381136
def test_filter_deep_nesting_recursion_error(self):
11391137
# gh-137894: Test that deeply nested filter() iterator chains
Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,3 @@
1-
Fix segmentation fault in deeply nested :func:`filter` iterator chains by
2-
adding a ``tp_clear`` method to the filter object. Previously, creating
3-
thousands of nested filter iterators and then consuming them would cause
4-
a stack overflow during garbage collection, leading to interpreter crashes.
5-
Now such cases properly raise :exc:`RecursionError` instead of crashing
6-
the interpreter.
1+
Fix segmentation fault in deeply nested :func:`filter` iterator chains.
2+
Deeply nested filter iterators now properly raise :exc:`RecursionError`
3+
instead of crashing the interpreter.

Python/bltinmodule.c

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -580,8 +580,9 @@ filter_traverse(PyObject *self, visitproc visit, void *arg)
580580
}
581581

582582
static int
583-
filter_clear(filterobject *lz)
583+
filter_clear(PyObject *self)
584584
{
585+
filterobject *lz = _filterobject_CAST(self);
585586
Py_CLEAR(lz->it);
586587
Py_CLEAR(lz->func);
587588
return 0;
@@ -668,7 +669,7 @@ PyTypeObject PyFilter_Type = {
668669
Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC |
669670
Py_TPFLAGS_BASETYPE, /* tp_flags */
670671
filter_doc, /* tp_doc */
671-
(traverseproc)filter_traverse, /* tp_traverse */
672+
filter_traverse, /* tp_traverse */
672673
(inquiry)filter_clear, /* tp_clear */
673674
0, /* tp_richcompare */
674675
0, /* tp_weaklistoffset */

0 commit comments

Comments
 (0)