Check the result of creating a node from __next_ in the std::list formatter.
There's a single report of a crash coming from this current_sp being NULL. I don't have a repro case, and I couldn't get it to happen by hand-corrupting a list. We always get an error instead. So I don't have a test case. But checking for null is clearly right here. <rdar://problem/48503320> llvm-svn: 355957
This commit is contained in:
parent
2ca0ebf6b4
commit
027bf7603f
|
@ -384,7 +384,7 @@ lldb::ValueObjectSP ListFrontEnd::GetChildAtIndex(size_t idx) {
|
||||||
if (current_sp->GetName() == g_next) {
|
if (current_sp->GetName() == g_next) {
|
||||||
ProcessSP process_sp(current_sp->GetProcessSP());
|
ProcessSP process_sp(current_sp->GetProcessSP());
|
||||||
if (!process_sp)
|
if (!process_sp)
|
||||||
return nullptr;
|
return lldb::ValueObjectSP();
|
||||||
|
|
||||||
// if we grabbed the __next_ pointer, then the child is one pointer deep-er
|
// if we grabbed the __next_ pointer, then the child is one pointer deep-er
|
||||||
lldb::addr_t addr = current_sp->GetParent()->GetPointerValue();
|
lldb::addr_t addr = current_sp->GetParent()->GetPointerValue();
|
||||||
|
@ -392,6 +392,8 @@ lldb::ValueObjectSP ListFrontEnd::GetChildAtIndex(size_t idx) {
|
||||||
ExecutionContext exe_ctx(process_sp);
|
ExecutionContext exe_ctx(process_sp);
|
||||||
current_sp =
|
current_sp =
|
||||||
CreateValueObjectFromAddress("__value_", addr, exe_ctx, m_element_type);
|
CreateValueObjectFromAddress("__value_", addr, exe_ctx, m_element_type);
|
||||||
|
if (!current_sp)
|
||||||
|
return lldb::ValueObjectSP();
|
||||||
}
|
}
|
||||||
|
|
||||||
// we need to copy current_sp into a new object otherwise we will end up with
|
// we need to copy current_sp into a new object otherwise we will end up with
|
||||||
|
|
Loading…
Reference in New Issue