Fix address violation when parsing a corrupt IEEE binary.

PR binutils/21633
	* ieee.c (ieee_slurp_sections): Check for a NULL return from
	read_id.
	(ieee_archive_p): Likewise.
	(ieee_object_p): Likewise.
This commit is contained in:
Nick Clifton 2017-06-21 10:54:04 +01:00
parent ce49701009
commit c458d0079c
2 changed files with 16 additions and 0 deletions

View File

@ -1,3 +1,11 @@
2017-06-21 Nick Clifton <nickc@redhat.com>
PR binutils/21633
* ieee.c (ieee_slurp_sections): Check for a NULL return from
read_id.
(ieee_archive_p): Likewise.
(ieee_object_p): Likewise.
2017-06-21 Nick Clifton <nickc@redhat.com>
PR binutils/21640

View File

@ -1246,6 +1246,8 @@ ieee_slurp_sections (bfd *abfd)
/* Read section name, use it if non empty. */
name = read_id (&ieee->h);
if (name == NULL)
return FALSE;
if (name[0])
section->name = name;
@ -1395,6 +1397,8 @@ ieee_archive_p (bfd *abfd)
(void) next_byte (&(ieee->h));
library = read_id (&(ieee->h));
if (library == NULL)
goto got_wrong_format_error;
if (strcmp (library, "LIBRARY") != 0)
goto got_wrong_format_error;
@ -1922,9 +1926,13 @@ ieee_object_p (bfd *abfd)
ieee->section_table_size = 0;
processor = ieee->mb.processor = read_id (&(ieee->h));
if (processor == NULL)
goto got_wrong_format;
if (strcmp (processor, "LIBRARY") == 0)
goto got_wrong_format;
ieee->mb.module_name = read_id (&(ieee->h));
if (ieee->mb.module_name == NULL)
goto got_wrong_format;
if (abfd->filename == (const char *) NULL)
abfd->filename = xstrdup (ieee->mb.module_name);