From ebdbc26a3e79e64e9b2786a8b413618a5b5c115d Mon Sep 17 00:00:00 2001 From: Med Ismail Bennani Date: Fri, 3 Mar 2023 12:35:42 -0800 Subject: [PATCH] [lldb/swig] Fix ref counting issue in SBProcess::GetScriptedImplementation When using SBProcess::GetScriptedImplementation in python, if the process has a valid implementation, we returned a reference of the object without incrementing the reference counting. That causes the interpreter to crash after accessing the reference several times. This patch address this by incrementing the reference count when passing the valid object reference. Differential Revision: https://reviews.llvm.org/D145260 Signed-off-by: Med Ismail Bennani --- lldb/bindings/python/python-typemaps.swig | 2 ++ .../API/functionalities/scripted_process/TestScriptedProcess.py | 9 +++++++++ 2 files changed, 11 insertions(+) diff --git a/lldb/bindings/python/python-typemaps.swig b/lldb/bindings/python/python-typemaps.swig index 2057aa6..1b1f2e1 100644 --- a/lldb/bindings/python/python-typemaps.swig +++ b/lldb/bindings/python/python-typemaps.swig @@ -61,6 +61,8 @@ if (!$result) { $result = Py_None; Py_INCREF(Py_None); + } else { + Py_INCREF($result); } } diff --git a/lldb/test/API/functionalities/scripted_process/TestScriptedProcess.py b/lldb/test/API/functionalities/scripted_process/TestScriptedProcess.py index 5a198cc..b5a14a9 100644 --- a/lldb/test/API/functionalities/scripted_process/TestScriptedProcess.py +++ b/lldb/test/API/functionalities/scripted_process/TestScriptedProcess.py @@ -80,6 +80,15 @@ class ScriptedProcesTestCase(TestBase): self.assertEqual(process.GetProcessID(), 666) self.assertEqual(process.GetNumThreads(), 0) + impl = process.GetScriptedImplementation() + self.assertTrue(impl) + impl = process.GetScriptedImplementation() + self.assertTrue(impl) + impl = process.GetScriptedImplementation() + self.assertTrue(impl) + impl = process.GetScriptedImplementation() + self.assertTrue(impl) + addr = 0x500000000 buff = process.ReadMemory(addr, 4, error) self.assertEqual(buff, None) -- 2.7.4