From bc1cd5d27279878b004b3239d8192ccfd35a0b80 Mon Sep 17 00:00:00 2001 From: Brian Long Date: Wed, 22 Nov 2023 12:05:10 -0500 Subject: [PATCH] add deflate64 (deflate enhanced) support --- pom.xml | 5 ++ .../zip4j/headers/FileHeaderFactory.java | 35 ++++++---- .../io/inputstream/CipherInputStream.java | 9 ++- .../io/inputstream/Inflater64InputStream.java | 61 ++++++++++++++++++ .../zip4j/io/inputstream/ZipInputStream.java | 11 +++- .../io/outputstream/ZipOutputStream.java | 13 +++- .../zip4j/model/enums/CompressionMethod.java | 5 ++ .../zip4j/tasks/AbstractAddFileToZipTask.java | 4 +- .../lingala/zip4j/util/ZipVersionUtils.java | 3 +- .../net/lingala/zip4j/ExtractZipFileIT.java | 8 +++ .../archive_deflate64_1_file.zip | Bin 0 -> 34622 bytes 11 files changed, 129 insertions(+), 25 deletions(-) create mode 100644 src/main/java/net/lingala/zip4j/io/inputstream/Inflater64InputStream.java create mode 100644 src/test/resources/test-archives/archive_deflate64_1_file.zip diff --git a/pom.xml b/pom.xml index d8d6bd35..324a5fee 100644 --- a/pom.xml +++ b/pom.xml @@ -52,6 +52,11 @@ + + org.apache.commons + commons-compress + 1.25.0 + junit junit diff --git a/src/main/java/net/lingala/zip4j/headers/FileHeaderFactory.java b/src/main/java/net/lingala/zip4j/headers/FileHeaderFactory.java index b26dceaf..0d7035a3 100644 --- a/src/main/java/net/lingala/zip4j/headers/FileHeaderFactory.java +++ b/src/main/java/net/lingala/zip4j/headers/FileHeaderFactory.java @@ -114,20 +114,27 @@ private byte generateFirstGeneralPurposeByte(boolean isEncrypted, ZipParameters firstByte = setBit(firstByte, 0); } - if (CompressionMethod.DEFLATE.equals(zipParameters.getCompressionMethod())) { - if (CompressionLevel.NORMAL.equals(zipParameters.getCompressionLevel())) { - firstByte = unsetBit(firstByte, 1); - firstByte = unsetBit(firstByte, 2); - } else if (CompressionLevel.MAXIMUM.equals(zipParameters.getCompressionLevel())) { - firstByte = setBit(firstByte, 1); - firstByte = unsetBit(firstByte, 2); - } else if (CompressionLevel.FAST.equals(zipParameters.getCompressionLevel())) { - firstByte = unsetBit(firstByte, 1); - firstByte = setBit(firstByte, 2); - } else if (CompressionLevel.FASTEST.equals(zipParameters.getCompressionLevel()) - || CompressionLevel.ULTRA.equals(zipParameters.getCompressionLevel())) { - firstByte = setBit(firstByte, 1); - firstByte = setBit(firstByte, 2); + if (zipParameters.getCompressionMethod() != null) { + switch (zipParameters.getCompressionMethod()) { + case DEFLATE: + case DEFLATE64: + if (CompressionLevel.NORMAL.equals(zipParameters.getCompressionLevel())) { + firstByte = unsetBit(firstByte, 1); + firstByte = unsetBit(firstByte, 2); + } else if (CompressionLevel.MAXIMUM.equals(zipParameters.getCompressionLevel())) { + firstByte = setBit(firstByte, 1); + firstByte = unsetBit(firstByte, 2); + } else if (CompressionLevel.FAST.equals(zipParameters.getCompressionLevel())) { + firstByte = unsetBit(firstByte, 1); + firstByte = setBit(firstByte, 2); + } else if (CompressionLevel.FASTEST.equals(zipParameters.getCompressionLevel()) + || CompressionLevel.ULTRA.equals(zipParameters.getCompressionLevel())) { + firstByte = setBit(firstByte, 1); + firstByte = setBit(firstByte, 2); + } + break; + default: + // do nothing } } diff --git a/src/main/java/net/lingala/zip4j/io/inputstream/CipherInputStream.java b/src/main/java/net/lingala/zip4j/io/inputstream/CipherInputStream.java index 5023a94e..987edf4f 100644 --- a/src/main/java/net/lingala/zip4j/io/inputstream/CipherInputStream.java +++ b/src/main/java/net/lingala/zip4j/io/inputstream/CipherInputStream.java @@ -2,7 +2,6 @@ import net.lingala.zip4j.crypto.Decrypter; import net.lingala.zip4j.model.LocalFileHeader; -import net.lingala.zip4j.model.enums.CompressionMethod; import net.lingala.zip4j.util.Zip4jUtil; import java.io.IOException; @@ -24,8 +23,12 @@ public CipherInputStream(ZipEntryInputStream zipEntryInputStream, LocalFileHeade this.decrypter = initializeDecrypter(localFileHeader, password, useUtf8ForPassword); this.localFileHeader = localFileHeader; - if (Zip4jUtil.getCompressionMethod(localFileHeader).equals(CompressionMethod.DEFLATE)) { - lastReadRawDataCache = new byte[bufferSize]; + switch (Zip4jUtil.getCompressionMethod(localFileHeader)) { + case DEFLATE: + case DEFLATE64: + lastReadRawDataCache = new byte[bufferSize]; + break; + default: } } diff --git a/src/main/java/net/lingala/zip4j/io/inputstream/Inflater64InputStream.java b/src/main/java/net/lingala/zip4j/io/inputstream/Inflater64InputStream.java new file mode 100644 index 00000000..79a76d43 --- /dev/null +++ b/src/main/java/net/lingala/zip4j/io/inputstream/Inflater64InputStream.java @@ -0,0 +1,61 @@ +package net.lingala.zip4j.io.inputstream; + +import java.io.BufferedInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.PushbackInputStream; + +import org.apache.commons.compress.compressors.deflate64.Deflate64CompressorInputStream; + +public class Inflater64InputStream extends DecompressedInputStream { + + private Deflate64CompressorInputStream inflater; + private BufferedInputStream buffer; + + public Inflater64InputStream(CipherInputStream cipherInputStream, int bufferSize) { + super(cipherInputStream); + this.inflater = new Deflate64CompressorInputStream(cipherInputStream); + this.buffer = new BufferedInputStream(this.inflater, bufferSize); + } + + @Override + public int read() throws IOException { + return this.buffer.read(); + } + + @Override + public int read(byte[] b) throws IOException { + return this.buffer.read(b); + } + + @Override + public int read(byte[] b, int off, int len) throws IOException { + return this.buffer.read(b, off, len); + } + + @Override + public void endOfEntryReached(InputStream inputStream, int numberOfBytesPushedBack) throws IOException { + if (inflater != null) { + buffer.close(); + inflater.close(); // this is redundant, but leaves no doubt for readability + inflater = null; + buffer = null; + } + super.endOfEntryReached(inputStream, numberOfBytesPushedBack); + } + + @Override + public int pushBackInputStreamIfNecessary(PushbackInputStream pushbackInputStream) throws IOException { + // Deflate64CompressorInputStream should not overread + return 0; + } + + @Override + public void close() throws IOException { + if (inflater != null) { + buffer.close(); + inflater.close(); // this is redundant, but leaves no doubt for readability + } + super.close(); + } +} diff --git a/src/main/java/net/lingala/zip4j/io/inputstream/ZipInputStream.java b/src/main/java/net/lingala/zip4j/io/inputstream/ZipInputStream.java index 46acc8cf..dc1020e1 100755 --- a/src/main/java/net/lingala/zip4j/io/inputstream/ZipInputStream.java +++ b/src/main/java/net/lingala/zip4j/io/inputstream/ZipInputStream.java @@ -270,8 +270,15 @@ private DecompressedInputStream initializeDecompressorForThisEntry(CipherInputSt LocalFileHeader localFileHeader) throws ZipException { CompressionMethod compressionMethod = getCompressionMethod(localFileHeader); - if (compressionMethod == CompressionMethod.DEFLATE) { - return new InflaterInputStream(cipherInputStream, zip4jConfig.getBufferSize()); + if (compressionMethod != null) { + switch (compressionMethod) { + case DEFLATE: + return new InflaterInputStream(cipherInputStream, zip4jConfig.getBufferSize()); + case DEFLATE64: + return new Inflater64InputStream(cipherInputStream, zip4jConfig.getBufferSize()); + default: + // do nothing + } } return new StoreInputStream(cipherInputStream); diff --git a/src/main/java/net/lingala/zip4j/io/outputstream/ZipOutputStream.java b/src/main/java/net/lingala/zip4j/io/outputstream/ZipOutputStream.java index bf585b0f..040d67ba 100755 --- a/src/main/java/net/lingala/zip4j/io/outputstream/ZipOutputStream.java +++ b/src/main/java/net/lingala/zip4j/io/outputstream/ZipOutputStream.java @@ -216,9 +216,16 @@ private CipherOutputStream initializeCipherOutputStream(ZipEntryOutputStream } private CompressedOutputStream initializeCompressedOutputStream(CipherOutputStream cipherOutputStream, - ZipParameters zipParameters) { - if (zipParameters.getCompressionMethod() == CompressionMethod.DEFLATE) { - return new DeflaterOutputStream(cipherOutputStream, zipParameters.getCompressionLevel(), zip4jConfig.getBufferSize()); + ZipParameters zipParameters) throws ZipException { + if (zipParameters.getCompressionMethod() != null) { + switch (zipParameters.getCompressionMethod()) { + case DEFLATE: + return new DeflaterOutputStream(cipherOutputStream, zipParameters.getCompressionLevel(), zip4jConfig.getBufferSize()); + case DEFLATE64: + throw new ZipException("Deflate64 not supported for compression"); + default: + // do nothing + } } return new StoreOutputStream(cipherOutputStream); diff --git a/src/main/java/net/lingala/zip4j/model/enums/CompressionMethod.java b/src/main/java/net/lingala/zip4j/model/enums/CompressionMethod.java index 7216618a..5fb3c543 100644 --- a/src/main/java/net/lingala/zip4j/model/enums/CompressionMethod.java +++ b/src/main/java/net/lingala/zip4j/model/enums/CompressionMethod.java @@ -17,6 +17,11 @@ public enum CompressionMethod { * @see java.util.zip.Deflater */ DEFLATE(8), + /** + * The Deflate enhanced or deflate64 compression is used. + * @see org.apache.commons.compress.compressors.deflate64.Deflate64CompressorInputStream + */ + DEFLATE64(9), /** * For internal use in Zip4J */ diff --git a/src/main/java/net/lingala/zip4j/tasks/AbstractAddFileToZipTask.java b/src/main/java/net/lingala/zip4j/tasks/AbstractAddFileToZipTask.java index 03d5ffc7..ad189342 100644 --- a/src/main/java/net/lingala/zip4j/tasks/AbstractAddFileToZipTask.java +++ b/src/main/java/net/lingala/zip4j/tasks/AbstractAddFileToZipTask.java @@ -29,7 +29,7 @@ import static net.lingala.zip4j.headers.HeaderUtil.getFileHeader; import static net.lingala.zip4j.model.ZipParameters.SymbolicLinkAction.INCLUDE_LINK_AND_LINKED_FILE; import static net.lingala.zip4j.model.ZipParameters.SymbolicLinkAction.INCLUDE_LINK_ONLY; -import static net.lingala.zip4j.model.enums.CompressionMethod.DEFLATE; +import static net.lingala.zip4j.model.enums.CompressionMethod.AES_INTERNAL_ONLY; import static net.lingala.zip4j.model.enums.CompressionMethod.STORE; import static net.lingala.zip4j.model.enums.EncryptionMethod.NONE; import static net.lingala.zip4j.model.enums.EncryptionMethod.ZIP_STANDARD; @@ -175,7 +175,7 @@ void verifyZipParameters(ZipParameters parameters) throws ZipException { throw new ZipException("cannot validate zip parameters"); } - if (parameters.getCompressionMethod() != STORE && parameters.getCompressionMethod() != DEFLATE) { + if (parameters.getCompressionMethod() == null || parameters.getCompressionMethod() == AES_INTERNAL_ONLY) { throw new ZipException("unsupported compression type"); } diff --git a/src/main/java/net/lingala/zip4j/util/ZipVersionUtils.java b/src/main/java/net/lingala/zip4j/util/ZipVersionUtils.java index 4e24a680..b04e4670 100644 --- a/src/main/java/net/lingala/zip4j/util/ZipVersionUtils.java +++ b/src/main/java/net/lingala/zip4j/util/ZipVersionUtils.java @@ -22,7 +22,8 @@ public static int determineVersionMadeBy(ZipParameters zipParameters, RawIO rawI public static VersionNeededToExtract determineVersionNeededToExtract(ZipParameters zipParameters) { VersionNeededToExtract versionRequired = VersionNeededToExtract.DEFAULT; - if (zipParameters.getCompressionMethod() == CompressionMethod.DEFLATE) { + if (zipParameters.getCompressionMethod() == CompressionMethod.DEFLATE || + zipParameters.getCompressionMethod() == CompressionMethod.DEFLATE64) { versionRequired = VersionNeededToExtract.DEFLATE_COMPRESSED; } diff --git a/src/test/java/net/lingala/zip4j/ExtractZipFileIT.java b/src/test/java/net/lingala/zip4j/ExtractZipFileIT.java index d37faf8f..b65bcd5e 100644 --- a/src/test/java/net/lingala/zip4j/ExtractZipFileIT.java +++ b/src/test/java/net/lingala/zip4j/ExtractZipFileIT.java @@ -530,6 +530,14 @@ public void testExtractZipFileCRCError() throws IOException { new File(outputFolder, "images")); } + @Test + public void testExtractZipFileDeflate64() throws IOException { + ZipFile zipFile = new ZipFile(getTestArchiveFromResources("archive_deflate64_1_file.zip")); + zipFile.extractAll(outputFolder.getPath()); + assertThat(outputFolder.listFiles()).contains( + new File(outputFolder, "test-simple.pdf")); + } + @Test public void testExtractZipFileOf7ZipFormatSplitWithoutEncryption() throws IOException { List filesToAddToZip = new ArrayList<>(FILES_TO_ADD); diff --git a/src/test/resources/test-archives/archive_deflate64_1_file.zip b/src/test/resources/test-archives/archive_deflate64_1_file.zip new file mode 100644 index 0000000000000000000000000000000000000000..5d7945840f13b69ebf35c754a97209db0a726584 GIT binary patch literal 34622 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