You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by pe...@apache.org on 2021/09/29 06:58:23 UTC

[commons-compress] branch master updated: COMPRESS-591: Fix decoding of 7z files containing LZMA streams with end

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 31d1738  COMPRESS-591: Fix decoding of 7z files containing LZMA streams with end
     new 76ed54d  Merge pull request #223 from PeterAlfredLee/COMPRESS-591
31d1738 is described below

commit 31d1738ccc57f86d8fd56ff5271cda82a65f01ee
Author: PeterAlfredLee <pe...@gmail.com>
AuthorDate: Wed Sep 22 16:11:40 2021 +0800

    COMPRESS-591: Fix decoding of 7z files containing LZMA streams with end
---
 .../commons/compress/archivers/sevenz/LZMADecoder.java    |   4 +++-
 .../commons/compress/archivers/sevenz/SevenZFileTest.java |  10 ++++++++++
 src/test/resources/lzma-with-eos.7z                       | Bin 0 -> 174 bytes
 3 files changed, 13 insertions(+), 1 deletion(-)

diff --git a/src/main/java/org/apache/commons/compress/archivers/sevenz/LZMADecoder.java b/src/main/java/org/apache/commons/compress/archivers/sevenz/LZMADecoder.java
index c1e8eda..68a2836 100644
--- a/src/main/java/org/apache/commons/compress/archivers/sevenz/LZMADecoder.java
+++ b/src/main/java/org/apache/commons/compress/archivers/sevenz/LZMADecoder.java
@@ -51,7 +51,9 @@ class LZMADecoder extends CoderBase {
         if (memoryUsageInKb > maxMemoryLimitInKb) {
             throw new MemoryLimitException(memoryUsageInKb, maxMemoryLimitInKb);
         }
-        return new LZMAInputStream(in, uncompressedLength, propsByte, dictSize);
+        final LZMAInputStream lzmaIn = new LZMAInputStream(in, uncompressedLength, propsByte, dictSize);
+        lzmaIn.enableRelaxedEndCondition();
+        return lzmaIn;
     }
 
     @SuppressWarnings("resource")
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 c08adaf..26aaf35 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
@@ -756,6 +756,16 @@ public class SevenZFileTest extends AbstractTestCase {
         }
     }
 
+    @Test
+    public void testSevenZWithEOS() throws IOException {
+        try(final SevenZFile sevenZFile = new SevenZFile(getFile("lzma-with-eos.7z"))) {
+            final List<SevenZArchiveEntry> entries = (List<SevenZArchiveEntry>) sevenZFile.getEntries();
+            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);
diff --git a/src/test/resources/lzma-with-eos.7z b/src/test/resources/lzma-with-eos.7z
new file mode 100644
index 0000000..d856e13
Binary files /dev/null and b/src/test/resources/lzma-with-eos.7z differ