[lldb] Refactor away UB in SBValue::GetLoadAddress (#141799)
The problem was in calling GetLoadAddress on a value in the error state, where `ValueObject::GetLoadAddress` could end up accessing the uninitialized "address type" by-ref return value from `GetAddressOf`. This probably happened because each function expected the other to initialize it. We can guarantee initialization by turning this into a proper return value. I've added a test, but it only (reliably) crashes if lldb is built with ubsan.
This commit is contained in:
@@ -269,7 +269,14 @@ class ValueAPITestCase(TestBase):
|
||||
frame0.FindVariable("another_fixed_int_ptr").GetValue(),
|
||||
"0xaa",
|
||||
)
|
||||
a_null_int_ptr = frame0.FindVariable("a_null_int_ptr")
|
||||
self.assertEqual(a_null_int_ptr.GetValue(), "0x0")
|
||||
|
||||
# Check that dereferencing a null pointer produces reasonable results
|
||||
# (does not crash).
|
||||
self.assertEqual(
|
||||
frame0.FindVariable("a_null_int_ptr").GetValue(),
|
||||
"0x0",
|
||||
a_null_int_ptr.Dereference().GetError().GetCString(), "parent is NULL"
|
||||
)
|
||||
self.assertEqual(
|
||||
a_null_int_ptr.Dereference().GetLoadAddress(), lldb.LLDB_INVALID_ADDRESS
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user