Skip to content

Commit f701237

Browse files
ambvsweeneyde
andauthored
[3.9] bpo-30570: Fix segfault on buildbots caused by stack overflow from recursion in tests (GH-29258) (GH-29415)
(cherry picked from commit d56375a) Co-authored-by: Dennis Sweeney <[email protected]>
1 parent 1e29dce commit f701237

File tree

2 files changed

+18
-12
lines changed

2 files changed

+18
-12
lines changed

Lib/test/pickletester.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2371,7 +2371,8 @@ def test_bad_getattr(self):
23712371
# Issue #3514: crash when there is an infinite loop in __getattr__
23722372
x = BadGetattr()
23732373
for proto in protocols:
2374-
self.assertRaises(RuntimeError, self.dumps, x, proto)
2374+
with support.infinite_recursion():
2375+
self.assertRaises(RuntimeError, self.dumps, x, proto)
23752376

23762377
def test_reduce_bad_iterator(self):
23772378
# Issue4176: crash when 4th and 5th items of __reduce__()

Lib/test/test_isinstance.py

Lines changed: 16 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
import unittest
66
import sys
7+
from test import support
78

89

910

@@ -244,12 +245,14 @@ def test_subclass_tuple(self):
244245
def test_subclass_recursion_limit(self):
245246
# make sure that issubclass raises RecursionError before the C stack is
246247
# blown
247-
self.assertRaises(RecursionError, blowstack, issubclass, str, str)
248+
with support.infinite_recursion():
249+
self.assertRaises(RecursionError, blowstack, issubclass, str, str)
248250

249251
def test_isinstance_recursion_limit(self):
250252
# make sure that issubclass raises RecursionError before the C stack is
251253
# blown
252-
self.assertRaises(RecursionError, blowstack, isinstance, '', str)
254+
with support.infinite_recursion():
255+
self.assertRaises(RecursionError, blowstack, isinstance, '', str)
253256

254257
def test_issubclass_refcount_handling(self):
255258
# bpo-39382: abstract_issubclass() didn't hold item reference while
@@ -276,27 +279,28 @@ class X:
276279
@property
277280
def __bases__(self):
278281
return self.__bases__
279-
280-
self.assertRaises(RecursionError, issubclass, X(), int)
281-
self.assertRaises(RecursionError, issubclass, int, X())
282-
self.assertRaises(RecursionError, isinstance, 1, X())
282+
with support.infinite_recursion():
283+
self.assertRaises(RecursionError, issubclass, X(), int)
284+
self.assertRaises(RecursionError, issubclass, int, X())
285+
self.assertRaises(RecursionError, isinstance, 1, X())
283286

284287
def test_infinite_recursion_via_bases_tuple(self):
285288
"""Regression test for bpo-30570."""
286289
class Failure(object):
287290
def __getattr__(self, attr):
288291
return (self, None)
289-
290-
with self.assertRaises(RecursionError):
291-
issubclass(Failure(), int)
292+
with support.infinite_recursion():
293+
with self.assertRaises(RecursionError):
294+
issubclass(Failure(), int)
292295

293296
def test_infinite_cycle_in_bases(self):
294297
"""Regression test for bpo-30570."""
295298
class X:
296299
@property
297300
def __bases__(self):
298301
return (self, self, self)
299-
self.assertRaises(RecursionError, issubclass, X(), int)
302+
with support.infinite_recursion():
303+
self.assertRaises(RecursionError, issubclass, X(), int)
300304

301305
def test_infinitely_many_bases(self):
302306
"""Regression test for bpo-30570."""
@@ -309,7 +313,8 @@ class B:
309313
pass
310314
A.__getattr__ = B.__getattr__ = X.__getattr__
311315
return (A(), B())
312-
self.assertRaises(RecursionError, issubclass, X(), int)
316+
with support.infinite_recursion():
317+
self.assertRaises(RecursionError, issubclass, X(), int)
313318

314319

315320
def blowstack(fxn, arg, compare_to):

0 commit comments

Comments
 (0)