Frame's field f_tstate is NULL when the generator is exhausted.
#define PyFrame_Check(op) (Py_TYPE(op) == &PyFrame_Type)
#define PyFrame_IsRestricted(f) \
- ((f)->f_builtins != (f)->f_tstate->interp->builtins)
+ ((f)->f_tstate && (f)->f_builtins != (f)->f_tstate->interp->builtins)
PyAPI_FUNC(PyFrameObject *) PyFrame_New(PyThreadState *, PyCodeObject *,
PyObject *, PyObject *);
"""
+crash_test = """
+>>> def foo(): yield
+>>> gen = foo()
+>>> gen.next()
+>>> print gen.gi_frame.f_restricted # This would segfault.
+False
+
+"""
+
+
__test__ = {"tut": tutorial_tests,
"pep": pep_tests,
"email": email_tests,
"weakref": weakref_tests,
"coroutine": coroutine_tests,
"refleaks": refleaks_tests,
+ "crash": crash_test,
}
# Magic test name that regrtest.py invokes *after* importing this module.
--- /dev/null
+Fix a segfault when accessing ``generator.gi_frame.f_restricted`` when the
+generator is exhausted. Patch by Zackery Spytz.