Repository: commons-compress Updated Branches: refs/heads/master 5b004bfc1 -> a12adc362
COMPRESS-437 add read-only DEFLATE64 support to 7z Project: http://git-wip-us.apache.org/repos/asf/commons-compress/repo Commit: http://git-wip-us.apache.org/repos/asf/commons-compress/commit/738c708b Tree: http://git-wip-us.apache.org/repos/asf/commons-compress/tree/738c708b Diff: http://git-wip-us.apache.org/repos/asf/commons-compress/diff/738c708b Branch: refs/heads/master Commit: 738c708be3dbfd99a6ef5c0b486bf0b55e315406 Parents: 5b004bf Author: Stefan Bodewig <bode...@apache.org> Authored: Sat Jan 13 16:31:39 2018 +0100 Committer: Stefan Bodewig <bode...@apache.org> Committed: Sat Jan 13 16:31:39 2018 +0100 ---------------------------------------------------------------------- src/changes/changes.xml | 3 +++ .../commons/compress/archivers/sevenz/Coders.java | 16 ++++++++++++++++ .../compress/archivers/sevenz/SevenZMethod.java | 5 +++++ src/site/xdoc/examples.xml | 2 +- src/site/xdoc/index.xml | 2 +- .../compress/archivers/sevenz/SevenZFileTest.java | 5 +++++ src/test/resources/bla.deflate64.7z | Bin 0 -> 503 bytes 7 files changed, 31 insertions(+), 2 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/commons-compress/blob/738c708b/src/changes/changes.xml ---------------------------------------------------------------------- diff --git a/src/changes/changes.xml b/src/changes/changes.xml index cdca5d4..e9b8d7a 100644 --- a/src/changes/changes.xml +++ b/src/changes/changes.xml @@ -94,6 +94,9 @@ The <action> type attribute can be add,update,fix,remove. due-to="Dawid Weiss"> Speed improvement for DEFLATE64 decompression. </action> + <action issue="COMPRESS-437" type="add" date="2018-01-13"> + Added read-only DEFLATE64 support to 7z archives. + </action> </release> <release version="1.15" date="2017-10-17" description="Release 1.15 http://git-wip-us.apache.org/repos/asf/commons-compress/blob/738c708b/src/main/java/org/apache/commons/compress/archivers/sevenz/Coders.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/commons/compress/archivers/sevenz/Coders.java b/src/main/java/org/apache/commons/compress/archivers/sevenz/Coders.java index 50ae163..065562d 100644 --- a/src/main/java/org/apache/commons/compress/archivers/sevenz/Coders.java +++ b/src/main/java/org/apache/commons/compress/archivers/sevenz/Coders.java @@ -31,6 +31,7 @@ import java.util.zip.InflaterInputStream; import org.apache.commons.compress.compressors.bzip2.BZip2CompressorInputStream; import org.apache.commons.compress.compressors.bzip2.BZip2CompressorOutputStream; +import org.apache.commons.compress.compressors.deflate64.Deflate64CompressorInputStream; import org.apache.commons.compress.utils.FlushShieldFilterOutputStream; import org.tukaani.xz.ARMOptions; import org.tukaani.xz.ARMThumbOptions; @@ -50,6 +51,7 @@ class Coders { put(SevenZMethod.LZMA, new LZMADecoder()); put(SevenZMethod.LZMA2, new LZMA2Decoder()); put(SevenZMethod.DEFLATE, new DeflateDecoder()); + put(SevenZMethod.DEFLATE64, new Deflate64Decoder()); put(SevenZMethod.BZIP2, new BZIP2Decoder()); put(SevenZMethod.AES256SHA256, new AES256SHA256Decoder()); put(SevenZMethod.BCJ_X86_FILTER, new BCJDecoder(new X86Options())); @@ -219,6 +221,20 @@ class Coders { } } + static class Deflate64Decoder extends CoderBase { + Deflate64Decoder() { + super(Number.class); + } + + @SuppressWarnings("resource") // caller must close the InputStream + @Override + InputStream decode(final String archiveName, final InputStream in, final long uncompressedLength, + final Coder coder, final byte[] password) + throws IOException { + return new Deflate64CompressorInputStream(in); + } + } + static class BZIP2Decoder extends CoderBase { BZIP2Decoder() { super(Number.class); http://git-wip-us.apache.org/repos/asf/commons-compress/blob/738c708b/src/main/java/org/apache/commons/compress/archivers/sevenz/SevenZMethod.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/commons/compress/archivers/sevenz/SevenZMethod.java b/src/main/java/org/apache/commons/compress/archivers/sevenz/SevenZMethod.java index 25a2e24..d36c42f 100644 --- a/src/main/java/org/apache/commons/compress/archivers/sevenz/SevenZMethod.java +++ b/src/main/java/org/apache/commons/compress/archivers/sevenz/SevenZMethod.java @@ -42,6 +42,11 @@ public enum SevenZMethod { LZMA2(new byte[] { (byte)0x21 }), /** Deflate */ DEFLATE(new byte[] { (byte)0x04, (byte)0x01, (byte)0x08 }), + /** + * Deflate64 + * @since 1.16 + */ + DEFLATE64(new byte[] { (byte)0x04, (byte)0x01, (byte)0x09 }), /** BZIP2 */ BZIP2(new byte[] { (byte)0x04, (byte)0x02, (byte)0x02 }), /** http://git-wip-us.apache.org/repos/asf/commons-compress/blob/738c708b/src/site/xdoc/examples.xml ---------------------------------------------------------------------- diff --git a/src/site/xdoc/examples.xml b/src/site/xdoc/examples.xml index 64a743d..d3fd0d4 100644 --- a/src/site/xdoc/examples.xml +++ b/src/site/xdoc/examples.xml @@ -419,7 +419,7 @@ LOOP UNTIL entry.getSize() HAS BEEN READ { of compression and encryption algorithms used for 7z archives. For writing only uncompressed entries, LZMA, LZMA2, BZIP2 and Deflate are supported - reading also supports - AES-256/SHA-256.</p> + AES-256/SHA-256 and DEFLATE64.</p> <p>Multipart archives are not supported at all.</p> http://git-wip-us.apache.org/repos/asf/commons-compress/blob/738c708b/src/site/xdoc/index.xml ---------------------------------------------------------------------- diff --git a/src/site/xdoc/index.xml b/src/site/xdoc/index.xml index cfadd39..d6bfd57 100644 --- a/src/site/xdoc/index.xml +++ b/src/site/xdoc/index.xml @@ -71,7 +71,7 @@ <li>Support for Zstandard compression.</li> <li>Read-only support for DEFLATE64 compression as stand-alone CompressorInputStream and as method used in - ZIP archives.</li> + ZIP and 7z archives.</li> </ul> </subsection> http://git-wip-us.apache.org/repos/asf/commons-compress/blob/738c708b/src/test/java/org/apache/commons/compress/archivers/sevenz/SevenZFileTest.java ---------------------------------------------------------------------- diff --git a/src/test/java/org/apache/commons/compress/archivers/sevenz/SevenZFileTest.java b/src/test/java/org/apache/commons/compress/archivers/sevenz/SevenZFileTest.java index 4592523..954cd09 100644 --- a/src/test/java/org/apache/commons/compress/archivers/sevenz/SevenZFileTest.java +++ b/src/test/java/org/apache/commons/compress/archivers/sevenz/SevenZFileTest.java @@ -132,6 +132,11 @@ public class SevenZFileTest extends AbstractTestCase { } @Test + public void test7zDeflate64Unarchive() throws Exception { + test7zUnarchive(getFile("bla.deflate64.7z"), SevenZMethod.DEFLATE64); + } + + @Test public void test7zDecryptUnarchive() throws Exception { if (isStrongCryptoAvailable()) { test7zUnarchive(getFile("bla.encrypted.7z"), SevenZMethod.LZMA, // stack LZMA + AES http://git-wip-us.apache.org/repos/asf/commons-compress/blob/738c708b/src/test/resources/bla.deflate64.7z ---------------------------------------------------------------------- diff --git a/src/test/resources/bla.deflate64.7z b/src/test/resources/bla.deflate64.7z new file mode 100644 index 0000000..94f60bd Binary files /dev/null and b/src/test/resources/bla.deflate64.7z differ