]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
GH-94329: Don't raise on excessive stack consumption (GH-94421) (GH-94446)
authorMiss Islington (bot) <31488909+miss-islington@users.noreply.github.com>
Thu, 30 Jun 2022 14:53:20 +0000 (07:53 -0700)
committerGitHub <noreply@github.com>
Thu, 30 Jun 2022 14:53:20 +0000 (15:53 +0100)
(cherry picked from commit b152bf448b321e3a4c0a7280e0b608840f5ac661)

Lib/test/test_compile.py
Misc/NEWS.d/next/Core and Builtins/2022-06-29-15-45-04.gh-issue-94329.olUQyk.rst [new file with mode: 0644]
Python/compile.c

index c32c27f33b447c9030b4d1353e4228de4ed7e3e5..d7c536e4ab20d986ed43081c0d41d654e65ed7b2 100644 (file)
@@ -1207,6 +1207,12 @@ class TestExpressionStackSize(unittest.TestCase):
         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 (file)
index 0000000..afd31b6
--- /dev/null
@@ -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.
index 70a754b16d8881249be6eec0147fe6d8d96a5a9d..1bb0d96207d1dbac5665fabbcf76ba2e57817e98 100644 (file)
@@ -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;