You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@commons.apache.org by "Stefan Bodewig (JIRA)" <ji...@apache.org> on 2009/10/26 06:17:00 UTC

[jira] Commented: (COMPRESS-87) ZipArchiveInputStream doesn't report the end of a truncated archive

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

Stefan Bodewig commented on COMPRESS-87:
----------------------------------------

I'll look into this - thanks for the testcase - but let me add that in general ZipFile should be preferred over ZipArchiveInputStream when reading  file since the later may return entries that aren't supposed to be there at all.  ZipFile should terminate with a reasonable exception for truncated ZIPs OOTB.

> ZipArchiveInputStream doesn't report the end of a truncated archive
> -------------------------------------------------------------------
>
>                 Key: COMPRESS-87
>                 URL: https://issues.apache.org/jira/browse/COMPRESS-87
>             Project: Commons Compress
>          Issue Type: Bug
>    Affects Versions: 1.0, 1.1
>            Reporter: Antoni Mylka
>            Assignee: Stefan Bodewig
>         Attachments: apache-maven-2.2.1.zip.001, commons-compress-87.patch
>
>
> If a Zip archive is truncated, (e.g. because it is the first volume in a multi-volume archive) the ZipArchiveInputStream.read() method will not detect that fact. All calls to read() will return 0 bytes read. They will not return -1 (end of stream), nor will they throw any exception (which would seem like a good idea to me because the archive is truncated).
> I have tracked this problem to ZipArchiveInputStream.java, line 239. It contains a check
> if (read == 0 && inf.finished()) {
>     return -1;
> }
> For truncated archives the read is always zero but the inf is never finished(). I suggest adding two lines below:
> if (read == 0 && inf.finished()) {
>     return -1;
> } else if (read == 0 && lengthOfLastRead == -1) {
> 	throw new IOException("Truncated ZIP file");
> }
> This solves the problem in my tests.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.