diff options
author | H.J. Lu <hjl.tools@gmail.com> | 2001-09-17 15:13:13 +0000 |
---|---|---|
committer | H.J. Lu <hjl.tools@gmail.com> | 2001-09-17 15:13:13 +0000 |
commit | bb731fb64587ee3a124d6f4df3f837c360580b0b (patch) | |
tree | 4014b46471b137baea016bbfac4704aa08116370 /bfd/dwarf1.c | |
parent | 089e0fcb62124edfb5fea846dce4f94b8de4defb (diff) | |
download | gdb-bb731fb64587ee3a124d6f4df3f837c360580b0b.zip gdb-bb731fb64587ee3a124d6f4df3f837c360580b0b.tar.gz gdb-bb731fb64587ee3a124d6f4df3f837c360580b0b.tar.bz2 |
2001-09-17 H.J. Lu <hjl@gnu.org>
* dwarf1.c (parse_die): Take a new arg for the end of the
section. Return false if die is beyond the section.
(parse_functions_in_unit): Pass the end of the section to
parse_die ().
(_bfd_dwarf1_find_nearest_line): Likewise.
Diffstat (limited to 'bfd/dwarf1.c')
-rw-r--r-- | bfd/dwarf1.c | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/bfd/dwarf1.c b/bfd/dwarf1.c index 80fc242..0ed206d 100644 --- a/bfd/dwarf1.c +++ b/bfd/dwarf1.c @@ -129,7 +129,7 @@ struct linenumber { static struct dwarf1_unit *alloc_dwarf1_unit PARAMS ((struct dwarf1_debug *)); static struct dwarf1_func *alloc_dwarf1_func PARAMS ((struct dwarf1_debug *, struct dwarf1_unit *)); -static boolean parse_die PARAMS ((bfd *, struct die_info *, char *)); +static boolean parse_die PARAMS ((bfd *, struct die_info *, char *, char *)); static boolean parse_line_table PARAMS ((struct dwarf1_debug *, struct dwarf1_unit *)); static boolean parse_functions_in_unit @@ -179,10 +179,11 @@ alloc_dwarf1_func (stash, aUnit) Return false if the die is invalidly formatted; true otherwise. */ static boolean -parse_die (abfd, aDieInfo, aDiePtr) +parse_die (abfd, aDieInfo, aDiePtr, aDiePtrEnd) bfd* abfd; struct die_info* aDieInfo; char* aDiePtr; + char* aDiePtrEnd; { char* this_die = aDiePtr; char* xptr = this_die; @@ -192,7 +193,8 @@ parse_die (abfd, aDieInfo, aDiePtr) /* First comes the length. */ aDieInfo->length = bfd_get_32 (abfd, (bfd_byte *) xptr); xptr += 4; - if (aDieInfo->length == 0) + if (aDieInfo->length == 0 + || (this_die + aDieInfo->length) >= aDiePtrEnd) return false; if (aDieInfo->length < 6) { @@ -360,7 +362,8 @@ parse_functions_in_unit (stash, aUnit) { struct die_info eachDieInfo; - if (! parse_die (stash->abfd, &eachDieInfo, eachDie)) + if (! parse_die (stash->abfd, &eachDieInfo, eachDie, + stash->debug_section_end)) return false; if (eachDieInfo.tag == TAG_global_subroutine @@ -534,7 +537,8 @@ _bfd_dwarf1_find_nearest_line (abfd, section, symbols, offset, { struct die_info aDieInfo; - if (! parse_die (stash->abfd, &aDieInfo, stash->currentDie)) + if (! parse_die (stash->abfd, &aDieInfo, stash->currentDie, + stash->debug_section_end)) return false; if (aDieInfo.tag == TAG_compile_unit) |