From 61651c110e4271cdea4ae153813898684bf9f0f8 Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Wed, 28 Mar 2012 11:20:36 +0200 Subject: [PATCH] readelf.c: Check debug section data before trying to print abbrev or str. * readelf.c (print_debug_abbrev_section): Check there is Dwarf section data. (print_debug_str_section): Likewise. --- src/ChangeLog | 6 ++++++ src/readelf.c | 8 ++++++-- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index 62817567f..30be3e132 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,9 @@ +2012-03-28 Mark Wielaard + + * readelf.c (print_debug_abbrev_section): Check there is Dwarf + section data. + (print_debug_str_section): Likewise. + 2012-03-21 Mark Wielaard * readelf.c (print_gdb_index_section): Accept version 6. diff --git a/src/readelf.c b/src/readelf.c index f9f56aada..b70779dd9 100644 --- a/src/readelf.c +++ b/src/readelf.c @@ -4566,13 +4566,16 @@ print_debug_abbrev_section (Dwfl_Module *dwflmod __attribute__ ((unused)), Ebl *ebl, GElf_Ehdr *ehdr, Elf_Scn *scn, GElf_Shdr *shdr, Dwarf *dbg) { + const size_t sh_size = (dbg->sectiondata[IDX_debug_abbrev] ? + dbg->sectiondata[IDX_debug_abbrev]->d_size : 0); + printf (gettext ("\nDWARF section [%2zu] '%s' at offset %#" PRIx64 ":\n" " [ Code]\n"), elf_ndxscn (scn), section_name (ebl, ehdr, shdr), (uint64_t) shdr->sh_offset); Dwarf_Off offset = 0; - while (offset < dbg->sectiondata[IDX_debug_abbrev]->d_size) + while (offset < sh_size) { printf (gettext ("\nAbbreviation section at offset %" PRIu64 ":\n"), offset); @@ -6781,7 +6784,8 @@ print_debug_str_section (Dwfl_Module *dwflmod __attribute__ ((unused)), Ebl *ebl, GElf_Ehdr *ehdr, Elf_Scn *scn, GElf_Shdr *shdr, Dwarf *dbg) { - const size_t sh_size = dbg->sectiondata[IDX_debug_str]->d_size; + const size_t sh_size = (dbg->sectiondata[IDX_debug_str] ? + dbg->sectiondata[IDX_debug_str]->d_size : 0); /* Compute floor(log16(shdr->sh_size)). */ GElf_Addr tmp = sh_size; -- 2.47.2