Fix an access through a null pointer when parsing a corrupt SOM format fle.

PR 27793
	* som.c (som_slurp_symbol_table): Assign symbols without any scope
	to the undefined section.
	(som_decode_symclass): Check for a missing symbol section.
	* syms.c (bfd_decode_symclass): Likewise.
This commit is contained in:
Nick Clifton 2021-04-29 17:55:43 +01:00
parent 063e75c9e4
commit 09e40e44ad
3 changed files with 22 additions and 1 deletions

View File

@ -1,3 +1,11 @@
2021-04-29 Nick Clifton <nickc@redhat.com>
PR 27793
* som.c (som_slurp_symbol_table): Assign symbols without any scope
to the undefined section.
(som_decode_symclass): Check for a missing symbol section.
* syms.c (bfd_decode_symclass): Likewise.
2021-04-29 Nick Clifton <nickc@redhat.com>
PR 27792

View File

@ -4740,7 +4740,7 @@ som_slurp_symbol_table (bfd *abfd)
goto error_return;
}
sym->symbol.value = bfd_getb32 (bufp->symbol_value);
sym->symbol.section = 0;
sym->symbol.section = NULL;
sym->symbol.flags = 0;
switch (symbol_type)
@ -4800,6 +4800,10 @@ som_slurp_symbol_table (bfd *abfd)
sym->symbol.section = bfd_section_from_som_symbol (abfd, bufp);
sym->symbol.value -= sym->symbol.section->vma;
break;
default:
sym->symbol.section = bfd_und_section_ptr;
break;
}
/* Check for a weak symbol. */
@ -5848,6 +5852,11 @@ som_decode_symclass (asymbol *symbol)
{
char c;
/* If the symbol did not have a scope specified,
then it will not have associated section. */
if (symbol == NULL || symbol->section == NULL)
return '?';
if (bfd_is_com_section (symbol->section))
return 'C';
if (bfd_is_und_section (symbol->section))

View File

@ -654,6 +654,10 @@ bfd_decode_symclass (asymbol *symbol)
{
char c;
/* Paranoia... */
if (symbol == NULL || symbol->section == NULL)
return '?';
if (symbol->section && bfd_is_com_section (symbol->section))
{
if (symbol->section->flags & SEC_SMALL_DATA)