From 909e4e716c4d77e33357bbe9bc902bfaf2e1af24 Mon Sep 17 00:00:00 2001 From: Nick Clifton Date: Wed, 19 Jul 2017 14:49:12 +0100 Subject: [PATCH] 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. --- bfd/ChangeLog | 7 +++++++ bfd/archive.c | 7 ++++++- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/bfd/ChangeLog b/bfd/ChangeLog index b8837588d11..cc7f45c8cd3 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,10 @@ +2017-07-19 Nick Clifton + + 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. + 2017-07-19 Nick Clifton PR 21786 diff --git a/bfd/archive.c b/bfd/archive.c index f209babe149..885bf489c02 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); -- 2.30.2