From 85354ed78c0edb6d81a2bd53cabc85e547b8b26e Mon Sep 17 00:00:00 2001 From: Alexey Izbyshev Date: Fri, 6 May 2022 07:01:15 +0300 Subject: gh-92112: Fix crash triggered by an evil custom `mro()` (#92113) --- Lib/test/test_descr.py | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) (limited to 'Lib/test/test_descr.py') diff --git a/Lib/test/test_descr.py b/Lib/test/test_descr.py index 48d43d7af8..afe0f7e9c7 100644 --- a/Lib/test/test_descr.py +++ b/Lib/test/test_descr.py @@ -5784,6 +5784,23 @@ class MroTest(unittest.TestCase): class A(metaclass=M): pass + def test_disappearing_custom_mro(self): + """ + gh-92112: A custom mro() returning a result conflicting with + __bases__ and deleting itself caused a double free. + """ + class B: + pass + + class M(DebugHelperMeta): + def mro(cls): + del M.mro + return (B,) + + with self.assertRaises(TypeError): + class A(metaclass=M): + pass + if __name__ == "__main__": unittest.main() -- cgit v1.2.1