32 lines
984 B
Diff
32 lines
984 B
Diff
commit 22d2d082d57a7470fadc0eae67179553f4919209
|
|
Author: Mark Wielaard <mark@klomp.org>
|
|
Date: Thu Oct 18 23:15:48 2018 +0200
|
|
|
|
size: Handle recursive ELF ar files.
|
|
|
|
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>
|
|
|
|
diff --git a/src/size.c b/src/size.c
|
|
index 5ff3f2a..f01fd88 100644
|
|
--- a/src/size.c
|
|
+++ b/src/size.c
|
|
@@ -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;
|
|
}
|