2005-05-24 H.J. Lu <hongjiu.lu@intel.com>
authorH.J. Lu <hjl.tools@gmail.com>
Tue, 24 May 2005 13:53:30 +0000 (13:53 +0000)
committerH.J. Lu <hjl.tools@gmail.com>
Tue, 24 May 2005 13:53:30 +0000 (13:53 +0000)
* readelf.c (process_section_groups): Report group section
index. Check if the section member index is valid.

binutils/ChangeLog
binutils/readelf.c

index 1a6bc31..e72be0b 100644 (file)
@@ -1,3 +1,8 @@
+2005-05-24  H.J. Lu  <hongjiu.lu@intel.com>
+
+       * readelf.c (process_section_groups): Report group section
+       index. Check if the section member index is valid.
+
 2005-05-23  Fred Fish  <fnf@specifixinc.com>
 
        * addr2line.c (unwind_inlines): New flag for 'i' option.
index 5dafc51..ab0243e 100644 (file)
@@ -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;
                    }