[3.10] bpo-46707: Avoid potential exponential backtracking in some syntax errors (GH-31241). (GH-31242)

(cherry picked from commit b71dc71905ab674ccaa4a56230d17a28f61c325c)

Co-authored-by: Pablo Galindo Salgado <Pablogsal@gmail.com>
diff --git a/Lib/test/test_syntax.py b/Lib/test/test_syntax.py
index ac5a41c..09c0d56 100644
--- a/Lib/test/test_syntax.py
+++ b/Lib/test/test_syntax.py
@@ -1617,6 +1617,14 @@ def test_error_on_parser_stack_overflow(self):
                 with self.assertRaises(MemoryError):
                     compile(source, "<string>", mode)
 
+    @support.cpython_only
+    def test_deep_invalid_rule(self):
+        # Check that a very deep invalid rule in the PEG
+        # parser doesn't have exponential backtracking.
+        source = "d{{{{{{{{{{{{{{{{{{{{{{{{{```{{{{{{{ef f():y"
+        with self.assertRaises(SyntaxError):
+            compile(source, "<string>", "exec")
+
 
 def test_main():
     support.run_unittest(SyntaxTestCase)