]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
gh-98925: Lower marshal recursion depth for WASI (GH-98938)
authorBrett Cannon <brett@python.org>
Tue, 1 Nov 2022 22:51:05 +0000 (15:51 -0700)
committerGitHub <noreply@github.com>
Tue, 1 Nov 2022 22:51:05 +0000 (15:51 -0700)
For wasmtime 2.0, the stack depth cost is 6% higher. This causes the default max `marshal` recursion depth to blow the stack.

As the default marshal depth is 2000 and Windows is set to 1000, split the difference and choose 1500 for WASI to be safe.

.gitignore
Lib/test/test_marshal.py
Misc/NEWS.d/next/Core and Builtins/2022-10-31-18-03-10.gh-issue-98925.zpdjVd.rst [new file with mode: 0644]
Python/marshal.c

index 6934faa91e987454164c72142bf119bdf17fd40e..5055e6d225c7969d576cc4dcb7223dbb16c99c23 100644 (file)
@@ -116,6 +116,7 @@ PCbuild/win32/
 Tools/unicode/data/
 /autom4te.cache
 /build/
+/builddir/
 /config.cache
 /config.log
 /config.status
index fe4f368bed42f4c0f57d79a5b71e88833d941a44..54c5a324897d235be74b162ea598e1e97e937795 100644 (file)
@@ -260,6 +260,8 @@ class BugsTestCase(unittest.TestCase):
         #if os.name == 'nt' and support.Py_DEBUG:
         if os.name == 'nt':
             MAX_MARSHAL_STACK_DEPTH = 1000
+        elif sys.platform == 'wasi':
+            MAX_MARSHAL_STACK_DEPTH = 1500
         else:
             MAX_MARSHAL_STACK_DEPTH = 2000
         for i in range(MAX_MARSHAL_STACK_DEPTH - 2):
diff --git a/Misc/NEWS.d/next/Core and Builtins/2022-10-31-18-03-10.gh-issue-98925.zpdjVd.rst b/Misc/NEWS.d/next/Core and Builtins/2022-10-31-18-03-10.gh-issue-98925.zpdjVd.rst
new file mode 100644 (file)
index 0000000..7c965dc
--- /dev/null
@@ -0,0 +1,2 @@
+Lower the recursion depth for marshal on WASI to support (in-development)
+wasmtime 2.0.
index 90a440509180060eb2214ebf9999b9ba6bf0e996..2690f55766c83bf1851a523ab91267e96f22014a 100644 (file)
@@ -34,6 +34,8 @@ module marshal
  */
 #if defined(MS_WINDOWS)
 #define MAX_MARSHAL_STACK_DEPTH 1000
+#elif defined(__wasi__)
+#define MAX_MARSHAL_STACK_DEPTH 1500
 #else
 #define MAX_MARSHAL_STACK_DEPTH 2000
 #endif