aboutsummaryrefslogtreecommitdiff
path: root/lldb
diff options
context:
space:
mode:
authorjimingham <jingham@apple.com>2024-05-31 10:43:05 -0700
committerGitHub <noreply@github.com>2024-05-31 10:43:05 -0700
commit1e81b67925fdd77a3d65ba2a7f652d1e840512f4 (patch)
treeae6bc91a2794c694002c92a2290d029155255cdb /lldb
parent7caa812f2707fa3649c01000de6550dac226ce87 (diff)
downloadllvm-1e81b67925fdd77a3d65ba2a7f652d1e840512f4.zip
llvm-1e81b67925fdd77a3d65ba2a7f652d1e840512f4.tar.gz
llvm-1e81b67925fdd77a3d65ba2a7f652d1e840512f4.tar.bz2
[lldb] FormatManager::GetPossibleMatches assumes all ValueObjects have targets. (#93880)
But one made in a situation where that's impossible might only have an error, and no symbol context, so that's not necessarily true. Check for the target's validity before using it. Fixes issue #93313
Diffstat (limited to 'lldb')
-rw-r--r--lldb/source/DataFormatters/FormatManager.cpp8
-rw-r--r--lldb/test/API/python_api/run_locker/TestRunLocker.py7
2 files changed, 14 insertions, 1 deletions
diff --git a/lldb/source/DataFormatters/FormatManager.cpp b/lldb/source/DataFormatters/FormatManager.cpp
index d7ba5b4..6076595 100644
--- a/lldb/source/DataFormatters/FormatManager.cpp
+++ b/lldb/source/DataFormatters/FormatManager.cpp
@@ -176,8 +176,14 @@ void FormatManager::GetPossibleMatches(
FormattersMatchCandidate::Flags current_flags, bool root_level) {
compiler_type = compiler_type.GetTypeForFormatters();
ConstString type_name(compiler_type.GetTypeName());
+ // A ValueObject that couldn't be made correctly won't necessarily have a
+ // target. We aren't going to find a formatter in this case anyway, so we
+ // should just exit.
+ TargetSP target_sp = valobj.GetTargetSP();
+ if (!target_sp)
+ return;
ScriptInterpreter *script_interpreter =
- valobj.GetTargetSP()->GetDebugger().GetScriptInterpreter();
+ target_sp->GetDebugger().GetScriptInterpreter();
if (valobj.GetBitfieldBitSize() > 0) {
StreamString sstring;
sstring.Printf("%s:%d", type_name.AsCString(), valobj.GetBitfieldBitSize());
diff --git a/lldb/test/API/python_api/run_locker/TestRunLocker.py b/lldb/test/API/python_api/run_locker/TestRunLocker.py
index 4e0dd26..d525bbf 100644
--- a/lldb/test/API/python_api/run_locker/TestRunLocker.py
+++ b/lldb/test/API/python_api/run_locker/TestRunLocker.py
@@ -85,6 +85,13 @@ class TestRunLocker(TestBase):
# you aren't supposed to do while running, and that we get some
# actual error:
val = target.EvaluateExpression("SomethingToCall()")
+ # There was a bug [#93313] in the printing that would cause repr to crash, so I'm
+ # testing that separately.
+ self.assertIn(
+ "can't evaluate expressions when the process is running",
+ repr(val),
+ "repr works"
+ )
error = val.GetError()
self.assertTrue(error.Fail(), "Failed to run expression")
self.assertIn(