[ https://issues.apache.org/jira/browse/COMPRESS-510?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Stefan Bodewig resolved COMPRESS-510. ------------------------------------- Resolution: Fixed > 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 > Assignee: Peter Lee > Priority: Major > Fix For: 1.21 > > Attachments: image-2020-04-22-16-55-08-369.png > > > 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)