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 4246b88  fix COMPRESS-592
4246b88 is described below

commit 4246b887ba88dc0b2bc09e92c63fff97381b4a12
Author: PeterAlfredLee <peteralfred...@gmail.com>
AuthorDate: Fri Oct 29 18:43:19 2021 +0800

    fix COMPRESS-592
    
    fix COMPRESS-592 by using LinkedHashMap
---
 src/changes/changes.xml                               |   5 +++++
 .../commons/compress/archivers/sevenz/SevenZFile.java |   3 ++-
 .../compress/archivers/sevenz/SevenZFileTest.java     |  17 ++++++++++++++++-
 src/test/resources/COMPRESS-592.7z                    | Bin 0 -> 1053510 bytes
 4 files changed, 23 insertions(+), 2 deletions(-)

diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index c19f169..805672d 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -489,6 +489,11 @@ you relied on the recovery attempt.">
         files containing LZMA streams with end marker.
         Github Pull Request #223.
       </action>
+      <action issue="COMPRESS-592" type="fix" date="2021-10-29"
+              dev="Peter Lee" due-to="Roland Kreuzer">
+        Use LinkedHashMap for fileMap in SevenZFile.readFilesInfo,
+        as it will be read in specific order.
+      </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 9700213..e24ed3f 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
@@ -38,6 +38,7 @@ import java.util.Arrays;
 import java.util.BitSet;
 import java.util.EnumSet;
 import java.util.HashMap;
+import java.util.LinkedHashMap;
 import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
@@ -1367,7 +1368,7 @@ public class SevenZFile implements Closeable {
 
     private void readFilesInfo(final ByteBuffer header, final Archive archive) 
throws IOException {
         final int numFilesInt = (int) readUint64(header);
-        final Map<Integer, SevenZArchiveEntry> fileMap = new HashMap<>();
+        final Map<Integer, SevenZArchiveEntry> fileMap = new LinkedHashMap<>();
         BitSet isEmptyStream = null;
         BitSet isEmptyFile = null;
         BitSet isAnti = null;
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 26aaf35..9e9b717 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
@@ -766,7 +766,22 @@ public class SevenZFileTest extends AbstractTestCase {
         }
     }
 
-    private void test7zUnarchive(final File f, final SevenZMethod m, final 
byte[] password) throws Exception {
+    @Test
+    public void readBigSevenZipFile() throws IOException {
+        try (SevenZFile sevenZFile = new 
SevenZFile(getFile("COMPRESS-592.7z"))) {
+            SevenZArchiveEntry entry = sevenZFile.getNextEntry();
+            while (entry != null) {
+                if (entry.hasStream()) {
+                    byte[] content = new byte[(int) entry.getSize()];
+                    sevenZFile.read(content);
+                }
+                entry = sevenZFile.getNextEntry();
+            }
+        }
+    }
+
+
+        private void test7zUnarchive(final File f, final SevenZMethod m, final 
byte[] password) throws Exception {
         try (SevenZFile sevenZFile = new SevenZFile(f, password)) {
             test7zUnarchive(sevenZFile, m);
         }
diff --git a/src/test/resources/COMPRESS-592.7z 
b/src/test/resources/COMPRESS-592.7z
new file mode 100644
index 0000000..23f1ccc
Binary files /dev/null and b/src/test/resources/COMPRESS-592.7z differ

Reply via email to