* dwarf2read.c (dwarf2_get_pc_bounds): Complain if offset
authorKevin Buettner <kevinb@redhat.com>
Mon, 15 Sep 2003 17:19:23 +0000 (17:19 +0000)
committerKevin Buettner <kevinb@redhat.com>
Mon, 15 Sep 2003 17:19:23 +0000 (17:19 +0000)
associated with DW_AT_ranges attribute is out of bounds.

gdb/ChangeLog
gdb/dwarf2read.c

index 49e1dff0b953dc4739bee0865d2f0adeaf4032ef..0e22b0f02830a6371379313d516e09ce4fe21dc3 100644 (file)
@@ -1,3 +1,8 @@
+2003-09-15  Kevin Buettner  <kevinb@redhat.com>
+
+       * dwarf2read.c (dwarf2_get_pc_bounds): Complain if offset
+       associated with DW_AT_ranges attribute is out of bounds.
+
 2003-09-15  David Lecomber  <dsl@sources.redhat.com>
 
        * f-valprint.c: Apply array element printing limits to multi-dimensional arrays
index 75d81e9726be602bd1e93843e4a50f453857e965..5f0ec27036b1fa13a01da7d030abeb0f38c1eb23 100644 (file)
@@ -2314,7 +2314,7 @@ dwarf2_get_pc_bounds (struct die_info *die, CORE_ADDR *lowpc,
          unsigned int addr_size = cu_header->addr_size;
          CORE_ADDR mask = ~(~(CORE_ADDR)1 << (addr_size * 8 - 1));
          /* Value of the DW_AT_ranges attribute is the offset in the
-            .debug_renges section.  */
+            .debug_ranges section.  */
          unsigned int offset = DW_UNSND (attr);
          /* Base address selection entry.  */
          CORE_ADDR base;
@@ -2327,6 +2327,14 @@ dwarf2_get_pc_bounds (struct die_info *die, CORE_ADDR *lowpc,
  
          found_base = cu_header->base_known;
          base = cu_header->base_address;
+
+         if (offset >= dwarf_ranges_size)
+           {
+             complaint (&symfile_complaints,
+                        "Offset %d out of bounds for DW_AT_ranges attribute",
+                        offset);
+             return 0;
+           }
          buffer = dwarf_ranges_buffer + offset;
 
          /* Read in the largest possible address.  */