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