[Lldb-commits] [lldb] [lldb] Fix crash on creating string error (PR #212503)

Ebuka Ezike via lldb-commits lldb-commits at lists.llvm.org
Wed Jul 29 02:41:12 PDT 2026


https://github.com/da-viper updated https://github.com/llvm/llvm-project/pull/212503

>From 40d9750cfb88e97526925b7394e2baa2b92f578c Mon Sep 17 00:00:00 2001
From: Ebuka Ezike <yerimyah1 at gmail.com>
Date: Tue, 28 Jul 2026 14:59:55 +0100
Subject: [PATCH 1/2] [lldb] Fix crash on creating string error

It crashes because the `default` error string may not be a format string
compared to the `fallback` error string
---
 lldb/source/Target/Target.cpp | 8 +++++---
 1 file changed, 5 insertions(+), 3 deletions(-)

diff --git a/lldb/source/Target/Target.cpp b/lldb/source/Target/Target.cpp
index 148d7e0b30dbb..bb0c02e0f7930 100644
--- a/lldb/source/Target/Target.cpp
+++ b/lldb/source/Target/Target.cpp
@@ -3119,11 +3119,13 @@ Target::ReadInstructions(const Address &start_addr, uint32_t count,
       ReadMemory(start_addr, data.GetBytes(), data.GetByteSize(), error,
                  force_live_memory, &load_addr);
 
-  if (error.Fail())
+  if (error.Fail()) {
+    if (error.AsCString(/*default_error_str=*/nullptr))
+      return error.takeError();
     return llvm::createStringErrorV(
-        error.AsCString(
-            "Target::ReadInstructions failed to read memory at {:x}"),
+        "Target::ReadInstructions failed to read memory at {:x}",
         start_addr.GetLoadAddress(this));
+  }
 
   const bool data_from_file = load_addr == LLDB_INVALID_ADDRESS;
   if (!flavor_string || flavor_string[0] == '\0') {

>From fec52d62c917dff714e7b9d4ac6b62678d51c769 Mon Sep 17 00:00:00 2001
From: Ebuka Ezike <yerimyah1 at gmail.com>
Date: Wed, 29 Jul 2026 10:40:42 +0100
Subject: [PATCH 2/2] add review changes

---
 lldb/source/API/SBTarget.cpp  |  2 ++
 lldb/source/Target/Target.cpp | 10 +++++-----
 2 files changed, 7 insertions(+), 5 deletions(-)

diff --git a/lldb/source/API/SBTarget.cpp b/lldb/source/API/SBTarget.cpp
index cf2b1dc611df3..9eca813d8584b 100644
--- a/lldb/source/API/SBTarget.cpp
+++ b/lldb/source/API/SBTarget.cpp
@@ -2159,6 +2159,8 @@ lldb::SBInstructionList SBTarget::ReadInstructions(lldb::SBAddress base_addr,
       if (llvm::Expected<DisassemblerSP> disassembler =
               target_sp->ReadInstructions(*addr_ptr, count, flavor_string)) {
         sb_instructions.SetDisassembler(*disassembler);
+      } else {
+        LLDB_LOG_ERROR(GetLog(LLDBLog::API), disassembler.takeError(), "{0}");
       }
     }
   }
diff --git a/lldb/source/Target/Target.cpp b/lldb/source/Target/Target.cpp
index bb0c02e0f7930..239c82e02348d 100644
--- a/lldb/source/Target/Target.cpp
+++ b/lldb/source/Target/Target.cpp
@@ -3120,11 +3120,11 @@ Target::ReadInstructions(const Address &start_addr, uint32_t count,
                  force_live_memory, &load_addr);
 
   if (error.Fail()) {
-    if (error.AsCString(/*default_error_str=*/nullptr))
-      return error.takeError();
-    return llvm::createStringErrorV(
-        "Target::ReadInstructions failed to read memory at {:x}",
-        start_addr.GetLoadAddress(this));
+    return llvm::joinErrors(
+        llvm::createStringErrorV(
+            "Target::ReadInstructions failed to read memory at {:x}: ",
+            start_addr.GetLoadAddress(this)),
+        error.takeError());
   }
 
   const bool data_from_file = load_addr == LLDB_INVALID_ADDRESS;



More information about the lldb-commits mailing list