diff options
author | Andrew Cagney <cagney@redhat.com> | 1997-11-26 12:35:07 +0000 |
---|---|---|
committer | Andrew Cagney <cagney@redhat.com> | 1997-11-26 12:35:07 +0000 |
commit | 3199620a493eb1dd2dbc064bc520e386d2fb9114 (patch) | |
tree | 0c32925ecf400683eca3a984b4a5b3f2687b5c5c /gdb | |
parent | 0d5d0d102d7ccd8fc9a1f1729175bb1cad6eb6a9 (diff) | |
download | binutils-3199620a493eb1dd2dbc064bc520e386d2fb9114.zip binutils-3199620a493eb1dd2dbc064bc520e386d2fb9114.tar.gz binutils-3199620a493eb1dd2dbc064bc520e386d2fb9114.tar.bz2 |
Check the abbrev offset found in the .debug_info section before using
it.
Diffstat (limited to 'gdb')
-rw-r--r-- | gdb/ChangeLog | 10 | ||||
-rw-r--r-- | gdb/dwarf2read.c | 14 |
2 files changed, 22 insertions, 2 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 4f28b28..fd5b76b 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,8 +1,18 @@ +Wed Nov 26 09:59:47 1997 Andrew Cagney <cagney@b1.cygnus.com> + + * dwarf2read.c (struct comp_unit_head): Change length and + abbrev_offset fields to unsigned int. + (dwarf2_build_psymtabs_hard): Verify length and offset read from + .debug_info section. + Mon Nov 24 14:17:02 1997 Michael Snyder (msnyder@cleaver.cygnus.com) * infcmd.c: export registers_info, for use by other modules. * printcmd.c: export output_command, for use by other modules. * stack.c: export locals_info and args_info, for use by other modules. + * remote.c: export getpkt, putpkt, and fromhex for external use. + Make fromhex case-insensative. New function "remote_console_output" + abstracts the acceptance of "O" packets from target. Mon Nov 24 08:59:28 1997 Andrew Cagney <cagney@b1.cygnus.com> diff --git a/gdb/dwarf2read.c b/gdb/dwarf2read.c index a754a84..e12953d 100644 --- a/gdb/dwarf2read.c +++ b/gdb/dwarf2read.c @@ -147,9 +147,9 @@ static unsigned int dwarf_str_size; /* The data in a compilation unit header looks like this. */ struct comp_unit_head { - int length; + unsigned int length; short version; - int abbrev_offset; + unsigned int abbrev_offset; unsigned char addr_size; }; @@ -932,6 +932,16 @@ dwarf2_build_psymtabs_hard (objfile, section_offsets, mainline) error ("Dwarf Error: wrong version in compilation unit header."); return; } + if (cu_header.abbrev_offset >= dwarf_abbrev_size) + { + error ("Dwarf Error: bad offset in compilation unit header."); + return; + } + if (cu_header.length > dwarf_abbrev_size - cu_header.abbrev_offset) + { + error ("Dwarf Error: bad length in compilation unit header."); + return; + } /* Read the abbrevs for this compilation unit into a table */ dwarf2_read_abbrevs (abfd, cu_header.abbrev_offset); |