From: H.J. Lu Date: Tue, 24 May 2005 13:53:30 +0000 (+0000) Subject: 2005-05-24 H.J. Lu X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=391cb864cfe945be3f88dbfbd5cc252f13e96317;p=binutils-gdb.git 2005-05-24 H.J. Lu * readelf.c (process_section_groups): Report group section index. Check if the section member index is valid. --- diff --git a/binutils/ChangeLog b/binutils/ChangeLog index 1a6bc31cd1d..e72be0b7557 100644 --- a/binutils/ChangeLog +++ b/binutils/ChangeLog @@ -1,3 +1,8 @@ +2005-05-24 H.J. Lu + + * readelf.c (process_section_groups): Report group section + index. Check if the section member index is valid. + 2005-05-23 Fred Fish * addr2line.c (unwind_inlines): New flag for 'i' option. diff --git a/binutils/readelf.c b/binutils/readelf.c index 5dafc510c97..ab0243edb1d 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; }