Remove unused function fetch_location_list.
authorNick Clifton <nickc@redhat.com>
Tue, 16 Apr 2002 15:03:02 +0000 (15:03 +0000)
committerNick Clifton <nickc@redhat.com>
Tue, 16 Apr 2002 15:03:02 +0000 (15:03 +0000)
Catch corrupt core notes and display a warning message.

binutils/ChangeLog
binutils/readelf.c

index 9275ba4d5c81d0d8d082420cfc8ffe143e9ea0ee..021bc20143a339e8593a47cb76cb5c3fc747ac9c 100644 (file)
@@ -1,5 +1,10 @@
 2002-04-16  Nick Clifton  <nickc@cambridge.redhat.com>
 
+       * readelf.c (fetch_location_list): Remove unused function.
+
+       * readelf.c (process_corefile_note_segment): Catch corrupt notes
+       and display a warning message, then exit the loop.
+
        * rcparse.y: Set MEMFLAG_DISCARDABLE by default.
 
 2002-04-15  Nick Clifton  <nickc@cambridge.redhat.com>
index 2c19d61d91352944c2bbca5baa55061eeeb631d8..f0441ce700f0ffdf0160a7e6cd304edc66ead75a 100644 (file)
@@ -235,7 +235,6 @@ static void               free_debug_str              PARAMS ((void));
 static const char *       fetch_indirect_string       PARAMS ((unsigned long));
 static void               load_debug_loc              PARAMS ((FILE *));
 static void               free_debug_loc              PARAMS ((void));
-static const char *       fetch_location_list         PARAMS ((unsigned long));
 static unsigned long      read_leb128                 PARAMS ((unsigned char *, int *, int));
 static int                process_extended_line_op    PARAMS ((unsigned char *, int, int));
 static void               reset_state_machine         PARAMS ((int));
@@ -7241,18 +7240,7 @@ free_debug_loc ()
   debug_loc_size = 0;
 }
 
-static const char *
-fetch_location_list (offset)
-     unsigned long offset;
-{
-  if (debug_loc_contents == NULL)
-    return _("<no .debug_loc section>");
-
-  if (offset > debug_loc_size)
-    return _("<offset is too big>");
 
-  return debug_loc_contents + offset;
-}
 static int
 display_debug_loc (section, start, file)
      Elf32_Internal_Shdr * section;
@@ -9440,6 +9428,7 @@ process_corefile_note_segment (file, offset, length)
 
   while (external < (Elf_External_Note *)((char *) pnotes + length))
     {
+      Elf_External_Note * next;
       Elf32_Internal_Note inote;
       char * temp = NULL;
 
@@ -9450,7 +9439,18 @@ process_corefile_note_segment (file, offset, length)
       inote.descdata = inote.namedata + align_power (inote.namesz, 2);
       inote.descpos  = offset + (inote.descdata - (char *) pnotes);
 
-      external = (Elf_External_Note *)(inote.descdata + align_power (inote.descsz, 2));
+      next = (Elf_External_Note *)(inote.descdata + align_power (inote.descsz, 2));
+
+      if (((char *) next) > (((char *) pnotes) + length))
+       {
+         warn (_("corrupt note found at offset %x into core notes\n"),
+               ((char *) external) - ((char *) pnotes));
+         warn (_(" type: %x, namesize: %08lx, descsize: %08lx\n"),
+               inote.type, inote.namesz, inote.descsz);
+         break;
+       }
+
+      external = next;
 
       /* Verify that name is null terminated.  It appears that at least
         one version of Linux (RedHat 6.0) generates corefiles that don't