diff options
author | Miss Islington (bot) <31488909+miss-islington@users.noreply.github.com> | 2021-11-04 13:45:05 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-11-04 13:45:05 -0700 |
commit | 1f3ae5c1ca5a8e7696bad414c1de38e0f5f1e2c3 (patch) | |
tree | 3ac92e70c7975acb6b56830b8f9783eb6b9492aa /Lib/test/test_isinstance.py | |
parent | c0f3281d6ca5c59d4a11698364463d968b9ddd3c (diff) | |
download | cpython-git-1f3ae5c1ca5a8e7696bad414c1de38e0f5f1e2c3.tar.gz |
bpo-30570: Fix segfault on buildbots caused by stack overflow from recursion in tests (GH-29258)
* Don't stackoveflow on debug builds
* Also catch the pickletester case
(cherry picked from commit d56375a0dd4cee162081b173310298a3d32af293)
Co-authored-by: Dennis Sweeney <36520290+sweeneyde@users.noreply.github.com>
Diffstat (limited to 'Lib/test/test_isinstance.py')
-rw-r--r-- | Lib/test/test_isinstance.py | 27 |
1 files changed, 16 insertions, 11 deletions
diff --git a/Lib/test/test_isinstance.py b/Lib/test/test_isinstance.py index 6ab44be9a2..9d37cff990 100644 --- a/Lib/test/test_isinstance.py +++ b/Lib/test/test_isinstance.py @@ -5,6 +5,7 @@ import unittest import sys import typing +from test import support @@ -266,12 +267,14 @@ class TestIsInstanceIsSubclass(unittest.TestCase): 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)) @@ -308,19 +311,19 @@ class TestIsInstanceIsSubclass(unittest.TestCase): @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.""" @@ -328,7 +331,8 @@ class TestIsInstanceIsSubclass(unittest.TestCase): @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.""" @@ -341,7 +345,8 @@ class TestIsInstanceIsSubclass(unittest.TestCase): 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): |