[ 
https://issues.apache.org/jira/browse/COMPRESS-608?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17489475#comment-17489475
 ] 

Peter Lee commented on COMPRESS-608:
------------------------------------

I checked the attached pax-bad-hdr-file.tar, and it's related to 
COMPRESS-575(commit 61615b31).

This commit was to harden the operations for some edge cases that we didn't do 
it well enough before. I think the current version of handling is a better one.

 

I'm not sure if this is a breaking change or not(1.20 could get the available 
entries but 1.21 could not). Considering your attached tarballs are corrupted 
tars, IMO this change is not a breaking change.

> Corrupt Tar decompression fails to find all available entries
> -------------------------------------------------------------
>
>                 Key: COMPRESS-608
>                 URL: https://issues.apache.org/jira/browse/COMPRESS-608
>             Project: Commons Compress
>          Issue Type: Bug
>    Affects Versions: 1.21
>            Reporter: Madhu Gopanna
>            Priority: Major
>         Attachments: pax-bad-hdr-file.tar, sparse-formats.tar, 
> writer-big-long.tar
>
>
> Attached are three Tars that fail to find all available entries (contents) 
> and exit with an IO Exception. This change in behavior maybe related to 
> specific change log in 1.21 when compared to 1.20 behavior for the same Tars.
>  # Tar:  
> /gcc-8-8.3.0/gcc-8.3.0.tar.xz!/gcc-8.3.0/libgo/go/archive/tar/testdata/pax-bad-hdr-file.tar
>  ## Missing:
>  ### PAX1
>  ### PAX1/PAX1
>  ### /PAX1/PAX1/long-path-name
>  ## Not missing: N/A
>  ## Exception: 
> {code:java}
> java.io.IOException: Failed to read Paxheader.Value should end with a newline
>     at 
> org.apache.commons.compress.archivers.tar.TarUtils.parsePaxHeaders(TarUtils.java:769)
>     at 
> org.apache.commons.compress.archivers.tar.TarArchiveInputStream.paxHeaders(TarArchiveInputStream.java:605)
>     at 
> org.apache.commons.compress.archivers.tar.TarArchiveInputStream.getNextTarEntry(TarArchiveInputStream.java:421)
>     at com.synopsys.sigcompcore.Application.main(Application.java:34) {code}
>  # Tar: 
> /gcc-8-8.3.0/gcc-8.3.0.tar.xz!/gcc-8.3.0/libgo/go/archive/tar/testdata/sparse-formats.tar
>  ## Missing:
>  ### end
>  ### sparse-posix-0.0
>  ### sparse-posix-0.1
>  ### sparse-posix-1.0
>  ## Not missing:
>  ### sparse-gnu
>  ## Exception: 
> {code:java}
> java.io.IOException: Truncated TAR archive
>     at 
> org.apache.commons.compress.archivers.tar.TarArchiveInputStream.read(TarArchiveInputStream.java:743)
>     at org.apache.commons.compress.utils.IOUtils.readFully(IOUtils.java:197)
>     at org.apache.commons.compress.utils.IOUtils.skip(IOUtils.java:129)
>     at 
> org.apache.commons.compress.archivers.tar.TarArchiveInputStream.getNextTarEntry(TarArchiveInputStream.java:364)
>     at com.synopsys.sigcompcore.Application.main(Application.java:35){code}
>  # Tar: 
> /gcc-6-6.1.1/gcc-6.1.0-dfsg.tar!/gcc-6.1.0/libgo/go/archive/tar/testdata/writer-big-long.tar
>  ## Missing: 16gig.txt
>  ## Not missing: N/A
>  ## Exception: 
> {code:java}
> java.io.IOException: Corrupted TAR archive, sparse entry is invalid
>     at 
> org.apache.commons.compress.archivers.tar.TarUtils.readSparseStructs(TarUtils.java:350)
>     at 
> org.apache.commons.compress.archivers.tar.TarArchiveEntry.parseTarHeaderUnwrapped(TarArchiveEntry.java:1656)
>     at 
> org.apache.commons.compress.archivers.tar.TarArchiveEntry.parseTarHeader(TarArchiveEntry.java:1595)
>     at 
> org.apache.commons.compress.archivers.tar.TarArchiveEntry.<init>(TarArchiveEntry.java:556)
>     at 
> org.apache.commons.compress.archivers.tar.TarArchiveInputStream.getNextTarEntry(TarArchiveInputStream.java:379)
>     at com.synopsys.sigcompcore.Application.main(Application.java:37)
> Caused by: java.lang.IllegalArgumentException: Invalid byte 97 at offset 0 in 
> 'ame/longname' len=12
>     at 
> org.apache.commons.compress.archivers.tar.TarUtils.parseOctal(TarUtils.java:153)
>     at 
> org.apache.commons.compress.archivers.tar.TarUtils.parseOctalOrBinary(TarUtils.java:183)
>     at 
> org.apache.commons.compress.archivers.tar.TarUtils.parseSparse(TarUtils.java:324)
>     at 
> org.apache.commons.compress.archivers.tar.TarUtils.readSparseStructs(TarUtils.java:339)
>     ... 5 more{code}
> Expected behavior: Log the IO Exception and exit(1.21 behavior) from 
> corrupted or truncated Tar after decompressing all available Tar entries 
> (1.20 behavior).



--
This message was sent by Atlassian Jira
(v8.20.1#820001)

Reply via email to