[Python-checkins] GH-94329: Don't raise on excessive stack consumption (GH-94421) (GH-94446)

markshannon webhook-mailer at python.org
Thu Jun 30 10:53:25 EDT 2022


https://github.com/python/cpython/commit/f58c366a730ae3e68028dbf63aba7c4033eaec9b
commit: f58c366a730ae3e68028dbf63aba7c4033eaec9b
branch: 3.11
author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com>
committer: markshannon <mark at hotpy.org>
date: 2022-06-30T15:53:20+01:00
summary:

GH-94329: Don't raise on excessive stack consumption (GH-94421) (GH-94446)

(cherry picked from commit b152bf448b321e3a4c0a7280e0b608840f5ac661)

files:
A Misc/NEWS.d/next/Core and Builtins/2022-06-29-15-45-04.gh-issue-94329.olUQyk.rst
M Lib/test/test_compile.py
M Python/compile.c

diff --git a/Lib/test/test_compile.py b/Lib/test/test_compile.py
index c32c27f33b447..d7c536e4ab20d 100644
--- a/Lib/test/test_compile.py
+++ b/Lib/test/test_compile.py
@@ -1207,6 +1207,12 @@ def test_func_and(self):
         code += "   x and x\n" * self.N
         self.check_stack_size(code)
 
+    def test_stack_3050(self):
+        M = 3050
+        code = "x," * M + "=t"
+        # This raised on 3.10.0 to 3.10.5
+        compile(code, "<foo>", "single")
+
 
 class TestStackSizeStability(unittest.TestCase):
     # Check that repeating certain snippets doesn't increase the stack size
diff --git a/Misc/NEWS.d/next/Core and Builtins/2022-06-29-15-45-04.gh-issue-94329.olUQyk.rst b/Misc/NEWS.d/next/Core and Builtins/2022-06-29-15-45-04.gh-issue-94329.olUQyk.rst
new file mode 100644
index 0000000000000..afd31b6e4dc44
--- /dev/null
+++ b/Misc/NEWS.d/next/Core and Builtins/2022-06-29-15-45-04.gh-issue-94329.olUQyk.rst	
@@ -0,0 +1,2 @@
+Compile and run code with unpacking of extremely large sequences (1000s of elements).
+Such code failed to compile. It now compiles and runs correctly.
diff --git a/Python/compile.c b/Python/compile.c
index 70a754b16d888..1bb0d96207d1d 100644
--- a/Python/compile.c
+++ b/Python/compile.c
@@ -8391,12 +8391,7 @@ assemble(struct compiler *c, int addNone)
     if (maxdepth < 0) {
         goto error;
     }
-    if (maxdepth > MAX_ALLOWED_STACK_USE) {
-        PyErr_Format(PyExc_SystemError,
-                     "excessive stack use: stack is %d deep",
-                     maxdepth);
-        goto error;
-    }
+    /* TO DO -- For 3.12, make sure that `maxdepth <= MAX_ALLOWED_STACK_USE` */
 
     if (label_exception_targets(entryblock)) {
         goto error;



More information about the Python-checkins mailing list