gh-98925: Lower marshal recursion depth for WASI (GH-98938)
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.
diff --git a/.gitignore b/.gitignore
index 6934faa..5055e6d 100644
--- a/.gitignore
+++ b/.gitignore
@@ -116,6 +116,7 @@
Tools/unicode/data/
/autom4te.cache
/build/
+/builddir/
/config.cache
/config.log
/config.status
diff --git a/Lib/test/test_marshal.py b/Lib/test/test_marshal.py
index fe4f368..54c5a32 100644
--- a/Lib/test/test_marshal.py
+++ b/Lib/test/test_marshal.py
@@ -260,6 +260,8 @@ def test_recursion_limit(self):
#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
index 0000000..7c965dc
--- /dev/null
+++ b/Misc/NEWS.d/next/Core and Builtins/2022-10-31-18-03-10.gh-issue-98925.zpdjVd.rst
@@ -0,0 +1,2 @@
+Lower the recursion depth for marshal on WASI to support (in-development)
+wasmtime 2.0.
diff --git a/Python/marshal.c b/Python/marshal.c
index 90a4405..2690f55 100644
--- a/Python/marshal.c
+++ b/Python/marshal.c
@@ -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