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:
parent
063e75c9e4
commit
09e40e44ad
3 changed files with 22 additions and 1 deletions
|
@ -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>
|
2021-04-29 Nick Clifton <nickc@redhat.com>
|
||||||
|
|
||||||
PR 27792
|
PR 27792
|
||||||
|
|
11
bfd/som.c
11
bfd/som.c
|
@ -4740,7 +4740,7 @@ som_slurp_symbol_table (bfd *abfd)
|
||||||
goto error_return;
|
goto error_return;
|
||||||
}
|
}
|
||||||
sym->symbol.value = bfd_getb32 (bufp->symbol_value);
|
sym->symbol.value = bfd_getb32 (bufp->symbol_value);
|
||||||
sym->symbol.section = 0;
|
sym->symbol.section = NULL;
|
||||||
sym->symbol.flags = 0;
|
sym->symbol.flags = 0;
|
||||||
|
|
||||||
switch (symbol_type)
|
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.section = bfd_section_from_som_symbol (abfd, bufp);
|
||||||
sym->symbol.value -= sym->symbol.section->vma;
|
sym->symbol.value -= sym->symbol.section->vma;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
sym->symbol.section = bfd_und_section_ptr;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Check for a weak symbol. */
|
/* Check for a weak symbol. */
|
||||||
|
@ -5848,6 +5852,11 @@ som_decode_symclass (asymbol *symbol)
|
||||||
{
|
{
|
||||||
char c;
|
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))
|
if (bfd_is_com_section (symbol->section))
|
||||||
return 'C';
|
return 'C';
|
||||||
if (bfd_is_und_section (symbol->section))
|
if (bfd_is_und_section (symbol->section))
|
||||||
|
|
|
@ -654,6 +654,10 @@ bfd_decode_symclass (asymbol *symbol)
|
||||||
{
|
{
|
||||||
char c;
|
char c;
|
||||||
|
|
||||||
|
/* Paranoia... */
|
||||||
|
if (symbol == NULL || symbol->section == NULL)
|
||||||
|
return '?';
|
||||||
|
|
||||||
if (symbol->section && bfd_is_com_section (symbol->section))
|
if (symbol->section && bfd_is_com_section (symbol->section))
|
||||||
{
|
{
|
||||||
if (symbol->section->flags & SEC_SMALL_DATA)
|
if (symbol->section->flags & SEC_SMALL_DATA)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue