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.

Author BTaskaya
Recipients BTaskaya, belopolsky, benjamin.peterson, eric.snow, georg.brandl, gregory.p.smith, meador.inge, ppperry, terry.reedy
Date 2020-07-06.09:31:57
SpamBayes Score -1.0
Marked as misclassified Yes
Message-id <1594027917.95.0.546537414874.issue11105@roundup.psfhosted.org>
In-reply-to
Content
> With 3.9 on Windows, using Benjamin's example, I do not get the Windows equivalent of a seg fault.  However, execution stops at compile with no exception, including SystemExit.

I can still reproduce on Linux,

 $ python
Python 3.10.0a0 (heads/bpo-xxxxx:f2947e354c, May 21 2020, 18:54:57) 
[GCC 9.2.1 20191008] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import ast
>>> e = ast.UnaryOp(op=ast.Not(), lineno=0, col_offset=0)
>>> e.operand = e
>>> compile(ast.Expression(e), "<test>", "eval")
[1]    15320 segmentation fault (core dumped)  python


> These examples amount to limited fuzz testing of compile().  I think it should raise something like "SyntaxError: recursive ast" or even 'bad ast' if malformed non-recursive asts have the same issue.

I dont think it would be easy to locate such errors before they happen, instead I propose (actually already proposed in PR 20594) to add recursion guards to places where this might happen. This can prevent crashes on both direct and indirect cycles

>>> import ast
>>> e = ast.UnaryOp(op=ast.Not(), lineno=0, col_offset=0)
>>> e.operand = e
>>> compile(ast.Expression(e), "<test>", "eval")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
RecursionError: maximum recursion depth exceeded while traversing 'expr' node
>>> e = ast.UnaryOp(op=ast.Not(), lineno=0, col_offset=0)
>>> f = ast.UnaryOp(op=ast.Not(), lineno=0, col_offset=0)
>>> e.operand = f
>>> f.operand = e
>>> compile(ast.Expression(e), "<test>", "eval")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
RecursionError: maximum recursion depth exceeded while traversing 'expr' node
History
Date User Action Args
2020-07-06 09:31:58BTaskayasetrecipients: + BTaskaya, georg.brandl, terry.reedy, gregory.p.smith, belopolsky, benjamin.peterson, meador.inge, eric.snow, ppperry
2020-07-06 09:31:57BTaskayasetmessageid: <1594027917.95.0.546537414874.issue11105@roundup.psfhosted.org>
2020-07-06 09:31:57BTaskayalinkissue11105 messages
2020-07-06 09:31:57BTaskayacreate