Skip to content

Commit

Permalink
pythongh-124722: Fix leak in test_detach_materialized_dict_no_memory
Browse files Browse the repository at this point in the history
  • Loading branch information
sobolevn committed Sep 29, 2024
1 parent 6d0d26e commit d42f6c0
Showing 1 changed file with 31 additions and 14 deletions.
45 changes: 31 additions & 14 deletions Lib/test/test_class.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
"Test the functionality of Python classes implementing operators."

import unittest
import test.support
from test.support import cpython_only
from test.support import import_helper, script_helper

testmeths = [

Expand Down Expand Up @@ -933,20 +934,36 @@ class C:
C.a = X()
C.a = X()

@cpython_only
def test_detach_materialized_dict_no_memory(self):
import _testcapi
class A:
def __init__(self):
self.a = 1
self.b = 2
a = A()
d = a.__dict__
with test.support.catch_unraisable_exception() as ex:
_testcapi.set_nomemory(0, 1)
del a
self.assertEqual(ex.unraisable.exc_type, MemoryError)
with self.assertRaises(KeyError):
d["a"]
# Skip test if _testcapi is not available:
import_helper.import_module('_testcapi')

code = """if 1:
import test.support
import _testcapi
class A:
def __init__(self):
self.a = 1
self.b = 2
a = A()
d = a.__dict__
with test.support.catch_unraisable_exception() as ex:
_testcapi.set_nomemory(0, 1)
del a
assert ex.unraisable.exc_type is MemoryError
try:
d["a"]
except KeyError:
pass
else:
assert False, "KeyError not raised"
"""
rc, out, err = script_helper.assert_python_ok("-c", code)
self.assertEqual(rc, 0)
self.assertFalse(out, msg=out.decode('utf-8'))
self.assertFalse(err, msg=err.decode('utf-8'))

if __name__ == '__main__':
unittest.main()

0 comments on commit d42f6c0

Please sign in to comment.