[3.14] gh-148653: Fix reference leaks in test_marshal introduced in gh-148698 (GH-148725) (GH-148727)

(cherry picked from commit 7ce737ea11)

Co-authored-by: Serhiy Storchaka <storchaka@gmail.com>
This commit is contained in:
Miss Islington (bot)
2026-04-18 14:35:51 +02:00
committed by GitHub
parent d496c637a3
commit a37b105eec
+9 -4
View File
@@ -357,6 +357,9 @@ class BugsTestCase(unittest.TestCase):
code = f.__code__
a = []
code = code.replace(co_consts=code.co_consts + (a,))
# This test creates a reference loop which leads to reference leaks,
# so we need to break the loop manually. See gh-148722.
self.addCleanup(a.clear)
a.append(code)
for v in range(marshal.version + 1):
self.assertRaises(ValueError, marshal.dumps, code, v)
@@ -404,10 +407,12 @@ class BugsTestCase(unittest.TestCase):
self.assertIs(a[0][None], a)
# Direct self-reference which cannot be created in Python.
data = b'\xa8\x01\x00\x00\x00r\x00\x00\x00\x00' # (<R>,)
a = marshal.loads(data)
self.assertIsInstance(a, tuple)
self.assertIs(a[0], a)
# This creates a reference loop which cannot be collected.
if False:
data = b'\xa8\x01\x00\x00\x00r\x00\x00\x00\x00' # (<R>,)
a = marshal.loads(data)
self.assertIsInstance(a, tuple)
self.assertIs(a[0], a)
# Direct self-references which cannot be created in Python
# because of unhashability.