Added fuzz testing for when we call API calls with an invalid object.

We previously weren't catching that SBValue::Cast(...) would crash
if we had an invalid (empty) SBValue object.

Cleaned up the SBType API a bit.

llvm-svn: 149447
This commit is contained in:
Greg Clayton 2012-01-31 23:19:33 +00:00
parent 8c159b87a0
commit fbf1b64173
6 changed files with 42 additions and 6 deletions

View File

@ -138,8 +138,6 @@ public:
GetDescription (lldb::SBStream &description,
lldb::DescriptionLevel description_level);
protected:
#ifndef SWIG
lldb::SBType &
operator = (const lldb::SBType &rhs);
@ -149,7 +147,11 @@ protected:
bool
operator != (lldb::SBType &rhs);
#endif
protected:
#ifndef SWIG
lldb_private::TypeImpl &
ref ();
@ -157,7 +159,7 @@ protected:
ref () const;
void
reset(const lldb::TypeImplSP &type_impl_sp);
SetSP (const lldb::TypeImplSP &type_impl_sp);
#endif

View File

@ -131,6 +131,8 @@ find_type.py:
class SBType
{
public:
SBType ();
SBType (const lldb::SBType &rhs);
~SBType ();

View File

@ -84,7 +84,7 @@ SBType::operator != (SBType &rhs)
}
void
SBType::reset(const lldb::TypeImplSP &type_impl_sp)
SBType::SetSP (const lldb::TypeImplSP &type_impl_sp)
{
m_opaque_sp = type_impl_sp;
}
@ -556,7 +556,7 @@ SBTypeMember::GetType ()
SBType sb_type;
if (m_opaque_ap.get())
{
sb_type.reset (m_opaque_ap->GetTypeImpl());
sb_type.SetSP (m_opaque_ap->GetTypeImpl());
}
return sb_type;

View File

@ -23,4 +23,6 @@ def fuzz_obj(obj):
print symbol
for symbol in obj:
print symbol
obj.GetAddressByteSize()
obj.GetByteOrder()
obj.GetTriple()

View File

@ -49,6 +49,9 @@ def fuzz_obj(obj):
obj.EnableAllWatchpoints()
obj.DisableAllWatchpoints()
obj.DeleteAllWatchpoints()
obj.GetAddressByteSize()
obj.GetByteOrder()
obj.GetTriple()
obj.WatchAddress(123, 8, True, True)
obj.GetBroadcaster()
obj.GetDescription(lldb.SBStream(), lldb.eDescriptionLevelBrief)

View File

@ -7,6 +7,7 @@ import lldb
def fuzz_obj(obj):
obj.GetError()
obj.GetID()
obj.GetName()
obj.GetTypeName()
obj.GetByteSize()
@ -37,3 +38,29 @@ def fuzz_obj(obj):
obj.WatchPointee(True, False, True)
for child_val in obj:
print child_val
error = lldb.SBError()
obj.GetValueAsSigned (error, 0)
obj.GetValueAsUnsigned (error, 0)
obj.GetValueAsSigned(0)
obj.GetValueAsUnsigned(0)
obj.GetDynamicValue (lldb.eNoDynamicValues)
obj.GetStaticValue ()
obj.IsDynamic()
invalid_type = lldb.SBType()
obj.CreateChildAtOffset ("a", 12, invalid_type)
obj.Cast (invalid_type)
obj.CreateValueFromExpression ("pt->x", "pt->x")
obj.CreateValueFromAddress ("x", 0x123, invalid_type)
invalid_data = lldb.SBData()
obj.CreateValueFromData ("x", invalid_data, invalid_type)
obj.GetValueForExpressionPath("[0]")
obj.AddressOf()
obj.GetLoadAddress()
obj.GetAddress()
obj.GetPointeeData (0, 1)
obj.GetData ()
obj.GetTarget()
obj.GetProcess()
obj.GetThread()
obj.GetFrame()
obj.GetType()