You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by gg...@apache.org on 2023/01/23 11:51:04 UTC

[commons-compress] branch master updated: [COMPRESS-639] The Javadoc for ZipArchiveOutputStream documents the class as @NotThreadSafe.

This is an automated email from the ASF dual-hosted git repository.

ggregory pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/commons-compress.git


The following commit(s) were added to refs/heads/master by this push:
     new 4c54e104 [COMPRESS-639] The Javadoc for ZipArchiveOutputStream documents the class as @NotThreadSafe.
4c54e104 is described below

commit 4c54e104da14dbec7c64115bb64d77e2a62ce3c3
Author: Gary Gregory <ga...@gmail.com>
AuthorDate: Mon Jan 23 06:50:59 2023 -0500

    [COMPRESS-639] The Javadoc for ZipArchiveOutputStream documents the
    class as @NotThreadSafe.
    
    Add and disable
    org.apache.commons.compress.archivers.zip.ParallelScatterZipCreatorTest.sameZipArchiveEntryNotThreadSafe()
---
 .../zip/ParallelScatterZipCreatorTest.java         | 32 ++++++++++++++++++++++
 1 file changed, 32 insertions(+)

diff --git a/src/test/java/org/apache/commons/compress/archivers/zip/ParallelScatterZipCreatorTest.java b/src/test/java/org/apache/commons/compress/archivers/zip/ParallelScatterZipCreatorTest.java
index 172f2864..89e46676 100644
--- a/src/test/java/org/apache/commons/compress/archivers/zip/ParallelScatterZipCreatorTest.java
+++ b/src/test/java/org/apache/commons/compress/archivers/zip/ParallelScatterZipCreatorTest.java
@@ -26,16 +26,20 @@ import static org.junit.jupiter.api.Assertions.assertThrows;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
 import java.io.File;
 import java.io.IOException;
 import java.io.InputStream;
+import java.nio.charset.StandardCharsets;
 import java.nio.file.Files;
 import java.nio.file.Path;
 import java.nio.file.Paths;
 import java.util.Enumeration;
 import java.util.HashMap;
+import java.util.LinkedList;
 import java.util.Map;
 import java.util.concurrent.Callable;
+import java.util.concurrent.ExecutionException;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
 import java.util.function.Consumer;
@@ -48,6 +52,7 @@ import org.apache.commons.compress.parallel.InputStreamSupplier;
 import org.apache.commons.compress.parallel.ScatterGatherBackingStoreSupplier;
 import org.apache.commons.compress.utils.IOUtils;
 import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.Disabled;
 import org.junit.jupiter.api.Test;
 
 public class ParallelScatterZipCreatorTest {
@@ -104,6 +109,7 @@ public class ParallelScatterZipCreatorTest {
         callableApi(zipCreator -> zipCreator::submitStreamAwareCallable);
     }
 
+
     @Test
     public void callableApiWithHighestLevelUsingSubmitStreamAwareCallable() throws Exception {
         result = File.createTempFile("parallelScatterGather5", "");
@@ -218,6 +224,32 @@ public class ParallelScatterZipCreatorTest {
         }
     }
 
+    @Test
+    @Disabled("[COMPRESS-639] The Javadoc for ZipArchiveOutputStream documents the class as @NotThreadSafe.")
+    public void sameZipArchiveEntryNotThreadSafe() throws IOException, ExecutionException, InterruptedException {
+        final ByteArrayOutputStream testOutputStream = new ByteArrayOutputStream();
+
+        final String fileContent = "A";
+        final int NUM_OF_FILES = 100;
+        final LinkedList<InputStream> inputStreams = new LinkedList<>();
+        for (int i = 0; i < NUM_OF_FILES; i++) {
+            inputStreams.add(new ByteArrayInputStream(fileContent.getBytes(StandardCharsets.UTF_8)));
+        }
+
+        final ParallelScatterZipCreator zipCreator = new ParallelScatterZipCreator();
+        try (ZipArchiveOutputStream zipArchiveOutputStream = new ZipArchiveOutputStream(testOutputStream)) {
+            zipArchiveOutputStream.setUseZip64(Zip64Mode.Always);
+
+            for (final InputStream inputStream : inputStreams) {
+                final ZipArchiveEntry zipArchiveEntry = new ZipArchiveEntry("./dir/myfile.txt");
+                zipArchiveEntry.setMethod(ZipEntry.DEFLATED);
+                zipCreator.addArchiveEntry(zipArchiveEntry, () -> inputStream);
+            }
+
+            zipCreator.writeTo(zipArchiveOutputStream);
+        } // it will throw NullPointerException here
+    }
+
     @Test
     public void throwsExceptionWithCompressionLevelTooBig() {
         final int compressLevelTooBig = Deflater.BEST_COMPRESSION + 1;