[
https://issues.apache.org/jira/browse/COMPRESS-592?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Roland Kreuzer updated COMPRESS-592:
------------------------------------
Description:
I have a use-case where I have to decompress Sevenzip archives from an external
source which may have a large number of entries.
I found decompression fails when trying to extract entry 65536 (zero-based
index) with a checksum failure.
I was able to reproduce the issue with a simple 7Zip file containing 70.001
entries with random MD5 checksum textfiles (attached).
My code is a simple sequential read of all contents of the file like
{code:java}
@Test
void readBigSevenZipFile() throws IOException
{
int index = 0;
try (SevenZFile sevenZFile = new SevenZFile(new
File("E:\\Temp\\0000_DOC.7z")))
{
SevenZArchiveEntry entry = sevenZFile.getNextEntry();
while (entry != null)
{
if (entry.hasStream())
{
byte[] content = new byte[Math.toIntExact(entry.getSize())];
sevenZFile.read(content);
System.out.print(index);
System.out.print("\t");
System.out.println(entry.getName());
index++;
}
entry = sevenZFile.getNextEntry();
}
}
}
{code}
which fails consistently after index 65535 with
{code:java}
java.io.IOException: Checksum verification failed
at
org.apache.commons.compress.utils.ChecksumVerifyingInputStream.read(ChecksumVerifyingInputStream.java:94)
~[commons-compress-1.21.jar!/:1.21]
at
org.apache.commons.compress.archivers.sevenz.SevenZFile.read(SevenZFile.java:1905)
~[commons-compress-1.21.jar!/:1.21]
at
org.apache.commons.compress.archivers.sevenz.SevenZFile.read(SevenZFile.java:1888)
~[commons-compress-1.21.jar!/:1.21]
{code}
It is noticeable that the value is 2 to the 16th power, which could suggest an
overflow error of some sorts.
I did not find any workaround yet.
was:
I have a use-case where I have to decompress Sevenzip archives from an external
source which may have a large number of entries.
I found decompression fails when trying to extract entry 65536 (zero-based
index) with a checksum failure.
I was able to reproduce the issue with a simple 7Zip file containing 70.000
entries with random MD5 checksum textfiles (attached).
My code is a simple sequential read of all contents of the file like
{code:java}
@Test
void readBigSevenZipFile() throws IOException
{
int index = 0;
try (SevenZFile sevenZFile = new SevenZFile(new
File("E:\\Temp\\0000_DOC.7z")))
{
SevenZArchiveEntry entry = sevenZFile.getNextEntry();
while (entry != null)
{
if (entry.hasStream())
{
byte[] content = new byte[Math.toIntExact(entry.getSize())];
sevenZFile.read(content);
System.out.print(index);
System.out.print("\t");
System.out.println(entry.getName());
index++;
}
entry = sevenZFile.getNextEntry();
}
}
}
{code}
which fails consistently after index 65535 with
{code:java}
java.io.IOException: Checksum verification failed
at
org.apache.commons.compress.utils.ChecksumVerifyingInputStream.read(ChecksumVerifyingInputStream.java:94)
~[commons-compress-1.21.jar!/:1.21]
at
org.apache.commons.compress.archivers.sevenz.SevenZFile.read(SevenZFile.java:1905)
~[commons-compress-1.21.jar!/:1.21]
at
org.apache.commons.compress.archivers.sevenz.SevenZFile.read(SevenZFile.java:1888)
~[commons-compress-1.21.jar!/:1.21]
{code}
It is noticeable that this is 2 to the 16th power, which could suggest an
overflow error of some sorts.
I did not find any workaround yet.
> Checksum verification failed on SevenZip archive containing more than 65536
> entries
> -----------------------------------------------------------------------------------
>
> Key: COMPRESS-592
> URL: https://issues.apache.org/jira/browse/COMPRESS-592
> Project: Commons Compress
> Issue Type: Bug
> Components: Compressors
> Affects Versions: 1.21
> Environment: Compress 1.21 and XZ 1.9 on JDK 11
> Reporter: Roland Kreuzer
> Priority: Major
> Attachments: 0000_DOC.7z
>
>
> I have a use-case where I have to decompress Sevenzip archives from an
> external source which may have a large number of entries.
> I found decompression fails when trying to extract entry 65536 (zero-based
> index) with a checksum failure.
>
> I was able to reproduce the issue with a simple 7Zip file containing 70.001
> entries with random MD5 checksum textfiles (attached).
>
> My code is a simple sequential read of all contents of the file like
> {code:java}
> @Test
> void readBigSevenZipFile() throws IOException
> {
> int index = 0;
> try (SevenZFile sevenZFile = new SevenZFile(new
> File("E:\\Temp\\0000_DOC.7z")))
> {
> SevenZArchiveEntry entry = sevenZFile.getNextEntry();
> while (entry != null)
> {
> if (entry.hasStream())
> {
> byte[] content = new
> byte[Math.toIntExact(entry.getSize())];
> sevenZFile.read(content);
> System.out.print(index);
> System.out.print("\t");
> System.out.println(entry.getName());
> index++;
> }
> entry = sevenZFile.getNextEntry();
> }
> }
> }
> {code}
> which fails consistently after index 65535 with
> {code:java}
> java.io.IOException: Checksum verification failed
> at
> org.apache.commons.compress.utils.ChecksumVerifyingInputStream.read(ChecksumVerifyingInputStream.java:94)
> ~[commons-compress-1.21.jar!/:1.21]
> at
> org.apache.commons.compress.archivers.sevenz.SevenZFile.read(SevenZFile.java:1905)
> ~[commons-compress-1.21.jar!/:1.21]
> at
> org.apache.commons.compress.archivers.sevenz.SevenZFile.read(SevenZFile.java:1888)
> ~[commons-compress-1.21.jar!/:1.21]
> {code}
>
> It is noticeable that the value is 2 to the 16th power, which could suggest
> an overflow error of some sorts.
>
> I did not find any workaround yet.
--
This message was sent by Atlassian Jira
(v8.3.4#803005)