diff --git a/0001-Remove-Brotli-compressor.patch b/0001-Remove-Brotli-compressor.patch new file mode 100644 index 0000000..f733b34 --- /dev/null +++ b/0001-Remove-Brotli-compressor.patch @@ -0,0 +1,37 @@ +From bba585e9e4fdfc67de3b53b58b8d60923e1ccd0c Mon Sep 17 00:00:00 2001 +From: Michael Simacek +Date: Mon, 12 Feb 2018 10:53:48 +0100 +Subject: [PATCH 1/2] Remove Brotli compressor + +--- + .../commons/compress/compressors/CompressorStreamFactory.java | 7 +------ + 1 file changed, 1 insertion(+), 6 deletions(-) + +diff --git a/src/main/java/org/apache/commons/compress/compressors/CompressorStreamFactory.java b/src/main/java/org/apache/commons/compress/compressors/CompressorStreamFactory.java +index d730b9d..ab178a9 100644 +--- a/src/main/java/org/apache/commons/compress/compressors/CompressorStreamFactory.java ++++ b/src/main/java/org/apache/commons/compress/compressors/CompressorStreamFactory.java +@@ -31,8 +31,6 @@ import java.util.Set; + import java.util.SortedMap; + import java.util.TreeMap; + +-import org.apache.commons.compress.compressors.brotli.BrotliCompressorInputStream; +-import org.apache.commons.compress.compressors.brotli.BrotliUtils; + import org.apache.commons.compress.compressors.bzip2.BZip2CompressorInputStream; + import org.apache.commons.compress.compressors.bzip2.BZip2CompressorOutputStream; + import org.apache.commons.compress.compressors.deflate.DeflateCompressorInputStream; +@@ -586,10 +584,7 @@ public class CompressorStreamFactory implements CompressorStreamProvider { + } + + if (BROTLI.equalsIgnoreCase(name)) { +- if (!BrotliUtils.isBrotliCompressionAvailable()) { +- throw new CompressorException("Brotli compression is not available." + YOU_NEED_BROTLI_DEC); +- } +- return new BrotliCompressorInputStream(in); ++ throw new CompressorException("Brotli compression is not available in this build."); + } + + if (XZ.equalsIgnoreCase(name)) { +-- +2.14.3 + diff --git a/0002-Remove-ZSTD-compressor.patch b/0002-Remove-ZSTD-compressor.patch new file mode 100644 index 0000000..dbb7755 --- /dev/null +++ b/0002-Remove-ZSTD-compressor.patch @@ -0,0 +1,58 @@ +From bab91e014f73296a8ac9a3aef2aaa324a85e9b96 Mon Sep 17 00:00:00 2001 +From: Michael Simacek +Date: Mon, 12 Feb 2018 10:59:55 +0100 +Subject: [PATCH 2/2] Remove ZSTD compressor + +--- + .../compress/compressors/CompressorStreamFactory.java | 14 ++------------ + 1 file changed, 2 insertions(+), 12 deletions(-) + +diff --git a/src/main/java/org/apache/commons/compress/compressors/CompressorStreamFactory.java b/src/main/java/org/apache/commons/compress/compressors/CompressorStreamFactory.java +index ab178a9..3817704 100644 +--- a/src/main/java/org/apache/commons/compress/compressors/CompressorStreamFactory.java ++++ b/src/main/java/org/apache/commons/compress/compressors/CompressorStreamFactory.java +@@ -54,9 +54,6 @@ import org.apache.commons.compress.compressors.xz.XZCompressorInputStream; + import org.apache.commons.compress.compressors.xz.XZCompressorOutputStream; + import org.apache.commons.compress.compressors.xz.XZUtils; + import org.apache.commons.compress.compressors.z.ZCompressorInputStream; +-import org.apache.commons.compress.compressors.zstandard.ZstdCompressorInputStream; +-import org.apache.commons.compress.compressors.zstandard.ZstdCompressorOutputStream; +-import org.apache.commons.compress.compressors.zstandard.ZstdUtils; + import org.apache.commons.compress.utils.IOUtils; + import org.apache.commons.compress.utils.Lists; + import org.apache.commons.compress.utils.ServiceLoaderIterator; +@@ -516,10 +513,6 @@ public class CompressorStreamFactory implements CompressorStreamProvider { + return LZ4_FRAMED; + } + +- if (ZstdUtils.matches(signature, signatureLength)) { +- return ZSTANDARD; +- } +- + throw new CompressorException("No Compressor found for the stream signature."); + } + /** +@@ -595,10 +588,7 @@ public class CompressorStreamFactory implements CompressorStreamProvider { + } + + if (ZSTANDARD.equalsIgnoreCase(name)) { +- if (!ZstdUtils.isZstdCompressionAvailable()) { +- throw new CompressorException("Zstandard compression is not available." + YOU_NEED_ZSTD_JNI); +- } +- return new ZstdCompressorInputStream(in); ++ throw new CompressorException("Zstandard compression is not available in this build."); + } + + if (LZMA.equalsIgnoreCase(name)) { +@@ -714,7 +704,7 @@ public class CompressorStreamFactory implements CompressorStreamProvider { + } + + if (ZSTANDARD.equalsIgnoreCase(name)) { +- return new ZstdCompressorOutputStream(out); ++ throw new CompressorException("Zstandard compression is not available in this build."); + } + } catch (final IOException e) { + throw new CompressorException("Could not create CompressorOutputStream", e); +-- +2.14.3 + diff --git a/0003-COMPRESS-463-throw-exception-when-detecting-a-trunca.patch b/0003-COMPRESS-463-throw-exception-when-detecting-a-trunca.patch new file mode 100644 index 0000000..5dcd98f --- /dev/null +++ b/0003-COMPRESS-463-throw-exception-when-detecting-a-trunca.patch @@ -0,0 +1,127 @@ +From 2f169c27bf0252229c6a96ea18d9b6f9348c6b9e Mon Sep 17 00:00:00 2001 +From: Marian Koncek +Date: Fri, 5 Oct 2018 13:10:18 +0200 +Subject: [PATCH] COMPRESS-463 throw exception when detecting a truncated + stored entry + +--- + .../archivers/zip/ZipArchiveInputStream.java | 3 +- + .../zip/Maven221MultiVolumeTest.java | 7 ++ + .../zip/ZipArchiveInputStreamTest.java | 69 +++++++++++++++++++ + 3 files changed, 78 insertions(+), 1 deletion(-) + +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 729d92e..4c239ec 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 +@@ -523,7 +523,8 @@ public class ZipArchiveInputStream extends ArchiveInputStream implements InputSt + buf.position(0); + final int l = in.read(buf.array()); + if (l == -1) { +- return -1; ++ buf.limit(0); ++ throw new IOException("Truncated ZIP file"); + } + buf.limit(l); + +diff --git a/src/test/java/org/apache/commons/compress/archivers/zip/Maven221MultiVolumeTest.java b/src/test/java/org/apache/commons/compress/archivers/zip/Maven221MultiVolumeTest.java +index c28f3de..0a905e3 100644 +--- a/src/test/java/org/apache/commons/compress/archivers/zip/Maven221MultiVolumeTest.java ++++ b/src/test/java/org/apache/commons/compress/archivers/zip/Maven221MultiVolumeTest.java +@@ -96,6 +96,13 @@ public class Maven221MultiVolumeTest { + assertEquals("Truncated ZIP file", e.getMessage()); + } + ++ try { ++ zi.read(buffer); ++ fail("shouldn't be able to read from truncated entry after exception"); ++ } catch (final IOException e) { ++ assertEquals("Truncated ZIP file", e.getMessage()); ++ } ++ + // and now we get another entry, which should also yield + // an exception + try { +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 5d1cdb1..5bf003b 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 +@@ -340,6 +340,75 @@ public class ZipArchiveInputStreamTest { + } + } + ++ @Test ++ public void singleByteReadThrowsAtEofForCorruptedStoredEntry() throws Exception { ++ byte[] content; ++ try (FileInputStream fs = new FileInputStream(getFile("COMPRESS-264.zip"))) { ++ content = IOUtils.toByteArray(fs); ++ } ++ // make size much bigger than entry's real size ++ for (int i = 17; i < 26; i++) { ++ content[i] = (byte) 0xff; ++ } ++ try (ByteArrayInputStream in = new ByteArrayInputStream(content); ++ ZipArchiveInputStream archive = new ZipArchiveInputStream(in)) { ++ ArchiveEntry e = archive.getNextEntry(); ++ try { ++ IOUtils.toByteArray(archive); ++ fail("expected exception"); ++ } catch (IOException ex) { ++ assertEquals("Truncated ZIP file", ex.getMessage()); ++ } ++ try { ++ archive.read(); ++ fail("expected exception"); ++ } catch (IOException ex) { ++ assertEquals("Truncated ZIP file", ex.getMessage()); ++ } ++ try { ++ archive.read(); ++ fail("expected exception"); ++ } catch (IOException ex) { ++ assertEquals("Truncated ZIP file", ex.getMessage()); ++ } ++ } ++ } ++ ++ @Test ++ public void multiByteReadThrowsAtEofForCorruptedStoredEntry() throws Exception { ++ byte[] content; ++ try (FileInputStream fs = new FileInputStream(getFile("COMPRESS-264.zip"))) { ++ content = IOUtils.toByteArray(fs); ++ } ++ // make size much bigger than entry's real size ++ for (int i = 17; i < 26; i++) { ++ content[i] = (byte) 0xff; ++ } ++ byte[] buf = new byte[2]; ++ try (ByteArrayInputStream in = new ByteArrayInputStream(content); ++ ZipArchiveInputStream archive = new ZipArchiveInputStream(in)) { ++ ArchiveEntry e = archive.getNextEntry(); ++ try { ++ IOUtils.toByteArray(archive); ++ fail("expected exception"); ++ } catch (IOException ex) { ++ assertEquals("Truncated ZIP file", ex.getMessage()); ++ } ++ try { ++ archive.read(buf); ++ fail("expected exception"); ++ } catch (IOException ex) { ++ assertEquals("Truncated ZIP file", ex.getMessage()); ++ } ++ try { ++ archive.read(buf); ++ fail("expected exception"); ++ } catch (IOException ex) { ++ assertEquals("Truncated ZIP file", ex.getMessage()); ++ } ++ } ++ } ++ + private static byte[] readEntry(ZipArchiveInputStream zip, ZipArchiveEntry zae) throws IOException { + final int len = (int)zae.getSize(); + final byte[] buff = new byte[len]; +-- +2.17.1 + diff --git a/apache-commons-compress.spec b/apache-commons-compress.spec new file mode 100644 index 0000000..33c10a4 --- /dev/null +++ b/apache-commons-compress.spec @@ -0,0 +1,59 @@ +Name: apache-commons-compress +Version: 1.17 +Release: 4 +Summary: Java API for working with archivers and compressed files +License: ASL 2.0 +URL: http://commons.apache.org/proper/commons-compress/ +BuildArch: noarch +Source0: http://archive.apache.org/dist/commons/compress/source/commons-compress-%{version}-src.tar.gz +Patch0001: 0001-Remove-Brotli-compressor.patch +Patch0002: 0002-Remove-ZSTD-compressor.patch +Patch0003: 0003-COMPRESS-463-throw-exception-when-detecting-a-trunca.patch +BuildRequires: maven-local mvn(junit:junit) mvn(org.apache.commons:commons-parent:pom:) +BuildRequires: mvn(org.apache.felix:maven-bundle-plugin) mvn(org.powermock:powermock-api-mockito) +BuildRequires: mvn(org.apache.maven.plugins:maven-antrun-plugin) mvn(org.osgi:org.osgi.core) +BuildRequires: mvn(org.powermock:powermock-module-junit4) mvn(org.tukaani:xz) + +%description +The Apache Commons Compress library defines an API for working with +ar, cpio, Unix dump, tar, zip, gzip, XZ, Pack200 and bzip2 files. + +%package help +Summary: API documentation for apache-commons-compress + +Provides: %{name}-javadoc = %{version}-%{release} +Obsoletes: %{name}-javadoc < %{version}-%{release} + +%description help +This package provides API documentation for apache-commons-compress. + +%prep +%autosetup -n commons-compress-%{version}-src -p1 +%pom_remove_dep org.brotli:dec +rm -r src/{main,test}/java/org/apache/commons/compress/compressors/brotli +%pom_remove_dep :zstd-jni +rm -r src/{main,test}/java/org/apache/commons/compress/compressors/zstandard +rm src/test/java/org/apache/commons/compress/compressors/DetectCompressorTestCase.java +%pom_remove_dep org.ops4j.pax.exam:::test +%pom_remove_dep :org.apache.felix.framework::test +%pom_remove_dep :javax.inject::test +%pom_remove_dep :slf4j-api::test +rm src/test/java/org/apache/commons/compress/OsgiITest.java + +%build +%mvn_file : commons-compress apache-commons-compress +%mvn_alias : commons: +%mvn_build + +%install +%mvn_install + +%files -f .mfiles +%doc LICENSE.txt NOTICE.txt + +%files help -f .mfiles-javadoc +%doc NOTICE.txt + +%changelog +* Wed Dec 4 2019 Tianfei - 1.17-4 +- Package init diff --git a/commons-compress-1.17-src.tar.gz b/commons-compress-1.17-src.tar.gz new file mode 100644 index 0000000..4556957 Binary files /dev/null and b/commons-compress-1.17-src.tar.gz differ