summaryrefslogtreecommitdiff
path: root/Python/compile.c
diff options
context:
space:
mode:
authorNick Coghlan <ncoghlan@gmail.com>2012-11-04 23:14:34 +1000
committerNick Coghlan <ncoghlan@gmail.com>2012-11-04 23:14:34 +1000
commitedcdaaa21d40a48b0fad3672f9a532534b935152 (patch)
treed6b1920626cc34c6a7a40df6569270616003c0dc /Python/compile.c
parentdc7ff1e29901fae6638fdc1d479baf286bc0e803 (diff)
downloadcpython-edcdaaa21d40a48b0fad3672f9a532534b935152.tar.gz
Issue #5765: Apply a hard recursion limit in the compiler
Previously, excessive nesting in expressions would blow the stack and segfault the interpreter. Now, a hard limit based on the configured recursion limit and a hardcoded scaling factor is applied.
Diffstat (limited to 'Python/compile.c')
-rw-r--r--Python/compile.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/Python/compile.c b/Python/compile.c
index ff55220443..5016f99af3 100644
--- a/Python/compile.c
+++ b/Python/compile.c
@@ -141,6 +141,11 @@ struct compiler_unit {
The u pointer points to the current compilation unit, while units
for enclosing blocks are stored in c_stack. The u and c_stack are
managed by compiler_enter_scope() and compiler_exit_scope().
+
+Note that we don't track recursion levels during compilation - the
+task of detecting and rejecting excessive levels of nesting is
+handled by the symbol analysis pass.
+
*/
struct compiler {