From a6d19c51a1fd1255effdbab5c83c86ae3bda1e9c Mon Sep 17 00:00:00 2001 From: Chris Nauroth Date: Tue, 6 May 2014 19:49:38 +0000 Subject: [PATCH] HADOOP-10517. InputStream is not closed in two methods of JarFinder. Contributed by Ted Yu. git-svn-id: https://svn.apache.org/repos/asf/hadoop/common/trunk@1592855 13f79535-47bb-0310-9956-ffa450edef68 --- .../hadoop-common/CHANGES.txt | 3 ++ .../org/apache/hadoop/util/JarFinder.java | 31 +++++++++++-------- 2 files changed, 21 insertions(+), 13 deletions(-) diff --git a/hadoop-common-project/hadoop-common/CHANGES.txt b/hadoop-common-project/hadoop-common/CHANGES.txt index 957ac232af7..7ffd913a8c0 100644 --- a/hadoop-common-project/hadoop-common/CHANGES.txt +++ b/hadoop-common-project/hadoop-common/CHANGES.txt @@ -446,6 +446,9 @@ Release 2.5.0 - UNRELEASED HADOOP-10541. InputStream in MiniKdc#initKDCServer for minikdc.ldiff is not closed. (Swarnim Kulkarni via cnauroth) + HADOOP-10517. InputStream is not closed in two methods of JarFinder. + (Ted Yu via cnauroth) + Release 2.4.1 - UNRELEASED INCOMPATIBLE CHANGES diff --git a/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/util/JarFinder.java b/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/util/JarFinder.java index 31a29e9d37d..72ca8cc8705 100644 --- a/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/util/JarFinder.java +++ b/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/util/JarFinder.java @@ -39,17 +39,24 @@ import java.util.zip.ZipOutputStream; */ public class JarFinder { - private static void copyToZipStream(InputStream is, ZipEntry entry, + private static void copyToZipStream(File file, ZipEntry entry, ZipOutputStream zos) throws IOException { - zos.putNextEntry(entry); - byte[] arr = new byte[4096]; - int read = is.read(arr); - while (read > -1) { - zos.write(arr, 0, read); - read = is.read(arr); + InputStream is = new FileInputStream(file); + try { + zos.putNextEntry(entry); + byte[] arr = new byte[4096]; + int read = is.read(arr); + while (read > -1) { + zos.write(arr, 0, read); + read = is.read(arr); + } + } finally { + try { + is.close(); + } finally { + zos.closeEntry(); + } } - is.close(); - zos.closeEntry(); } public static void jarDir(File dir, String relativePath, ZipOutputStream zos) @@ -66,8 +73,7 @@ public class JarFinder { new Manifest().write(new BufferedOutputStream(zos)); zos.closeEntry(); } else { - InputStream is = new FileInputStream(manifestFile); - copyToZipStream(is, manifestEntry, zos); + copyToZipStream(manifestFile, manifestEntry, zos); } zos.closeEntry(); zipDir(dir, relativePath, zos, true); @@ -94,8 +100,7 @@ public class JarFinder { String path = relativePath + f.getName(); if (!path.equals(JarFile.MANIFEST_NAME)) { ZipEntry anEntry = new ZipEntry(path); - InputStream is = new FileInputStream(f); - copyToZipStream(is, anEntry, zos); + copyToZipStream(f, anEntry, zos); } } }