You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by bo...@apache.org on 2018/01/09 17:41:00 UTC

[07/28] commons-compress git commit: COMPRESS-380 add DEFLATE64 support to ZipArchiveInputStream

COMPRESS-380 add DEFLATE64 support to ZipArchiveInputStream


Project: http://git-wip-us.apache.org/repos/asf/commons-compress/repo
Commit: http://git-wip-us.apache.org/repos/asf/commons-compress/commit/ccc3067f
Tree: http://git-wip-us.apache.org/repos/asf/commons-compress/tree/ccc3067f
Diff: http://git-wip-us.apache.org/repos/asf/commons-compress/diff/ccc3067f

Branch: refs/heads/master
Commit: ccc3067f5216630d6c96f21f1ed2ef174aba9bd5
Parents: 07cc1a2
Author: Stefan Bodewig <bo...@apache.org>
Authored: Fri Jan 5 06:52:55 2018 +0100
Committer: Stefan Bodewig <bo...@apache.org>
Committed: Fri Jan 5 06:53:38 2018 +0100

----------------------------------------------------------------------
 .../archivers/zip/ZipArchiveInputStream.java        | 11 ++++++++---
 .../archivers/zip/ZipArchiveInputStreamTest.java    | 16 ++++++++++++++++
 2 files changed, 24 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/commons-compress/blob/ccc3067f/src/main/java/org/apache/commons/compress/archivers/zip/ZipArchiveInputStream.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/commons/compress/archivers/zip/ZipArchiveInputStream.java b/src/main/java/org/apache/commons/compress/archivers/zip/ZipArchiveInputStream.java
index 54b69ae..5ea9c0a 100644
--- a/src/main/java/org/apache/commons/compress/archivers/zip/ZipArchiveInputStream.java
+++ b/src/main/java/org/apache/commons/compress/archivers/zip/ZipArchiveInputStream.java
@@ -34,6 +34,7 @@ import java.util.zip.ZipException;
 import org.apache.commons.compress.archivers.ArchiveEntry;
 import org.apache.commons.compress.archivers.ArchiveInputStream;
 import org.apache.commons.compress.compressors.bzip2.BZip2CompressorInputStream;
+import org.apache.commons.compress.compressors.deflate64.Deflate64CompressorInputStream;
 import org.apache.commons.compress.utils.ArchiveUtils;
 import org.apache.commons.compress.utils.IOUtils;
 
@@ -313,15 +314,18 @@ public class ZipArchiveInputStream extends ArchiveInputStream {
         current.entry.setStreamContiguous(true);
 
         if (current.entry.getCompressedSize() != ArchiveEntry.SIZE_UNKNOWN) {
+            InputStream bis = new BoundedInputStream(in, current.entry.getCompressedSize());
             if (current.entry.getMethod() == ZipMethod.UNSHRINKING.getCode()) {
-                current.in = new UnshrinkingInputStream(new BoundedInputStream(in, current.entry.getCompressedSize()));
+                current.in = new UnshrinkingInputStream(bis);
             } else if (current.entry.getMethod() == ZipMethod.IMPLODING.getCode()) {
                 current.in = new ExplodingInputStream(
                         current.entry.getGeneralPurposeBit().getSlidingDictionarySize(),
                         current.entry.getGeneralPurposeBit().getNumberOfShannonFanoTrees(),
-                        new BoundedInputStream(in, current.entry.getCompressedSize()));
+                        bis);
             } else if (current.entry.getMethod() == ZipMethod.BZIP2.getCode()) {
-                current.in = new BZip2CompressorInputStream(new BoundedInputStream(in, current.entry.getCompressedSize()));
+                current.in = new BZip2CompressorInputStream(bis);
+            } else if (current.entry.getMethod() == ZipMethod.ENHANCED_DEFLATED.getCode()) {
+                current.in = new Deflate64CompressorInputStream(bis);
             }
         }
 
@@ -424,6 +428,7 @@ public class ZipArchiveInputStream extends ArchiveInputStream {
             read = readDeflated(buffer, offset, length);
         } else if (current.entry.getMethod() == ZipMethod.UNSHRINKING.getCode()
                 || current.entry.getMethod() == ZipMethod.IMPLODING.getCode()
+                || current.entry.getMethod() == ZipMethod.ENHANCED_DEFLATED.getCode()
                 || current.entry.getMethod() == ZipMethod.BZIP2.getCode()) {
             read = current.in.read(buffer, offset, length);
         } else {

http://git-wip-us.apache.org/repos/asf/commons-compress/blob/ccc3067f/src/test/java/org/apache/commons/compress/archivers/zip/ZipArchiveInputStreamTest.java
----------------------------------------------------------------------
diff --git a/src/test/java/org/apache/commons/compress/archivers/zip/ZipArchiveInputStreamTest.java b/src/test/java/org/apache/commons/compress/archivers/zip/ZipArchiveInputStreamTest.java
index a0a5c50..3bb62d5 100644
--- a/src/test/java/org/apache/commons/compress/archivers/zip/ZipArchiveInputStreamTest.java
+++ b/src/test/java/org/apache/commons/compress/archivers/zip/ZipArchiveInputStreamTest.java
@@ -206,6 +206,22 @@ public class ZipArchiveInputStreamTest {
     }
 
     /**
+     * @see "https://issues.apache.org/jira/browse/COMPRESS-380"
+     */
+    @Test
+    public void readDeflate64CompressedStream() throws Exception {
+        final File input = getFile("COMPRESS-380-input");
+        final File archive = getFile("COMPRESS-380.zip");
+        try (FileInputStream in = new FileInputStream(input);
+             ZipArchiveInputStream zin = new ZipArchiveInputStream(new FileInputStream(archive))) {
+            byte[] orig = IOUtils.toByteArray(in);
+            ZipArchiveEntry e = zin.getNextZipEntry();
+            byte[] fromZip = IOUtils.toByteArray(zin);
+            assertArrayEquals(orig, fromZip);
+        }
+    }
+
+    /**
      * Test case for
      * <a href="https://issues.apache.org/jira/browse/COMPRESS-364"
      * >COMPRESS-364</a>.