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 <peteralfred...@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