mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-11-27 12:03:41 +08:00
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
@ -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
|
||||
|
11
bfd/som.c
11
bfd/som.c
@ -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))
|
||||
|
@ -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)
|
||||
|
Loading…
Reference in New Issue
Block a user