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 <[email protected]>
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);