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

BELUGA BEHR edited comment on COMPRESS-279 at 4/25/14 2:26 AM:
---------------------------------------------------------------

Surprisingly simple (unless I'm over-looking something) fix.  Patch included.

Not that calling IOUtils#skip on the stream will have the effect of skipping 
until EOL, then when it finishes by calling read, it will trigger this 
exception.

There are no unit tests in the suite that trigger this though.


was (Author: belugabehr):
Surprisingly simple (unless I'm over-looking something) fix.

Not that calling IOUtils#skip on the stream will have the effect of skipping 
until EOL, then when it finishes by calling read, it will trigger this 
exception.

> TarArchiveInputStream silently finished when unexpected EOF occured
> -------------------------------------------------------------------
>
>                 Key: COMPRESS-279
>                 URL: https://issues.apache.org/jira/browse/COMPRESS-279
>             Project: Commons Compress
>          Issue Type: Bug
>          Components: Archivers
>    Affects Versions: 1.7, 1.8
>         Environment: Common Compress 1.7 + openJDK 1.7
>            Reporter: PeterL in
>              Labels: regression, tar
>             Fix For: 1.9
>
>         Attachments: TarArchiveInputStream.java.patch, complete.tar, 
> trim.tar, trim.tar.bz2
>
>
> I just found the following test case didn't raise an IOException as it used 
> to be for a *tar trimmed on purpose* 
> @Test
>   public void testCorruptedBzip2() throws IOException {
>     String archivePath = PathUtil.join(testdataDir, "test.tar.bz2");
>     TarArchiveInputStream input = null;
>     input = new TarArchiveInputStream(new BZip2CompressorInputStream(
>         GoogleFile.SYSTEM.newInputStream(archivePath), true));
>     ArchiveEntry nextMatchedEntry = input.getNextEntry();
>     while (nextMatchedEntry != null) {
>       logger.infofmt("Extracting %s", nextMatchedEntry.getName());
>       String outputPath = PathUtil.join("/tmp/", nextMatchedEntry.getName());
>       OutputStream out = new FileOutputStream(outputPath);
>       ByteStreams.copy(input, out);
>       out.close();
>       nextMatchedEntry = input.getNextEntry();
>     }
>   }



--
This message was sent by Atlassian JIRA
(v6.2#6252)

Reply via email to