Repository: commons-compress
Updated Branches:
  refs/heads/master c226da238 -> a184b3ad1


Implement uncompressing of BZip2 compressed entries in 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/6eac426d
Tree: http://git-wip-us.apache.org/repos/asf/commons-compress/tree/6eac426d
Diff: http://git-wip-us.apache.org/repos/asf/commons-compress/diff/6eac426d

Branch: refs/heads/master
Commit: 6eac426de89fe077a181f39452dee6f6ca4c2f52
Parents: ca55bc4
Author: Sören Glimm <[email protected]>
Authored: Tue Nov 10 20:00:20 2015 +0100
Committer: Stefan Bodewig <[email protected]>
Committed: Wed Nov 11 06:11:33 2015 +0100

----------------------------------------------------------------------
 .../archivers/zip/ZipArchiveInputStream.java        |  6 +++++-
 .../archivers/zip/ZipArchiveInputStreamTest.java    | 16 ++++++++++++++++
 2 files changed, 21 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/commons-compress/blob/6eac426d/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 f9d240b..2f7894a 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
@@ -33,6 +33,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.utils.IOUtils;
 
 import static org.apache.commons.compress.archivers.zip.ZipConstants.DWORD;
@@ -312,6 +313,8 @@ public class ZipArchiveInputStream extends 
ArchiveInputStream {
                         
current.entry.getGeneralPurposeBit().getSlidingDictionarySize(),
                         
current.entry.getGeneralPurposeBit().getNumberOfShannonFanoTrees(),
                         new BoundedInputStream(in, 
current.entry.getCompressedSize()));
+            } else if (current.entry.getMethod() == ZipMethod.BZIP2.getCode()) 
{
+                current.in = new BZip2CompressorInputStream(new 
BoundedInputStream(in, current.entry.getCompressedSize()));
             }
         }
         
@@ -413,7 +416,8 @@ public class ZipArchiveInputStream extends 
ArchiveInputStream {
         } else if (current.entry.getMethod() == 
ZipArchiveOutputStream.DEFLATED) {
             read = readDeflated(buffer, offset, length);
         } else if (current.entry.getMethod() == ZipMethod.UNSHRINKING.getCode()
-                || current.entry.getMethod() == ZipMethod.IMPLODING.getCode()) 
{
+                || current.entry.getMethod() == ZipMethod.IMPLODING.getCode()
+                || current.entry.getMethod() == ZipMethod.BZIP2.getCode()) {
             read = current.in.read(buffer, offset, length);
         } else {
             throw new 
UnsupportedZipFeatureException(ZipMethod.getMethodByCode(current.entry.getMethod()),

http://git-wip-us.apache.org/repos/asf/commons-compress/blob/6eac426d/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 1120a37..1a9bb5d 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
@@ -26,6 +26,7 @@ import static org.junit.Assert.assertTrue;
 import java.io.BufferedInputStream;
 import java.io.FileInputStream;
 import java.io.InputStream;
+import java.util.Arrays;
 import java.io.IOException;
 
 import org.apache.commons.compress.utils.IOUtils;
@@ -169,4 +170,19 @@ public class ZipArchiveInputStreamTest {
             in.close();
         }
     }
+
+    @Test
+    public void testUnzipBZip2CompressedEntry() throws Exception {
+        ZipArchiveInputStream in = new ZipArchiveInputStream(new 
FileInputStream(getFile("bzip2-zip.zip")));
+        
+        try {
+            ZipArchiveEntry ze = in.getNextZipEntry();
+            assertEquals(42, ze.getSize());
+            byte[] expected = new byte[42];
+            Arrays.fill(expected , (byte)'a');
+            assertArrayEquals(expected, IOUtils.toByteArray(in));
+        } finally {
+            in.close();
+        }
+    }
 }

Reply via email to