From 391cb864cfe945be3f88dbfbd5cc252f13e96317 Mon Sep 17 00:00:00 2001 From: "H.J. Lu" Date: Tue, 24 May 2005 13:53:30 +0000 Subject: 2005-05-24 H.J. Lu * readelf.c (process_section_groups): Report group section index. Check if the section member index is valid. --- binutils/readelf.c | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) (limited to 'binutils/readelf.c') diff --git a/binutils/readelf.c b/binutils/readelf.c index 5dafc51..ab0243e 100644 --- a/binutils/readelf.c +++ b/binutils/readelf.c @@ -4187,8 +4187,8 @@ process_section_groups (FILE *file) if (do_section_groups) { - printf ("\n%s group section `%s' [%s] contains %u sections:\n", - get_group_flags (entry), name, group_name, size); + printf ("\n%s group section [%5u] `%s' [%s] contains %u sections:\n", + get_group_flags (entry), i, name, group_name, size); printf (_(" [Index] Name\n")); } @@ -4202,13 +4202,26 @@ process_section_groups (FILE *file) entry = byte_get (indices, 4); indices += 4; + if (entry >= elf_header.e_shnum) + { + error (_("section [%5u] in group section [%5u] > maximum section [%5u]\n"), + entry, i, elf_header.e_shnum - 1); + continue; + } + else if (entry >= SHN_LORESERVE && entry <= SHN_HIRESERVE) + { + error (_("invalid section [%5u] in group section [%5u]\n"), + entry, i); + continue; + } + if (section_headers_groups [SECTION_HEADER_INDEX (entry)] != NULL) { if (entry) { - error (_("section [%5u] already in group section [%5u]\n"), - entry, + error (_("section [%5u] in group section [%5u] already in group section [%5u]\n"), + entry, i, section_headers_groups [SECTION_HEADER_INDEX (entry)]->group_index); continue; } -- cgit v1.1