mirror of
https://github.com/python/cpython.git
synced 2025-08-02 16:13:13 +00:00
gh-93671: Avoid exponential backtracking in deeply nested sequence patterns in match statements (GH-93680)
Co-authored-by: Łukasz Langa <lukasz@langa.pl>
This commit is contained in:
parent
21a9a85ff4
commit
53a8b17895
4 changed files with 36 additions and 3 deletions
|
@ -471,7 +471,7 @@ or_pattern[pattern_ty]:
|
|||
| patterns[asdl_pattern_seq*]='|'.closed_pattern+ {
|
||||
asdl_seq_LEN(patterns) == 1 ? asdl_seq_GET(patterns, 0) : _PyAST_MatchOr(patterns, EXTRA) }
|
||||
|
||||
closed_pattern[pattern_ty]:
|
||||
closed_pattern[pattern_ty] (memo):
|
||||
| literal_pattern
|
||||
| capture_pattern
|
||||
| wildcard_pattern
|
||||
|
@ -558,7 +558,7 @@ maybe_star_pattern[pattern_ty]:
|
|||
| star_pattern
|
||||
| pattern
|
||||
|
||||
star_pattern[pattern_ty]:
|
||||
star_pattern[pattern_ty] (memo):
|
||||
| '*' target=pattern_capture_target {
|
||||
_PyAST_MatchStar(target->v.Name.id, EXTRA) }
|
||||
| '*' wildcard_pattern {
|
||||
|
@ -1312,4 +1312,4 @@ invalid_kvpair:
|
|||
| a=expression !(':') {
|
||||
RAISE_ERROR_KNOWN_LOCATION(p, PyExc_SyntaxError, a->lineno, a->end_col_offset - 1, a->end_lineno, -1, "':' expected after dictionary key") }
|
||||
| expression ':' a='*' bitwise_or { RAISE_SYNTAX_ERROR_STARTING_FROM(a, "cannot use a starred expression in a dictionary value") }
|
||||
| expression a=':' {RAISE_SYNTAX_ERROR_KNOWN_LOCATION(a, "expression expected after dictionary key and ':'") }
|
||||
| expression a=':' {RAISE_SYNTAX_ERROR_KNOWN_LOCATION(a, "expression expected after dictionary key and ':'") }
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue