mirror of
https://github.com/python/cpython.git
synced 2025-11-01 10:45:30 +00:00
bpo-38588: Fix possible crashes in dict and list when calling PyObject_RichCompareBool (GH-17734)
Take strong references before calling PyObject_RichCompareBool to protect against the case where the object dies during the call.
This commit is contained in:
parent
ee9ff05ec2
commit
2d5bf568ea
5 changed files with 47 additions and 1 deletions
|
|
@ -1221,7 +1221,7 @@ class DictTest(unittest.TestCase):
|
|||
support.check_free_after_iterating(self, lambda d: iter(d.items()), dict)
|
||||
|
||||
def test_equal_operator_modifying_operand(self):
|
||||
# test fix for seg fault reported in issue 27945 part 3.
|
||||
# test fix for seg fault reported in bpo-27945 part 3.
|
||||
class X():
|
||||
def __del__(self):
|
||||
dict_b.clear()
|
||||
|
|
@ -1237,6 +1237,16 @@ class DictTest(unittest.TestCase):
|
|||
dict_b = {X(): X()}
|
||||
self.assertTrue(dict_a == dict_b)
|
||||
|
||||
# test fix for seg fault reported in bpo-38588 part 1.
|
||||
class Y:
|
||||
def __eq__(self, other):
|
||||
dict_d.clear()
|
||||
return True
|
||||
|
||||
dict_c = {0: Y()}
|
||||
dict_d = {0: set()}
|
||||
self.assertTrue(dict_c == dict_d)
|
||||
|
||||
def test_fromkeys_operator_modifying_dict_operand(self):
|
||||
# test fix for seg fault reported in issue 27945 part 4a.
|
||||
class X(int):
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue