[COMMITTED] size: Robustify against gelf_getshdr returning NULL.

Mark Wielaard mark@klomp.org
Sun Apr 28 16:05:00 GMT 2019


Signed-off-by: Mark Wielaard <mark@klomp.org>
---
 src/ChangeLog | 7 +++++++
 src/size.c    | 6 ++++++
 2 files changed, 13 insertions(+)

diff --git a/src/ChangeLog b/src/ChangeLog
index 3020bd768..e3e411ef5 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,3 +1,10 @@
+2019-04-28  Mark Wielaard  <mark@klomp.org>
+
+	* size.c (show_sysv): Call INTERNAL_ERROR if gelf_getshdr
+	returns NULL.
+	(show_sysv_one_line): Call error with EXIT_FAILURE if
+	gelf_getshdr returns NULL.
+
 2019-04-28  Mark Wielaard  <mark@klomp.org>
 
 	* nm.c (show_symbols_sysv): Check gelf_getshdr doesn't return
diff --git a/src/size.c b/src/size.c
index f01fd880c..a25d4471f 100644
--- a/src/size.c
+++ b/src/size.c
@@ -428,6 +428,9 @@ show_sysv (Elf *elf, const char *prefix, const char *fname,
       GElf_Shdr shdr_mem;
       GElf_Shdr *shdr = gelf_getshdr (scn, &shdr_mem);
 
+      if (shdr == NULL)
+	INTERNAL_ERROR (fullname);
+
       /* Ignore all sections which are not used at runtime.  */
       if ((shdr->sh_flags & SHF_ALLOC) != 0)
 	{
@@ -475,6 +478,9 @@ show_sysv_one_line (Elf *elf)
       GElf_Shdr shdr_mem;
       GElf_Shdr *shdr = gelf_getshdr (scn, &shdr_mem);
 
+      if (unlikely (shdr == NULL))
+	error (EXIT_FAILURE, 0, gettext ("cannot get section header"));
+
       /* Ignore all sections which are not used at runtime.  */
       if ((shdr->sh_flags & SHF_ALLOC) == 0)
 	continue;
-- 
2.20.1



More information about the Elfutils-devel mailing list