Why is there a length limit to python's eval?
This issue is caused by a stack overflow in the CPython compiler. An easy way to reproduce the same issue is
>>> code = compile("1" + "+1" * 1000000, "", "eval")Segmentation fault
which proves that the segfault is happening at the compile stage, not during evaluation. (Of course this is also easy to confirm with gdb.)
[Side note: For smaller expressions, the compiler would apply constant folding here anyway, so the only thing happening during the execution of the code is to load the result:
>>> code = compile("1" + "+1" * 1000, "", "eval")>>> eval(code)1001>>> dis.dis(code) 1 0 LOAD_CONST 1000 (1001) 3 RETURN_VALUE
End of side note.]
This issue is a known defect. The Python developers collected several ways to crash the Python interpreter in the directory Lib/test/crashers
of the source distribution. The one corresponding to this issue is Lib/test/crashers/compiler_recursion.py
.