Robin Schimpf created COMPRESS-510:
--------------------------------------
Summary: Multiple retrievals of InputStream for same SevenZFile
entry fails
Key: COMPRESS-510
URL: https://issues.apache.org/jira/browse/COMPRESS-510
Project: Commons Compress
Issue Type: Bug
Affects Versions: 1.20
Reporter: Robin Schimpf
I was trying out the new random access for the 7z files and have one of our
tests failing where we are trying to read the same entry multiple times without
closing the archive.
Reproducing test case (I added this locally to the SevenZFileTest class)
{code:java}
@Test
public void retrieveInputStreamForEntryMultipleTimes() throws IOException {
try (SevenZFile sevenZFile = new SevenZFile(getFile("bla.7z"))) {
for (SevenZArchiveEntry entry : sevenZFile.getEntries()) {
byte[] firstRead =
IOUtils.toByteArray(sevenZFile.getInputStream(entry));
byte[] secondRead =
IOUtils.toByteArray(sevenZFile.getInputStream(entry));
assertArrayEquals(firstRead, secondRead);
}
}
}
{code}
The Exception thrown is
{code:java}
java.lang.ArrayIndexOutOfBoundsException: Index -1 out of bounds for length 2
at
org.apache.commons.compress.archivers.sevenz.SevenZFile.buildDecodingStream(SevenZFile.java:1183)
at
org.apache.commons.compress.archivers.sevenz.SevenZFile.getInputStream(SevenZFile.java:1436)
at
org.apache.commons.compress.archivers.sevenz.SevenZFileTest.retrieveInputStreamForEntryMultipleTimes(SevenZFileTest.java:688)
...
{code}
A similar test case for e.g. zip works fine
{code:java}
@Test
public void retrieveInputStreamForEntryMultipleTimes() throws IOException {
try (ZipFile zipFile = new ZipFile(getFile("bla.zip"))) {
Enumeration<ZipArchiveEntry> entry = zipFile.getEntries();
while (entry.hasMoreElements()) {
ZipArchiveEntry e = entry.nextElement();
byte[] firstRead = IOUtils.toByteArray(zipFile.getInputStream(e));
byte[] secondRead = IOUtils.toByteArray(zipFile.getInputStream(e));
assertArrayEquals(firstRead, secondRead);
}
}
}
{code}
--
This message was sent by Atlassian Jira
(v8.3.4#803005)