Bug 553667 - Resource leak in ElfParser
This change fixes a file descriptor leak in
ElfParser.hasInterpProgramHeader(). An Elf object is created without
calling its Elf.dispose(). This results in a created RandomAccessFile
object, without a respective RandomAccessFile.close() call.
Change-Id: I6d2a0911857eb6fcb388b352801c2259ae19171c
Signed-off-by: Simeon Andreev <simeon.danailov.andreev@gmail.com>
diff --git a/core/org.eclipse.cdt.core/utils/org/eclipse/cdt/utils/elf/parser/ElfParser.java b/core/org.eclipse.cdt.core/utils/org/eclipse/cdt/utils/elf/parser/ElfParser.java
index 413295e..0bcdb51 100644
--- a/core/org.eclipse.cdt.core/utils/org/eclipse/cdt/utils/elf/parser/ElfParser.java
+++ b/core/org.eclipse.cdt.core/utils/org/eclipse/cdt/utils/elf/parser/ElfParser.java
@@ -190,10 +190,19 @@
try {
/* No PHdr.PT_INTERP found in the hints meaning we need to read the file itself */
- return Arrays.stream(new Elf(path.toOSString()).getPHdrs()).anyMatch(phdr -> phdr.p_type == PHdr.PT_INTERP);
+ return Arrays.stream(getPHdrs(path)).anyMatch(phdr -> phdr.p_type == PHdr.PT_INTERP);
} catch (IOException e) {
CCorePlugin.log(e);
}
return false;
}
+
+ private static PHdr[] getPHdrs(IPath path) throws IOException {
+ Elf elf = new Elf(path.toOSString());
+ try {
+ return elf.getPHdrs();
+ } finally {
+ elf.dispose();
+ }
+ }
}