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();
+		}
+	}
 }