summaryrefslogtreecommitdiffstats
path: root/Lib
diff options
context:
space:
mode:
Diffstat (limited to 'Lib')
-rw-r--r--Lib/test/test_capi/test_opt.py19
1 files changed, 19 insertions, 0 deletions
diff --git a/Lib/test/test_capi/test_opt.py b/Lib/test/test_capi/test_opt.py
index d847024..12542d8 100644
--- a/Lib/test/test_capi/test_opt.py
+++ b/Lib/test/test_capi/test_opt.py
@@ -1555,6 +1555,25 @@ class TestUopsOptimization(unittest.TestCase):
with self.subTest(l=l, r=r, x=x, y=y):
script_helper.assert_python_ok("-c", s)
+ def test_decref_escapes(self):
+ class Convert9999ToNone:
+ def __del__(self):
+ ns = sys._getframe(1).f_locals
+ if ns["i"] == 9999:
+ ns["i"] = None
+
+ def crash_addition():
+ try:
+ for i in range(10000):
+ n = Convert9999ToNone()
+ i + i # Remove guards for i.
+ n = None # Change i.
+ i + i # This crashed when we didn't treat DECREF as escaping (gh-124483)
+ except TypeError:
+ pass
+
+ crash_addition()
+
def global_identity(x):
return x