Staging
v0.8.1
https://github.com/python/cpython
Revision 8de34cdb952a2e3b8d7a9a213845cad01a8cece3 authored by Pablo Galindo on 02 September 2020, 20:30:51 UTC, committed by GitHub on 02 September 2020, 20:30:51 UTC
This program can segfault the parser by stack overflow:

```
import ast

code = "f(" + ",".join(['a' for _ in range(100000)]) + ")"
print("Ready!")
ast.parse(code)
```

the reason is that the rule for arguments has a simple recursion when collecting args:

args[expr_ty]:
    [...]
    | a=named_expression b=[',' c=args { c }] {
        [...] }.
(cherry picked from commit 4a97b1517a6b5ff22e2984b677a680b07ff0ce11)

Co-authored-by: Pablo Galindo <Pablogsal@gmail.com>
1 parent a763ee3
History
Tip revision: 8de34cdb952a2e3b8d7a9a213845cad01a8cece3 authored by Pablo Galindo on 02 September 2020, 20:30:51 UTC
[3.9] bpo-41690: Use a loop to collect args in the parser instead of recursion (GH-22053) (GH-22067)
Tip revision: 8de34cd
File Mode Size
pegen
pgen
Python.asdl -rw-r--r-- 5.2 KB
acceler.c -rw-r--r-- 3.3 KB
asdl.py -rw-r--r-- 12.7 KB
asdl_c.py -rwxr-xr-x 49.2 KB
grammar1.c -rw-r--r-- 1.0 KB
listnode.c -rw-r--r-- 1.7 KB
myreadline.c -rw-r--r-- 11.6 KB
node.c -rw-r--r-- 5.1 KB
parser.c -rw-r--r-- 12.4 KB
parser.h -rw-r--r-- 1.4 KB
parsetok.c -rw-r--r-- 14.0 KB
token.c -rw-r--r-- 4.5 KB
tokenizer.c -rw-r--r-- 56.9 KB
tokenizer.h -rw-r--r-- 3.8 KB

back to top