summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorMark Wielaard <mark@klomp.org>2019-04-28 17:06:50 +0200
committerMark Wielaard <mark@klomp.org>2019-04-28 17:06:50 +0200
commitb3383bb128c6984d49542951bffa15d3decc7ec0 (patch)
treed7982aac3ec8ad3cdfb359e8b583bad9adc9ab05 /src
parent7190c2043152477b720e204166d0690da9c7b913 (diff)
elfcmp: Handle bad sections without crashing.
If we cannot get the Shdr of a section then don't try to use or compare them. Signed-off-by: Mark Wielaard <mark@klomp.org>
Diffstat (limited to 'src')
-rw-r--r--src/ChangeLog4
-rw-r--r--src/elfcmp.c6
2 files changed, 7 insertions, 3 deletions
diff --git a/src/ChangeLog b/src/ChangeLog
index 57db6cad..3786f343 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,3 +1,7 @@
+2019-04-28 Mark Wielaard <mark@klomp.org>
+
+ * elfcmp.c (main): Check shdr1 and shdr2 are not NULL.
+
2019-04-03 Mark Wielaard <mark@klomp.org>
* readelf.c (attr_callback): Print DW_AT_data_member_location as
diff --git a/src/elfcmp.c b/src/elfcmp.c
index d5dc1ff2..c07fdfd7 100644
--- a/src/elfcmp.c
+++ b/src/elfcmp.c
@@ -269,7 +269,7 @@ main (int argc, char *argv[])
if (shdr1 != NULL)
sname1 = elf_strptr (elf1, shstrndx1, shdr1->sh_name);
}
- while (scn1 != NULL
+ while (scn1 != NULL && shdr1 != NULL
&& ebl_section_strip_p (ebl1, shdr1, sname1, true, false));
GElf_Shdr shdr2_mem;
@@ -282,10 +282,10 @@ main (int argc, char *argv[])
if (shdr2 != NULL)
sname2 = elf_strptr (elf2, shstrndx2, shdr2->sh_name);
}
- while (scn2 != NULL
+ while (scn2 != NULL && shdr2 != NULL
&& ebl_section_strip_p (ebl2, shdr2, sname2, true, false));
- if (scn1 == NULL || scn2 == NULL)
+ if (scn1 == NULL || scn2 == NULL || shdr1 == NULL || shdr2 == NULL)
break;
if (gaps != gaps_ignore && (shdr1->sh_flags & SHF_ALLOC) != 0)