diff options
author | Nick Clifton <nickc@redhat.com> | 2016-12-06 15:58:15 +0000 |
---|---|---|
committer | Nick Clifton <nickc@redhat.com> | 2016-12-06 15:58:15 +0000 |
commit | 92744f058094edd0b29bf9762f4ac26e4c6743c2 (patch) | |
tree | 5a417e97e0029612e1a6e760bf312d69dc9abde0 /bfd/aoutx.h | |
parent | 5eecd8621b955fb99860fc1b0d87074071f42f72 (diff) | |
download | gdb-92744f058094edd0b29bf9762f4ac26e4c6743c2.zip gdb-92744f058094edd0b29bf9762f4ac26e4c6743c2.tar.gz gdb-92744f058094edd0b29bf9762f4ac26e4c6743c2.tar.bz2 |
Fix seg-fault running strip on a corrupt binary.
PR binutils/20929
* aoutx.h (squirt_out_relocs): Check for relocs without an
associated symbol.
Diffstat (limited to 'bfd/aoutx.h')
-rw-r--r-- | bfd/aoutx.h | 17 |
1 files changed, 11 insertions, 6 deletions
diff --git a/bfd/aoutx.h b/bfd/aoutx.h index 43e5f8d..c64f288 100644 --- a/bfd/aoutx.h +++ b/bfd/aoutx.h @@ -2395,10 +2395,15 @@ NAME (aout, squirt_out_relocs) (bfd *abfd, asection *section) count != 0; --count, natptr += each_size, ++generic) { - if ((*generic)->howto == NULL) + /* PR 20921: If the howto field has not been initialised then skip + this reloc. + PR 20929: Similarly for the symbol field. */ + if ((*generic)->howto == NULL + || (*generic)->sym_ptr_ptr == NULL) { bfd_set_error (bfd_error_invalid_operation); - _bfd_error_handler (_("%B: attempt to write out unknown reloc type"), abfd); + _bfd_error_handler (_("\ +%B: attempt to write out unknown reloc type"), abfd); return FALSE; } MY_swap_ext_reloc_out (abfd, *generic, @@ -2411,12 +2416,12 @@ NAME (aout, squirt_out_relocs) (bfd *abfd, asection *section) count != 0; --count, natptr += each_size, ++generic) { - /* PR 20921: If the howto field has not been initialised then skip - this reloc. */ - if ((*generic)->howto == NULL) + if ((*generic)->howto == NULL + || (*generic)->sym_ptr_ptr == NULL) { bfd_set_error (bfd_error_invalid_operation); - _bfd_error_handler (_("%B: attempt to write out unknown reloc type"), abfd); + _bfd_error_handler (_("\ +%B: attempt to write out unknown reloc type"), abfd); return FALSE; } MY_swap_std_reloc_out (abfd, *generic, |