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

peterlee 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 65a5c75  COMPRESS-571 : SevenZFile.getEntries now return a copy of 
entries
65a5c75 is described below

commit 65a5c75c015e332adf99ef033311b2642b106c38
Author: PeterAlfredLee <peteralfred...@gmail.com>
AuthorDate: Wed Mar 17 16:00:39 2021 +0800

    COMPRESS-571 : SevenZFile.getEntries now return a copy of entries
---
 src/changes/changes.xml                                      |  3 +++
 .../apache/commons/compress/archivers/sevenz/SevenZFile.java |  6 +++---
 .../commons/compress/archivers/sevenz/SevenZFileTest.java    | 12 ++++++++++++
 3 files changed, 18 insertions(+), 3 deletions(-)

diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index 6337843..505cb61 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -329,6 +329,9 @@ The <action> type attribute can be add,update,fix,remove.
         xz/brotli/zstd/lzma have been available even in OSGi
         environments.
       </action>
+      <action issue="COMPRESS-571" type="fix" date="2021-03-17">
+        SevenZFile.getEntries now return a copy of entries.
+      </action>
     </release>
     <release version="1.20" date="2020-02-08"
              description="Release 1.20 (Java 7)">
diff --git 
a/src/main/java/org/apache/commons/compress/archivers/sevenz/SevenZFile.java 
b/src/main/java/org/apache/commons/compress/archivers/sevenz/SevenZFile.java
index ba6e719..80d2f8a 100644
--- a/src/main/java/org/apache/commons/compress/archivers/sevenz/SevenZFile.java
+++ b/src/main/java/org/apache/commons/compress/archivers/sevenz/SevenZFile.java
@@ -414,7 +414,7 @@ public class SevenZFile implements Closeable {
     }
 
     /**
-     * Returns meta-data of all archive entries.
+     * Returns a copy of meta-data of all archive entries.
      *
      * <p>This method only provides meta-data, the entries can not be
      * used to read the contents, you still need to process all
@@ -423,11 +423,11 @@ public class SevenZFile implements Closeable {
      * <p>The content methods are only available for entries that have
      * already been reached via {@link #getNextEntry}.</p>
      *
-     * @return meta-data of all archive entries.
+     * @return a copy of meta-data of all archive entries.
      * @since 1.11
      */
     public Iterable<SevenZArchiveEntry> getEntries() {
-        return Arrays.asList(archive.files);
+        return new ArrayList<>(Arrays.asList(archive.files));
     }
 
     private Archive readHeaders(final byte[] password) throws IOException {
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 9e17159..372a743 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
@@ -37,6 +37,7 @@ import java.nio.file.Path;
 import java.security.NoSuchAlgorithmException;
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.Collections;
 import java.util.HashMap;
 import java.util.Iterator;
 import java.util.List;
@@ -734,6 +735,17 @@ public class SevenZFileTest extends AbstractTestCase {
         }
     }
 
+    @Test
+    public void retrieveInputStreamForShuffledEntries() throws IOException {
+        try (final SevenZFile sevenZFile = new 
SevenZFile(getFile("COMPRESS-348.7z"))) {
+            List<SevenZArchiveEntry> entries = (List<SevenZArchiveEntry>) 
sevenZFile.getEntries();
+            Collections.shuffle(entries);
+            for (final SevenZArchiveEntry entry : entries) {
+                IOUtils.toByteArray(sevenZFile.getInputStream(entry));
+            }
+        }
+    }
+
     private void test7zUnarchive(final File f, final SevenZMethod m, final 
byte[] password) throws Exception {
         try (SevenZFile sevenZFile = new SevenZFile(f, password)) {
             test7zUnarchive(sevenZFile, m);

Reply via email to