GH-130397: remove special-casing of C stack depth for WASI (#134469)
Removed special-casing for WASI when setting C stack depth limits. Since WASI has its own C stack checking this isn't a security risk. Also disabled some tests that stopped passing. They all happened to have already been disabled under Emscripten.
This commit is contained in:
@@ -29,9 +29,6 @@ PyAPI_DATA(int) (*PyOS_InputHook)(void);
|
||||
# define PYOS_LOG2_STACK_MARGIN 12
|
||||
#elif defined(Py_DEBUG) && defined(WIN32)
|
||||
# define PYOS_LOG2_STACK_MARGIN 12
|
||||
#elif defined(__wasi__)
|
||||
/* Web assembly has two stacks, so this isn't really a size */
|
||||
# define PYOS_LOG2_STACK_MARGIN 9
|
||||
#else
|
||||
# define PYOS_LOG2_STACK_MARGIN 11
|
||||
#endif
|
||||
|
||||
@@ -372,6 +372,7 @@ class TestCopy(unittest.TestCase):
|
||||
self.assertIsNot(x[0], y[0])
|
||||
|
||||
@support.skip_emscripten_stack_overflow()
|
||||
@support.skip_wasi_stack_overflow()
|
||||
def test_deepcopy_reflexive_list(self):
|
||||
x = []
|
||||
x.append(x)
|
||||
@@ -400,6 +401,7 @@ class TestCopy(unittest.TestCase):
|
||||
self.assertIs(x, y)
|
||||
|
||||
@support.skip_emscripten_stack_overflow()
|
||||
@support.skip_wasi_stack_overflow()
|
||||
def test_deepcopy_reflexive_tuple(self):
|
||||
x = ([],)
|
||||
x[0].append(x)
|
||||
@@ -418,6 +420,7 @@ class TestCopy(unittest.TestCase):
|
||||
self.assertIsNot(x["foo"], y["foo"])
|
||||
|
||||
@support.skip_emscripten_stack_overflow()
|
||||
@support.skip_wasi_stack_overflow()
|
||||
def test_deepcopy_reflexive_dict(self):
|
||||
x = {}
|
||||
x['foo'] = x
|
||||
|
||||
@@ -3943,6 +3943,7 @@ class ClassPropertiesAndMethods(unittest.TestCase):
|
||||
del C.__del__
|
||||
|
||||
@unittest.skipIf(support.is_emscripten, "Seems to works in Pyodide?")
|
||||
@support.skip_wasi_stack_overflow()
|
||||
def test_slots_trash(self):
|
||||
# Testing slot trash...
|
||||
# Deallocating deeply nested slotted trash caused stack overflows
|
||||
@@ -4868,6 +4869,7 @@ class ClassPropertiesAndMethods(unittest.TestCase):
|
||||
deque.append(thing, thing)
|
||||
|
||||
@support.skip_emscripten_stack_overflow()
|
||||
@support.skip_wasi_stack_overflow()
|
||||
def test_repr_as_str(self):
|
||||
# Issue #11603: crash or infinite loop when rebinding __str__ as
|
||||
# __repr__.
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import collections.abc
|
||||
import types
|
||||
import unittest
|
||||
from test.support import skip_emscripten_stack_overflow, exceeds_recursion_limit
|
||||
from test.support import skip_emscripten_stack_overflow, skip_wasi_stack_overflow, exceeds_recursion_limit
|
||||
|
||||
class TestExceptionGroupTypeHierarchy(unittest.TestCase):
|
||||
def test_exception_group_types(self):
|
||||
@@ -465,12 +465,14 @@ class DeepRecursionInSplitAndSubgroup(unittest.TestCase):
|
||||
return e
|
||||
|
||||
@skip_emscripten_stack_overflow()
|
||||
@skip_wasi_stack_overflow()
|
||||
def test_deep_split(self):
|
||||
e = self.make_deep_eg()
|
||||
with self.assertRaises(RecursionError):
|
||||
e.split(TypeError)
|
||||
|
||||
@skip_emscripten_stack_overflow()
|
||||
@skip_wasi_stack_overflow()
|
||||
def test_deep_subgroup(self):
|
||||
e = self.make_deep_eg()
|
||||
with self.assertRaises(RecursionError):
|
||||
|
||||
@@ -318,6 +318,7 @@ class TestIsInstanceIsSubclass(unittest.TestCase):
|
||||
self.assertRaises(RecursionError, isinstance, 1, X())
|
||||
|
||||
@support.skip_emscripten_stack_overflow()
|
||||
@support.skip_wasi_stack_overflow()
|
||||
def test_infinite_recursion_via_bases_tuple(self):
|
||||
"""Regression test for bpo-30570."""
|
||||
class Failure(object):
|
||||
@@ -328,6 +329,7 @@ class TestIsInstanceIsSubclass(unittest.TestCase):
|
||||
issubclass(Failure(), int)
|
||||
|
||||
@support.skip_emscripten_stack_overflow()
|
||||
@support.skip_wasi_stack_overflow()
|
||||
def test_infinite_cycle_in_bases(self):
|
||||
"""Regression test for bpo-30570."""
|
||||
class X:
|
||||
|
||||
@@ -69,6 +69,7 @@ class TestRecursion:
|
||||
|
||||
|
||||
@support.skip_emscripten_stack_overflow()
|
||||
@support.skip_wasi_stack_overflow()
|
||||
def test_highly_nested_objects_decoding(self):
|
||||
very_deep = 200000
|
||||
# test that loading highly-nested objects doesn't segfault when C
|
||||
@@ -98,6 +99,7 @@ class TestRecursion:
|
||||
self.dumps(d)
|
||||
|
||||
@support.skip_emscripten_stack_overflow()
|
||||
@support.skip_wasi_stack_overflow()
|
||||
def test_endless_recursion(self):
|
||||
# See #12051
|
||||
class EndlessJSONEncoder(self.json.JSONEncoder):
|
||||
|
||||
@@ -0,0 +1,3 @@
|
||||
Remove special-casing for C stack depth limits for WASI. Due to
|
||||
WebAssembly's built-in stack protection this does not pose a security
|
||||
concern.
|
||||
@@ -360,9 +360,6 @@ _Py_EnterRecursiveCallUnchecked(PyThreadState *tstate)
|
||||
# define Py_C_STACK_SIZE 1200000
|
||||
#elif defined(__sparc__)
|
||||
# define Py_C_STACK_SIZE 1600000
|
||||
#elif defined(__wasi__)
|
||||
/* Web assembly has two stacks, so this isn't really the stack depth */
|
||||
# define Py_C_STACK_SIZE 131072 // wasi-libc DEFAULT_STACK_SIZE
|
||||
#elif defined(__hppa__) || defined(__powerpc64__)
|
||||
# define Py_C_STACK_SIZE 2000000
|
||||
#else
|
||||
|
||||
Reference in New Issue
Block a user