This issue tracker has been migrated to GitHub, and is currently read-only.
For more information, see the GitHub FAQs in the Python's Developer Guide.

classification
Title: Patch for issue 5765: stack overflow evaluating eval("()" * 30000)
Type: Stage:
Components: Versions:
process
Status: closed Resolution: duplicate
Dependencies: Superseder:
Assigned To: Nosy List: ag6502
Priority: normal Keywords: patch

Created on 2012-07-07 13:22 by ag6502, last changed 2022-04-11 14:57 by admin. This issue is now closed.

Files
File name Uploaded Description Edit
compiler_recursion_limit_check.patch ag6502, 2012-07-07 13:22 review
Messages (2)
msg164839 - (view) Author: Andrea Griffini (ag6502) * Date: 2012-07-07 13:22
This is a fix for issue #5765: stack overflow evaluating eval("()" * 30000)

The solution was to add two fields (recursion_depth and
recursion_limit) to the symbol table object and just increment and
check the depth in symtable_visit_expr raising a RuntimeError in case
the limit is exceeded.

The test case added also covers other similar cases (a.b.b.b.b.b...
and a[0][0][0][0]....)

There is no depth check in when visiting statement because I cannot
think to a way to nesting statements too much without getting other
errors before. If there is a way to do it, it would be trivial to also
cover that part.

The patch uses the current depth and current recursion limit but
multiplies them for a factor because I suppose that the amount of C
stack used by the compiler per recursion is smaller than the amount
used by the interpreter; the constant in the patch is 4. Using a
constant of 1 (i.e. just using the normal recursion limit) doesn't
allow a previously existing test about big expressions to pass.
msg164841 - (view) Author: Andrea Griffini (ag6502) * Date: 2012-07-07 13:35
I sent an email because I was not able to log in. The patch has been submitted to the correct issue (6765).
History
Date User Action Args
2022-04-11 14:57:32adminsetgithub: 59479
2012-07-07 13:35:25ag6502setstatus: open -> closed
resolution: duplicate
messages: + msg164841
2012-07-07 13:22:04ag6502create