diff options
author | Nick Clifton <nickc@redhat.com> | 2017-07-19 14:49:12 +0100 |
---|---|---|
committer | Nick Clifton <nickc@redhat.com> | 2017-07-19 14:49:12 +0100 |
commit | 909e4e716c4d77e33357bbe9bc902bfaf2e1af24 (patch) | |
tree | c406acbf9c4e7a7d0978266414275e57dcc16a40 /bfd/archive.c | |
parent | 62a5222fdab2acdc129b7c7d3713e7f349e26029 (diff) | |
download | gdb-909e4e716c4d77e33357bbe9bc902bfaf2e1af24.zip gdb-909e4e716c4d77e33357bbe9bc902bfaf2e1af24.tar.gz gdb-909e4e716c4d77e33357bbe9bc902bfaf2e1af24.tar.bz2 |
Fix use-after-free error when parsing a corrupt nested archive.
PR 21787
* archive.c (bfd_generic_archive_p): If the bfd does not have the
correct magic bytes at the start, set the error to wrong format
and clear the format selector before returning NULL.
Diffstat (limited to 'bfd/archive.c')
-rw-r--r-- | bfd/archive.c | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/bfd/archive.c b/bfd/archive.c index f209bab..885bf48 100644 --- a/bfd/archive.c +++ b/bfd/archive.c @@ -834,7 +834,12 @@ bfd_generic_archive_p (bfd *abfd) if (strncmp (armag, ARMAG, SARMAG) != 0 && strncmp (armag, ARMAGB, SARMAG) != 0 && ! bfd_is_thin_archive (abfd)) - return NULL; + { + bfd_set_error (bfd_error_wrong_format); + if (abfd->format == bfd_archive) + abfd->format = bfd_unknown; + return NULL; + } tdata_hold = bfd_ardata (abfd); |