size: Handle recursive ELF ar files.
authorMark Wielaard <mark@klomp.org>
Thu, 18 Oct 2018 21:15:48 +0000 (23:15 +0200)
committerMark Wielaard <mark@klomp.org>
Fri, 19 Oct 2018 22:13:10 +0000 (00:13 +0200)
eu-size didn't handle an ELF ar file that contained an ar file itself
correctly. handle_ar would recursively call itself but close the ELF
file before returning. Only close the ELF file at the top-level.

https://sourceware.org/bugzilla/show_bug.cgi?id=23787

Signed-off-by: Mark Wielaard <mark@klomp.org>
src/ChangeLog
src/size.c

index 92beb1b..a6ab093 100644 (file)
@@ -1,5 +1,9 @@
 2018-10-18  Mark Wielaard  <mark@klomp.org>
 
+       * size.c (handle_ar): Only close elf if prefix was NULL.
+
+2018-10-18  Mark Wielaard  <mark@klomp.org>
+
        * arlib.c (arlib_add_symbols): Check that sh_entsize is not zero.
 
 2018-10-14  Mark Wielaard  <mark@klomp.org>
index 5ff3f2a..f01fd88 100644 (file)
@@ -374,8 +374,10 @@ handle_ar (int fd, Elf *elf, const char *prefix, const char *fname)
        INTERNAL_ERROR (fname);
     }
 
-  if (unlikely (elf_end (elf) != 0))
-    INTERNAL_ERROR (fname);
+  /* Only close ELF handle if this was a "top level" ar file.  */
+  if (prefix == NULL)
+    if (unlikely (elf_end (elf) != 0))
+      INTERNAL_ERROR (fname);
 
   return result;
 }