Author: Sergei Druzhkov
Date: 2026-06-06T21:48:44+03:00
New Revision: 731dd05c34d9bb8d42741b67afc658d228b30e85

URL: 
https://github.com/llvm/llvm-project/commit/731dd05c34d9bb8d42741b67afc658d228b30e85
DIFF: 
https://github.com/llvm/llvm-project/commit/731dd05c34d9bb8d42741b67afc658d228b30e85.diff

LOG: [lldb] Add nullptr check in GetBroadcaster (#201769)

I recently noticed LLDB crash during execution of `script
print(lldb.SBDebugger().GetBroadcaster().GetName())` command:
```
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and 
include the crash backtrace.
Stack dump:
0.      Program arguments: /home/sergei/llvm-project/build/bin/lldb-dap
 #0 0x000062735c3403d2 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) 
(/home/sergei/llvm-project/build/bin/lldb-dap+0x7c3d2)
 #1 0x000062735c33d7ec llvm::sys::RunSignalHandlers() 
(/home/sergei/llvm-project/build/bin/lldb-dap+0x797ec)
 #2 0x000062735c33d94c SignalHandler(int, siginfo_t*, void*) Signals.cpp:0:0
 #3 0x00007eaa6aa45330 (/lib/x86_64-linux-gnu/libc.so.6+0x45330)
 #4 0x00007eaa6bb0c092 lldb::SBBroadcaster::GetName() const 
(/home/sergei/llvm-project/build/bin/../lib/liblldb.so.23.0git+0x90c092)
 #5 0x00007eaa6bcb9a5d _wrap_SBBroadcaster_GetName LLDBWrapPython.cpp:0:0
 #6 0x00007eaa6a1df5f5 (/lib/x86_64-linux-gnu/libpython3.12.so.1.0+0x1df5f5)
 #7 0x00007eaa6a182b2c PyObject_Vectorcall 
(/lib/x86_64-linux-gnu/libpython3.12.so.1.0+0x182b2c)
 #8 0x00007eaa6a11d5ee _PyEval_EvalFrameDefault 
(/lib/x86_64-linux-gnu/libpython3.12.so.1.0+0x11d5ee)
 #9 0x00007eaa6a2a091f PyEval_EvalCode 
(/lib/x86_64-linux-gnu/libpython3.12.so.1.0+0x2a091f)
#10 0x00007eaa6a29c8b0 (/lib/x86_64-linux-gnu/libpython3.12.so.1.0+0x29c8b0)
#11 0x00007eaa6a11fbd3 _PyEval_EvalFrameDefault 
(/lib/x86_64-linux-gnu/libpython3.12.so.1.0+0x11fbd3)
#12 0x00007eaa6c4891b7 
lldb_private::ScriptInterpreterPythonImpl::ExecuteOneLine(llvm::StringRef, 
lldb_private::CommandReturnObject*, lldb_private::ExecuteScriptOptions const&) 
(/home/sergei/llvm-project/build/bin/../lib/liblldb.so.23.0git+0x12891b7)
#13 0x00007eaa70326ff5 CommandObjectScriptingRun::DoExecute(llvm::StringRef, 
lldb_private::CommandReturnObject&) 
(/home/sergei/llvm-project/build/bin/../lib/liblldb.so.23.0git+0x5126ff5)
#14 0x00007eaa6bee3739 lldb_private::CommandObjectRaw::Execute(char const*, 
lldb_private::CommandReturnObject&) 
(/home/sergei/llvm-project/build/bin/../lib/liblldb.so.23.0git+0xce3739)
#15 0x00007eaa6bede09a lldb_private::CommandInterpreter::HandleCommand(char 
const*, lldb_private::LazyBool, lldb_private::CommandReturnObject&, bool) 
(/home/sergei/llvm-project/build/bin/../lib/liblldb.so.23.0git+0xcde09a)
#16 0x00007eaa6bb0f0f8 lldb::SBCommandInterpreter::HandleCommand(char const*, 
lldb::SBExecutionContext&, lldb::SBCommandReturnObject&, bool) 
(/home/sergei/llvm-project/build/bin/../lib/liblldb.so.23.0git+0x90f0f8)
#17 0x00007eaa6bb0f265 lldb::SBCommandInterpreter::HandleCommand(char const*, 
lldb::SBCommandReturnObject&, bool) 
(/home/sergei/llvm-project/build/bin/../lib/liblldb.so.23.0git+0x90f265)
#18 0x000062735c3707f3 lldb_dap::RunLLDBCommands[abi:cxx11](lldb::SBDebugger&, 
lldb::SBMutex, llvm::StringRef, llvm::ArrayRef<lldb_dap::protocol::String> 
const&, bool&, bool, bool) 
(/home/sergei/llvm-project/build/bin/lldb-dap+0xac7f3)
#19 0x000062735c3a8019 
lldb_dap::EvaluateRequestHandler::Run(lldb_dap::protocol::EvaluateArguments 
const&) const (/home/sergei/llvm-project/build/bin/lldb-dap+0xe4019)
#20 0x000062735c3aba78 
lldb_dap::RequestHandler<lldb_dap::protocol::EvaluateArguments, 
llvm::Expected<lldb_dap::protocol::EvaluateResponseBody>>::operator()(lldb_dap::protocol::Request
 const&) const (/home/sergei/llvm-project/build/bin/lldb-dap+0xe7a78)
#21 0x000062735c3ce1bf 
lldb_dap::BaseRequestHandler::Run(lldb_dap::protocol::Request const&) 
(/home/sergei/llvm-project/build/bin/lldb-dap+0x10a1bf)
#22 0x000062735c3577e7 
lldb_dap::DAP::HandleObject(std::variant<lldb_dap::protocol::Request, 
lldb_dap::protocol::Response, lldb_dap::protocol::Event> const&) 
(/home/sergei/llvm-project/build/bin/lldb-dap+0x937e7)
#23 0x000062735c358705 lldb_dap::DAP::Loop() 
(/home/sergei/llvm-project/build/bin/lldb-dap+0x94705)
#24 0x000062735c2ed0c7 main 
(/home/sergei/llvm-project/build/bin/lldb-dap+0x290c7)
#25 0x00007eaa6aa2a1ca __libc_start_call_main 
./csu/../sysdeps/nptl/libc_start_call_main.h:74:3
```
As far as I understand default constuctors should be covered by fuzzing
tests, so I don't know how to write test for that patch.

Added: 
    

Modified: 
    lldb/source/API/SBDebugger.cpp
    lldb/test/API/python_api/default-constructor/sb_debugger.py

Removed: 
    


################################################################################
diff  --git a/lldb/source/API/SBDebugger.cpp b/lldb/source/API/SBDebugger.cpp
index c0c7f93c0b87e..fa2b2e465359b 100644
--- a/lldb/source/API/SBDebugger.cpp
+++ b/lldb/source/API/SBDebugger.cpp
@@ -167,8 +167,11 @@ SBDebugger::GetDiagnosticFromEvent(const lldb::SBEvent 
&event) {
 
 SBBroadcaster SBDebugger::GetBroadcaster() {
   LLDB_INSTRUMENT_VA(this);
-  SBBroadcaster broadcaster(&m_opaque_sp->GetBroadcaster(), false);
-  return broadcaster;
+
+  if (m_opaque_sp)
+    return SBBroadcaster(&m_opaque_sp->GetBroadcaster(), false);
+
+  return SBBroadcaster();
 }
 
 void SBDebugger::Initialize() {

diff  --git a/lldb/test/API/python_api/default-constructor/sb_debugger.py 
b/lldb/test/API/python_api/default-constructor/sb_debugger.py
index b7b3a2023fbcb..98261f385bf43 100644
--- a/lldb/test/API/python_api/default-constructor/sb_debugger.py
+++ b/lldb/test/API/python_api/default-constructor/sb_debugger.py
@@ -20,6 +20,8 @@ def fuzz_obj(obj):
     obj.GetCommandInterpreter()
     obj.HandleCommand("nothing here")
     listener = obj.GetListener()
+    broadcaster = obj.GetBroadcaster()
+    broadcaster.GetName()
     try:
         obj.HandleProcessEvent(lldb.SBProcess(), lldb.SBEvent(), None, None)
     except Exception:


        
_______________________________________________
lldb-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits

Reply via email to