diff --git a/src/readelf.c b/src/readelf.c index 93fb5989..43ae00b6 100644 --- a/src/readelf.c +++ b/src/readelf.c @@ -1661,10 +1661,13 @@ print_scngrp (Ebl *ebl) elf_ndxscn (scn)); shdr = gelf_getshdr (scn, &shdr_mem); if (unlikely (shdr == NULL)) + { error (EXIT_FAILURE, 0, _("cannot get section [%zd] header: %s"), elf_ndxscn (scn), elf_errmsg (-1)); + return; + } } handle_scngrp (ebl, scn, shdr); } @@ -2388,9 +2391,12 @@ print_symtab (Ebl *ebl, int type) elf_ndxscn (scn)); shdr = gelf_getshdr (scn, &shdr_mem); if (unlikely (shdr == NULL)) + { error (EXIT_FAILURE, 0, _("cannot get section [%zd] header: %s"), elf_ndxscn (scn), elf_errmsg (-1)); + return; + } } handle_symtab (ebl, scn, shdr); } @@ -2722,8 +2728,11 @@ handle_verneed (Ebl *ebl, Elf_Scn *scn, GElf_Shdr *shdr) GElf_Shdr *glink = gelf_getshdr (elf_getscn (ebl->elf, shdr->sh_link), &glink_mem); if (glink == NULL) + { error (EXIT_FAILURE, 0, _("invalid sh_link value in section %zu"), elf_ndxscn (scn)); + return; + } printf (ngettext ("\ \nVersion needs section [%2u] '%s' contains %d entry:\n Addr: %#0*" PRIx64 " Offset: %#08" PRIx64 " Link to section: [%2u] '%s'\n", @@ -2798,8 +2807,11 @@ handle_verdef (Ebl *ebl, Elf_Scn *scn, GElf_Shdr *shdr) GElf_Shdr *glink = gelf_getshdr (elf_getscn (ebl->elf, shdr->sh_link), &glink_mem); if (glink == NULL) + { error (EXIT_FAILURE, 0, _("invalid sh_link value in section %zu"), elf_ndxscn (scn)); + return; + } int class = gelf_getclass (ebl->elf); printf (ngettext ("\ @@ -3102,8 +3114,11 @@ handle_versym (Ebl *ebl, Elf_Scn *scn, GElf_Shdr *shdr) &glink_mem); size_t sh_entsize = gelf_fsize (ebl->elf, ELF_T_HALF, 1, EV_CURRENT); if (glink == NULL) + { error (EXIT_FAILURE, 0, _("invalid sh_link value in section %zu"), elf_ndxscn (scn)); + return; + } /* Print the header. */ printf (ngettext ("\ @@ -3495,9 +3510,12 @@ handle_hash (Ebl *ebl) elf_ndxscn (scn)); shdr = gelf_getshdr (scn, &shdr_mem); if (unlikely (shdr == NULL)) + { error (EXIT_FAILURE, 0, _("cannot get section [%zd] header: %s"), elf_ndxscn (scn), elf_errmsg (-1)); + return; + } } if (shdr->sh_type == SHT_HASH) diff --git a/src/unstrip.c b/src/unstrip.c index aacc9aad..0dc713aa 100644 --- a/src/unstrip.c +++ b/src/unstrip.c @@ -1552,9 +1552,12 @@ more sections in stripped file than debug file -- arguments reversed?")); } if (sec == NULL) + { error (EXIT_FAILURE, 0, _("cannot find matching section for [%zu] '%s'"), elf_ndxscn (scn), name); + return; + } sec->outscn = scn; }