From 3199620a493eb1dd2dbc064bc520e386d2fb9114 Mon Sep 17 00:00:00 2001 From: Andrew Cagney Date: Wed, 26 Nov 1997 12:35:07 +0000 Subject: [PATCH] Check the abbrev offset found in the .debug_info section before using it. --- gdb/ChangeLog | 10 ++++++++++ gdb/dwarf2read.c | 14 ++++++++++++-- 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 4f28b28fc7f..fd5b76bfdad 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,8 +1,18 @@ +Wed Nov 26 09:59:47 1997 Andrew Cagney + + * 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 diff --git a/gdb/dwarf2read.c b/gdb/dwarf2read.c index a754a84cdcd..e12953d60e6 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); -- 2.30.2