From 111b8f8b77974a966eb6dc1e0f08c1b224bbd183 Mon Sep 17 00:00:00 2001 From: Santhosh Kumar Mani Date: Thu, 23 Jan 2014 21:25:24 +0530 Subject: [PATCH] Handle absence of .debug_ranges gracefully --- elftools/dwarf/dwarfinfo.py | 6 ++- examples/dwarf_range_lists.py | 3 ++ test/test_dwarf_range_lists.py | 38 ++++++++++++++++++ test/testfiles_for_unittests/sample_exe64.elf | Bin 0 -> 12333 bytes 4 files changed, 46 insertions(+), 1 deletion(-) create mode 100644 test/test_dwarf_range_lists.py create mode 100644 test/testfiles_for_unittests/sample_exe64.elf diff --git a/elftools/dwarf/dwarfinfo.py b/elftools/dwarf/dwarfinfo.py index e5c0e71..f9d1e32 100644 --- a/elftools/dwarf/dwarfinfo.py +++ b/elftools/dwarf/dwarfinfo.py @@ -178,7 +178,11 @@ class DWARFInfo(object): """ Get a RangeLists object representing the .debug_ranges section of the DWARF data, or None if this section doesn't exist. """ - return RangeLists(self.debug_ranges_sec.stream, self.structs) + # ".debug_ranges" section is optional + if self.debug_ranges_sec == None: + return None + else: + return RangeLists(self.debug_ranges_sec.stream, self.structs) #------ PRIVATE ------# diff --git a/examples/dwarf_range_lists.py b/examples/dwarf_range_lists.py index fced6a6..f722d11 100644 --- a/examples/dwarf_range_lists.py +++ b/examples/dwarf_range_lists.py @@ -37,6 +37,9 @@ def process_file(filename): # The range lists are extracted by DWARFInfo from the .debug_ranges # section, and returned here as a RangeLists object. range_lists = dwarfinfo.range_lists() + if range_lists == None: + print(' file has no .debug_ranges section') + return for CU in dwarfinfo.iter_CUs(): # DWARFInfo allows to iterate over the compile units contained in diff --git a/test/test_dwarf_range_lists.py b/test/test_dwarf_range_lists.py new file mode 100644 index 0000000..1ebd0c7 --- /dev/null +++ b/test/test_dwarf_range_lists.py @@ -0,0 +1,38 @@ +#------------------------------------------------------------------------------- +# elftools tests +# +# Eli Bendersky (eliben@gmail.com), Santhosh Kumar Mani (santhoshmani@gmail.com) +# This code is in the public domain +#------------------------------------------------------------------------------- +try: + import unittest2 as unittest +except ImportError: + import unittest +import os + +from utils import setup_syspath; setup_syspath() +from elftools.elf.elffile import ELFFile + +class TestRangeLists(unittest.TestCase): + # Test the absence of .debug_ranges section + def test_range_list_absence(self): + with open(os.path.join('test', 'testfiles_for_unittests', + 'arm_with_form_indirect.elf'), 'rb') as f: + elffile = ELFFile(f) + self.assertTrue(elffile.has_dwarf_info()) + + dwarfinfo = elffile.get_dwarf_info() + self.assertEqual(dwarfinfo.range_lists(), None) + + # Test the presence of .debug_ranges section + def test_range_list_presence(self): + with open(os.path.join('test', 'testfiles_for_unittests', + 'sample_exe64.elf'), 'rb') as f: + elffile = ELFFile(f) + self.assertTrue(elffile.has_dwarf_info()) + + dwarfinfo = elffile.get_dwarf_info() + self.assertTrue(dwarfinfo.range_lists() != None) + +if __name__ == '__main__': + unittest.main() diff --git a/test/testfiles_for_unittests/sample_exe64.elf b/test/testfiles_for_unittests/sample_exe64.elf new file mode 100644 index 0000000000000000000000000000000000000000..ccfa6ae0f448b64e14d34cf719c37828534e1095 GIT binary patch literal 12333 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 literal 0 HcmV?d00001 -- 2.30.2