◐ Shell
clean mode source ↗

[3.10] bpo-30570: Fix segfault on buildbots caused by stack overflow from recursion in tests (GH-29258) by miss-islington · Pull Request #29414 · python/cpython

Expand Up @@ -5,6 +5,7 @@ import unittest import sys import typing from test import support


Expand Down Expand Up @@ -266,12 +267,14 @@ def test_subclass_tuple(self): def test_subclass_recursion_limit(self): # make sure that issubclass raises RecursionError before the C stack is # blown self.assertRaises(RecursionError, blowstack, issubclass, str, str) with support.infinite_recursion(): self.assertRaises(RecursionError, blowstack, issubclass, str, str)
def test_isinstance_recursion_limit(self): # make sure that issubclass raises RecursionError before the C stack is # blown self.assertRaises(RecursionError, blowstack, isinstance, '', str) with support.infinite_recursion(): self.assertRaises(RecursionError, blowstack, isinstance, '', str)
def test_subclass_with_union(self): self.assertTrue(issubclass(int, int | float | int)) Expand Down Expand Up @@ -308,27 +311,28 @@ class X: @property def __bases__(self): return self.__bases__
self.assertRaises(RecursionError, issubclass, X(), int) self.assertRaises(RecursionError, issubclass, int, X()) self.assertRaises(RecursionError, isinstance, 1, X()) with support.infinite_recursion(): self.assertRaises(RecursionError, issubclass, X(), int) self.assertRaises(RecursionError, issubclass, int, X()) self.assertRaises(RecursionError, isinstance, 1, X())
def test_infinite_recursion_via_bases_tuple(self): """Regression test for bpo-30570.""" class Failure(object): def __getattr__(self, attr): return (self, None)
with self.assertRaises(RecursionError): issubclass(Failure(), int) with support.infinite_recursion(): with self.assertRaises(RecursionError): issubclass(Failure(), int)
def test_infinite_cycle_in_bases(self): """Regression test for bpo-30570.""" class X: @property def __bases__(self): return (self, self, self) self.assertRaises(RecursionError, issubclass, X(), int) with support.infinite_recursion(): self.assertRaises(RecursionError, issubclass, X(), int)
def test_infinitely_many_bases(self): """Regression test for bpo-30570.""" Expand All @@ -341,7 +345,8 @@ class B: pass A.__getattr__ = B.__getattr__ = X.__getattr__ return (A(), B()) self.assertRaises(RecursionError, issubclass, X(), int) with support.infinite_recursion(): self.assertRaises(RecursionError, issubclass, X(), int)

def blowstack(fxn, arg, compare_to): Expand Down