diff options
Diffstat (limited to 'lldb')
-rw-r--r-- | lldb/source/API/SBModule.cpp | 14 | ||||
-rw-r--r-- | lldb/source/API/SBSection.cpp | 2 | ||||
-rw-r--r-- | lldb/test/python_api/module_section/TestModuleAndSection.py | 43 |
3 files changed, 51 insertions, 8 deletions
diff --git a/lldb/source/API/SBModule.cpp b/lldb/source/API/SBModule.cpp index a42989757e1..c80d952e312 100644 --- a/lldb/source/API/SBModule.cpp +++ b/lldb/source/API/SBModule.cpp @@ -342,7 +342,7 @@ SBModule::FindFunctions (const char *name, { if (!append) sc_list.Clear(); - if (m_opaque_sp) + if (name && m_opaque_sp) { const bool symbols_ok = true; return m_opaque_sp->FindFunctions (ConstString(name), @@ -360,7 +360,7 @@ SBValueList SBModule::FindGlobalVariables (SBTarget &target, const char *name, uint32_t max_matches) { SBValueList sb_value_list; - if (m_opaque_sp) + if (name && m_opaque_sp) { VariableList variable_list; const uint32_t match_count = m_opaque_sp->FindGlobalVariables (ConstString (name), @@ -389,10 +389,10 @@ SBModule::FindGlobalVariables (SBTarget &target, const char *name, uint32_t max_ } lldb::SBType -SBModule::FindFirstType (const char* name_cstr) +SBModule::FindFirstType (const char *name_cstr) { SBType sb_type; - if (IsValid()) + if (name_cstr && IsValid()) { SymbolContext sc; TypeList type_list; @@ -413,12 +413,12 @@ SBModule::FindFirstType (const char* name_cstr) } lldb::SBTypeList -SBModule::FindTypes (const char* type) +SBModule::FindTypes (const char *type) { SBTypeList retval; - if (IsValid()) + if (type && IsValid()) { SymbolContext sc; TypeList type_list; @@ -449,7 +449,7 @@ SBModule::FindSection (const char *sect_name) { SBSection sb_section; - if (IsValid()) + if (sect_name && IsValid()) { ObjectFile *objfile = m_opaque_sp->GetObjectFile(); if (objfile) diff --git a/lldb/source/API/SBSection.cpp b/lldb/source/API/SBSection.cpp index bdcf422e333..ed6dba76e58 100644 --- a/lldb/source/API/SBSection.cpp +++ b/lldb/source/API/SBSection.cpp @@ -142,7 +142,7 @@ lldb::SBSection SBSection::FindSubSection (const char *sect_name) { lldb::SBSection sb_section; - if (IsValid()) + if (sect_name && IsValid()) { ConstString const_sect_name(sect_name); sb_section.SetSection(m_opaque_ap->GetSection()->GetChildren ().FindSectionByName(const_sect_name).get()); diff --git a/lldb/test/python_api/module_section/TestModuleAndSection.py b/lldb/test/python_api/module_section/TestModuleAndSection.py index efd5f0c5686..1ebe9d33433 100644 --- a/lldb/test/python_api/module_section/TestModuleAndSection.py +++ b/lldb/test/python_api/module_section/TestModuleAndSection.py @@ -19,6 +19,12 @@ class ModuleAndSectionAPIsTestCase(TestBase): self.buildDefault() self.module_and_section() + @python_api_test + def test_module_and_section_boundary_condition(self): + """Test module and section APIs by passing None when it expects a Python string.""" + self.buildDefault() + self.module_and_section_boundary_condition() + def module_and_section(self): exe = os.path.join(os.getcwd(), "a.out") @@ -56,6 +62,43 @@ class ModuleAndSectionAPIsTestCase(TestBase): print INDENT2 + repr(sym) print INDENT2 + "symbol type: %s" % symbol_type_to_str(sym.GetType()) + def module_and_section_boundary_condition(self): + exe = os.path.join(os.getcwd(), "a.out") + + target = self.dbg.CreateTarget(exe) + self.assertTrue(target, VALID_TARGET) + self.assertTrue(target.GetNumModules() > 0) + + # Hide stdout if not running with '-t' option. + if not self.TraceOn(): + self.HideStdout() + + print "Number of modules for the target: %d" % target.GetNumModules() + for module in target.module_iter(): + print module + + # Get the executable module at index 0. + exe_module = target.GetModuleAtIndex(0) + + print "Exe module: %s" % repr(exe_module) + print "Number of sections: %d" % exe_module.GetNumSections() + + # Boundary condition testings. Should not crash lldb! + exe_module.FindFirstType(None) + exe_module.FindTypes(None) + exe_module.FindGlobalVariables(target, None, 1) + exe_module.FindFunctions(None, 0, True, lldb.SBSymbolContextList()) + exe_module.FindSection(None) + + # Get the section at index 1. + if exe_module.GetNumSections() > 1: + sec1 = exe_module.GetSectionAtIndex(1) + print sec1 + else: + sec1 = None + + if sec1: + sec1.FindSubSection(None) if __name__ == '__main__': import atexit |