[ https://issues.apache.org/jira/browse/COMPRESS-449?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Stefan Bodewig resolved COMPRESS-449. ------------------------------------- Resolution: Workaround > IOUtils.skip throws an IOException sometimes > -------------------------------------------- > > Key: COMPRESS-449 > URL: https://issues.apache.org/jira/browse/COMPRESS-449 > Project: Commons Compress > Issue Type: Bug > Affects Versions: 1.6 > Reporter: Dennis New > Priority: Major > Fix For: 1.17 > > > commons-compress > 1.5 introduced some weird IOUtils.skip bug (it introduced > that function in 1.6 in 2013 I think). It exists with all the versions of > commons-compress that I tested after 1.5, including 1.6, 1.10. java -version > says I'm using openjdk version "1.8.0_151" (IcedTea 3.6.0), and I'm using gnu > tar 1.30. > Basically, is.skip() and IOUtils.skip() are throwing an IOException somewhere > somehow. Replacing those functions with is.read(bytearraybufferbla) "fixes" > the bug for me. > I can reproduce the bug by creating a tar file even with a single file in it. > Oddly enough, this bug only appears if the file in the tar is greater than > 7680 bytes!?. For every possible file size less than or equal to that, it > works. For every file size greater than that, (I only tested up to 50,000 > bytes :p), it fails. For example: > dd if=/dev/zero of=testfile2 bs=1 count=7681 > tar cf moo.tar testfile2 > Then with the following java test code: > import java.io.IOException; > import org.apache.commons.compress.archivers.tar.TarArchiveEntry; > import org.apache.commons.compress.archivers.tar.TarArchiveInputStream; > import org.apache.commons.compress.archivers.ArchiveEntry; > public class HelloWorld { > public static void main(String[] args) { > try { > TarArchiveInputStream tis = new TarArchiveInputStream > (System.in); > ArchiveEntry entry; > while ( (entry=tis.getNextEntry()) != null) { > System.out.println(entry.getName()); > } > } catch (IOException e) { > for (StackTraceElement ste : e.getStackTrace()) { > System.out.println(ste); > } > } > } > } > Although this works (inputting using that "<" redirection), > java -Xbootclasspath/a:commons-compress.jar HelloWorld < moo.tar > This doesn't work (piping it out of a cat call), > cat moo.tar | java -Xbootclasspath/a:commons-compress.jar HelloWorld > testfile2 > java.io.FileInputStream.skip(Native Method) > java.io.BufferedInputStream.skip(BufferedInputStream.java:377) > org.apache.commons.compress.archivers.tar.TarArchiveInputStream.skip(TarArchiveInputStream.java:211) > org.apache.commons.compress.utils.IOUtils.skip(IOUtils.java:103) > org.apache.commons.compress.archivers.tar.TarArchiveInputStream.getNextTarEntry(TarArchiveInputStream.java:263) > org.apache.commons.compress.archivers.tar.TarArchiveInputStream.getNextEntry(TarArchiveInputStream.java:562) > HelloWorld.main(HelloWorld.java:11) -- This message was sent by Atlassian JIRA (v7.6.3#76005)