aboutsummaryrefslogtreecommitdiff
path: root/gdb/dwarf2read.c
diff options
context:
space:
mode:
authorKevin Buettner <kevinb@redhat.com>2003-09-15 17:19:23 +0000
committerKevin Buettner <kevinb@redhat.com>2003-09-15 17:19:23 +0000
commita604369a855e16ac17dbb40699fbb45cf03b766b (patch)
tree62e4eced1795d5fbf21dcb6d795cd3eb9f40be1e /gdb/dwarf2read.c
parentb3cacbee3f248b67ae6518c428aeea115a46a50a (diff)
downloadgdb-a604369a855e16ac17dbb40699fbb45cf03b766b.zip
gdb-a604369a855e16ac17dbb40699fbb45cf03b766b.tar.gz
gdb-a604369a855e16ac17dbb40699fbb45cf03b766b.tar.bz2
* dwarf2read.c (dwarf2_get_pc_bounds): Complain if offset
associated with DW_AT_ranges attribute is out of bounds.
Diffstat (limited to 'gdb/dwarf2read.c')
-rw-r--r--gdb/dwarf2read.c10
1 files changed, 9 insertions, 1 deletions
diff --git a/gdb/dwarf2read.c b/gdb/dwarf2read.c
index 75d81e9..5f0ec27 100644
--- a/gdb/dwarf2read.c
+++ b/gdb/dwarf2read.c
@@ -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. */