bfd: Set error to bfd_error_malformed_archive only if unset
authorH.J. Lu <hjl.tools@gmail.com>
Mon, 26 Jul 2021 12:37:57 +0000 (05:37 -0700)
committerH.J. Lu <hjl.tools@gmail.com>
Mon, 26 Jul 2021 23:21:47 +0000 (16:21 -0700)
When reading an archive member, set error to bfd_error_malformed_archive
on open_nested_file failure only if the error is unset.

PR ld/28138
* archive.c (_bfd_get_elt_at_filepos): Don't set error to
bfd_error_malformed_archive if it has been set.

bfd/archive.c

index 5f350b8e5ce3991ae1df6d81382afed2db7a2dba..3868fc9f7ed461fee5e5321e695e51739919730f 100644 (file)
@@ -713,8 +713,9 @@ _bfd_get_elt_at_filepos (bfd *archive, file_ptr filepos)
 
       /* It's not an element of a nested archive;
         open the external file as a bfd.  */
+      bfd_set_error (bfd_error_no_error);
       n_bfd = open_nested_file (filename, archive);
-      if (n_bfd == NULL)
+      if (n_bfd == NULL && bfd_get_error () == bfd_error_no_error)
        bfd_set_error (bfd_error_malformed_archive);
     }
   else