diff --git a/lldb/source/API/SBDebugger.cpp b/lldb/source/API/SBDebugger.cpp index 65357bb76ad3..ce72631ce651 100644 --- a/lldb/source/API/SBDebugger.cpp +++ b/lldb/source/API/SBDebugger.cpp @@ -616,7 +616,7 @@ bool SBDebugger::DeleteTarget (lldb::SBTarget &target) { bool result = false; - if (m_opaque_sp) + if (m_opaque_sp && target.IsValid()) { // No need to lock, the target list is thread safe result = m_opaque_sp->GetTargetList().DeleteTarget (target.m_opaque_sp); diff --git a/lldb/test/python_api/debugger/TestDebuggerAPI.py b/lldb/test/python_api/debugger/TestDebuggerAPI.py index b9d169e244ae..462933510a90 100644 --- a/lldb/test/python_api/debugger/TestDebuggerAPI.py +++ b/lldb/test/python_api/debugger/TestDebuggerAPI.py @@ -28,3 +28,11 @@ class DebuggerAPITestCase(TestBase): self.dbg.SetPrompt(None) self.dbg.SetCurrentPlatform(None) self.dbg.SetCurrentPlatformSDKRoot(None) + + @python_api_test + def test_debugger_delete_invalid_target(self): + """SBDebugger.DeleteTarget() should not crash LLDB given and invalid target.""" + target = lldb.SBTarget() + self.assertFalse(target.IsValid()) + self.dbg.DeleteTarget(target) +