Properly check abbrev size

abbrev_base is independent of abbrev_size.  We should use abbrev_base +
abbrev_size to check abbrev section size.

	* dwarf.c (process_debug_info): Properly check abbrev size.
This commit is contained in:
H.J. Lu 2015-01-12 13:34:24 -08:00
parent 1306a7421c
commit a0a3b04c61
2 changed files with 9 additions and 4 deletions

View File

@ -1,3 +1,7 @@
2015-01-12 H.J. Lu <hongjiu.lu@intel.com>
* dwarf.c (process_debug_info): Properly check abbrev size.
2015-01-12 Nick Clifton <nickc@redhat.com>
PR binutils/17531

View File

@ -2467,10 +2467,11 @@ process_debug_info (struct dwarf_section *section,
(unsigned long) compunit.cu_abbrev_offset,
(unsigned long) abbrev_size);
/* PR 17531: file:4bcd9ce9. */
else if (abbrev_base >= abbrev_size)
warn (_("Debug info is corrupted, abbrev base (%lx) is larger than abbrev section size (%lx)\n"),
(unsigned long) abbrev_base,
(unsigned long) abbrev_size);
else if ((abbrev_base + abbrev_size)
> debug_displays [abbrev_sec].section.size)
warn (_("Debug info is corrupted, abbrev size (%lx) is larger than abbrev section size (%lx)\n"),
(unsigned long) abbrev_base + abbrev_size,
(unsigned long) debug_displays [abbrev_sec].section.size);
else
process_abbrev_section
(((unsigned char *) debug_displays [abbrev_sec].section.start