[ https://issues.apache.org/jira/browse/COMPRESS-505?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Steven Fontaine updated COMPRESS-505: ------------------------------------- Description: I've run into a bug which occurs when attempting to read the same SevenZArchiveEntry stream multiple times. The following code illustrates the problem. {code:java} File archive = new File("CC0 Images.7z"); char[] password = "password".toCharArray(); try (SevenZFile f = new SevenZFile(archive, password)) { SevenZArchiveEntry entry = StreamSupport.stream(f.getEntries().spliterator(), false) .filter(e -> !"alberta-amazing-attraction-banff-417074.jpg".equals(e.getName())) .findFirst().orElseGet(null); assert entry != null; for (int i = 0; i < 100; i++) { InputStream is = f.getInputStream(entry); BufferedImage img = ImageIO.read(is); assert img != null; System.out.println("Succeeded " + (i + 1) + " times"); } }{code} Below is the output I receive on version 1.20 {code:java} Succeeded 1 times Succeeded 2 times Exception in thread "main" java.io.IOException: Checksum verification failed at org.apache.commons.compress.utils.ChecksumVerifyingInputStream.read(ChecksumVerifyingInputStream.java:61) at org.apache.commons.compress.utils.ChecksumVerifyingInputStream.skip(ChecksumVerifyingInputStream.java:102) at org.apache.commons.compress.utils.IOUtils.skip(IOUtils.java:113) at org.apache.commons.compress.archivers.sevenz.SevenZFile.getCurrentStream(SevenZFile.java:1318) at org.apache.commons.compress.archivers.sevenz.SevenZFile.getInputStream(SevenZFile.java:1354) at org.abitoff.dmav.Test.main(Test.java:11) {code} was: {code:java} File archive = new File("CC0 Images.7z"); char[] password = "password".toCharArray(); try (SevenZFile f = new SevenZFile(archive, password)) { SevenZArchiveEntry entry = StreamSupport.stream(f.getEntries().spliterator(), false) .filter(e -> !"alberta-amazing-attraction-banff-417074.jpg".equals(e.getName())) .findFirst().orElseGet(null); assert entry != null; for (int i = 0; i < 100; i++) { InputStream is = f.getInputStream(entry); BufferedImage img = ImageIO.read(is); assert img != null; System.out.println("Succeeded " + (i + 1) + " times"); } }{code} > Multiple Reads of One SevenZArchiveEntry Fails > ---------------------------------------------- > > Key: COMPRESS-505 > URL: https://issues.apache.org/jira/browse/COMPRESS-505 > Project: Commons Compress > Issue Type: Bug > Affects Versions: 1.20 > Reporter: Steven Fontaine > Priority: Minor > > I've run into a bug which occurs when attempting to read the same > SevenZArchiveEntry stream multiple times. The following code illustrates the > problem. > {code:java} > File archive = new File("CC0 Images.7z"); > char[] password = "password".toCharArray(); > try (SevenZFile f = new SevenZFile(archive, password)) > { > SevenZArchiveEntry entry = > StreamSupport.stream(f.getEntries().spliterator(), false) > .filter(e -> > !"alberta-amazing-attraction-banff-417074.jpg".equals(e.getName())) > .findFirst().orElseGet(null); > assert entry != null; > for (int i = 0; i < 100; i++) > { > InputStream is = f.getInputStream(entry); > BufferedImage img = ImageIO.read(is); > assert img != null; > System.out.println("Succeeded " + (i + 1) + " times"); > } > }{code} > Below is the output I receive on version 1.20 > {code:java} > Succeeded 1 times > Succeeded 2 times > Exception in thread "main" java.io.IOException: Checksum verification failed > at > org.apache.commons.compress.utils.ChecksumVerifyingInputStream.read(ChecksumVerifyingInputStream.java:61) > at > org.apache.commons.compress.utils.ChecksumVerifyingInputStream.skip(ChecksumVerifyingInputStream.java:102) > at org.apache.commons.compress.utils.IOUtils.skip(IOUtils.java:113) > at > org.apache.commons.compress.archivers.sevenz.SevenZFile.getCurrentStream(SevenZFile.java:1318) > at > org.apache.commons.compress.archivers.sevenz.SevenZFile.getInputStream(SevenZFile.java:1354) > at org.abitoff.dmav.Test.main(Test.java:11) > {code} > > -- This message was sent by Atlassian Jira (v8.3.4#803005)