http://llvm.org/bugs/show_bug.cgi?id=11579
authorJohnny Chen <johnny.chen@apple.com>
Thu, 15 Dec 2011 01:55:36 +0000 (01:55 +0000)
committerJohnny Chen <johnny.chen@apple.com>
Thu, 15 Dec 2011 01:55:36 +0000 (01:55 +0000)
lldb::SBValue::CreateValueFromAddress does not verify SBType::GetPointerType succeeds

SBValue::CreateValueFromAddress() should check the validity of type and its derived pointer type
before using it.  Add a test case.

llvm-svn: 146629

lldb/source/API/SBValue.cpp
lldb/test/python_api/sbdata/TestSBData.py

index c7ab549..c9f78e2 100644 (file)
@@ -404,9 +404,8 @@ lldb::SBValue
 SBValue::CreateValueFromAddress(const char* name, lldb::addr_t address, SBType type)
 {
     lldb::SBValue result;
-    if (m_opaque_sp)
+    if (m_opaque_sp && type.IsValid() && type.GetPointerType().IsValid())
     {
-        
         SBType real_type(type.GetPointerType());
         
         lldb::DataBufferSP buffer(new lldb_private::DataBufferHeap(&address,sizeof(lldb::addr_t)));
index e393fda..c1c2e6f 100644 (file)
@@ -112,6 +112,11 @@ class SBDataAPICase(TestBase):
         foobar_addr = star_foobar.GetLoadAddress()
         foobar_addr += 12
 
+        # http://llvm.org/bugs/show_bug.cgi?id=11579
+        # lldb::SBValue::CreateValueFromAddress does not verify SBType::GetPointerType succeeds
+        # This should not crash LLDB.
+        nothing = foobar.CreateValueFromAddress("nothing", foobar_addr, star_foobar.GetType().GetBasicType(lldb.eBasicTypeInvalid))
+
         new_foobar = foobar.CreateValueFromAddress("f00", foobar_addr, star_foobar.GetType())
 
         if self.TraceOn():