You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by gg...@apache.org on 2022/09/30 15:28:11 UTC

[commons-compress] 04/05: Some input streams are not closed in org.apache.commons.compress.harmony.pack200.PackingUtils.

This is an automated email from the ASF dual-hosted git repository.

ggregory pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/commons-compress.git

commit 59cab3e7b65b10d9cbef1206eabdbcf46e350ee2
Author: Gary Gregory <ga...@gmail.com>
AuthorDate: Fri Sep 30 11:22:24 2022 -0400

    Some input streams are not closed in
    org.apache.commons.compress.harmony.pack200.PackingUtils.
---
 src/changes/changes.xml                            |  3 +
 .../compress/harmony/pack200/PackingUtils.java     | 79 +++++++++++-----------
 2 files changed, 42 insertions(+), 40 deletions(-)

diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index 2ad3ad6b..932fe92f 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -115,6 +115,9 @@ The <action> type attribute can be add,update,fix,remove.
       <action issue="COMPRESS-626" type="fix" dev="ggregory" due-to="Andrii Hudz, Gary Gregory">
         OutOfMemoryError on malformed pack200 attributes.
       </action>
+      <action type="fix" dev="ggregory" due-to="Gary Gregory">
+        Some input streams are not closed in org.apache.commons.compress.harmony.pack200.PackingUtils.
+      </action>
       <!-- ADD -->
       <action issue="COMPRESS-602" type="add" dev="ggregory" due-to="Postelnicu George, Gary Gregory">
         Migrate zip package to use NIO #236.
diff --git a/src/main/java/org/apache/commons/compress/harmony/pack200/PackingUtils.java b/src/main/java/org/apache/commons/compress/harmony/pack200/PackingUtils.java
index 402719d8..5d7a5187 100644
--- a/src/main/java/org/apache/commons/compress/harmony/pack200/PackingUtils.java
+++ b/src/main/java/org/apache/commons/compress/harmony/pack200/PackingUtils.java
@@ -119,27 +119,26 @@ public class PackingUtils {
      * @param outputStream the jar output stream
      * @throws IOException If an I/O error occurs.
      */
-    public static void copyThroughJar(final JarFile jarFile, final OutputStream outputStream) throws IOException {
-        final JarOutputStream jarOutputStream = new JarOutputStream(outputStream);
-        jarOutputStream.setComment("PACK200");
-        final byte[] bytes = new byte[16384];
-        final Enumeration entries = jarFile.entries();
-        InputStream inputStream;
-        JarEntry jarEntry;
-        int bytesRead;
-        while (entries.hasMoreElements()) {
-            jarEntry = (JarEntry) entries.nextElement();
-            jarOutputStream.putNextEntry(jarEntry);
-            inputStream = jarFile.getInputStream(jarEntry);
-            while ((bytesRead = inputStream.read(bytes)) != -1) {
-                jarOutputStream.write(bytes, 0, bytesRead);
-            }
-            jarOutputStream.closeEntry();
-            log("Packed " + jarEntry.getName());
-        }
-        jarFile.close();
-        jarOutputStream.close();
-    }
+	public static void copyThroughJar(final JarFile jarFile, final OutputStream outputStream) throws IOException {
+		final JarOutputStream jarOutputStream = new JarOutputStream(outputStream);
+		jarOutputStream.setComment("PACK200");
+		final byte[] bytes = new byte[16384];
+		final Enumeration<JarEntry> entries = jarFile.entries();
+		while (entries.hasMoreElements()) {
+			JarEntry jarEntry = entries.nextElement();
+			jarOutputStream.putNextEntry(jarEntry);
+			try (InputStream inputStream = jarFile.getInputStream(jarEntry)) {
+				int bytesRead;
+				while ((bytesRead = inputStream.read(bytes)) != -1) {
+					jarOutputStream.write(bytes, 0, bytesRead);
+				}
+				jarOutputStream.closeEntry();
+				log("Packed " + jarEntry.getName());
+			}
+		}
+		jarFile.close();
+		jarOutputStream.close();
+	}
 
     public static List<PackingFile> getPackingFileListFromJar(final JarInputStream jarInputStream, final boolean keepFileOrder)
         throws IOException {
@@ -169,23 +168,23 @@ public class PackingUtils {
     }
 
     public static List<PackingFile> getPackingFileListFromJar(final JarFile jarFile, final boolean keepFileOrder)
-        throws IOException {
-        final List<PackingFile> packingFileList = new ArrayList<>();
-        final Enumeration<JarEntry> jarEntries = jarFile.entries();
-        JarEntry jarEntry;
-        byte[] bytes;
-        while (jarEntries.hasMoreElements()) {
-            jarEntry = jarEntries.nextElement();
-            bytes = readJarEntry(jarEntry, new BufferedInputStream(jarFile.getInputStream(jarEntry)));
-            packingFileList.add(new PackingFile(bytes, jarEntry));
-        }
-
-        // check whether it need reorder packing file list
-        if (!keepFileOrder) {
-            reorderPackingFiles(packingFileList);
-        }
-        return packingFileList;
-    }
+			throws IOException {
+		final List<PackingFile> packingFileList = new ArrayList<>();
+		final Enumeration<JarEntry> jarEntries = jarFile.entries();
+		while (jarEntries.hasMoreElements()) {
+			final JarEntry jarEntry = jarEntries.nextElement();
+			try (InputStream inputStream = jarFile.getInputStream(jarEntry)) {
+				final byte[] bytes = readJarEntry(jarEntry, new BufferedInputStream(inputStream));
+				packingFileList.add(new PackingFile(bytes, jarEntry));
+			}
+		}
+
+		// check whether it need reorder packing file list
+		if (!keepFileOrder) {
+			reorderPackingFiles(packingFileList);
+		}
+		return packingFileList;
+	}
 
     private static byte[] readJarEntry(final JarEntry jarEntry, final InputStream inputStream) throws IOException {
         long size = jarEntry.getSize();
@@ -217,8 +216,8 @@ public class PackingUtils {
         // position
         packingFileList.sort((arg0, arg1) -> {
             if (arg0 instanceof PackingFile && arg1 instanceof PackingFile) {
-                final String fileName0 = ((PackingFile) arg0).getName();
-                final String fileName1 = ((PackingFile) arg1).getName();
+                final String fileName0 = arg0.getName();
+                final String fileName1 = arg1.getName();
                 if (fileName0.equals(fileName1)) {
                     return 0;
                 }