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);