commons-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Antoni Mylka (JIRA)" <j...@apache.org>
Subject [jira] Commented: (COMPRESS-87) ZipArchiveInputStream doesn't report the end of a truncated archive
Date Wed, 28 Oct 2009 11:43:59 GMT

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

Antoni Mylka commented on COMPRESS-87:
--------------------------------------

I know, just that I need to crawl zips that aren't necessarily files (like zips attached to
emails, or zips inside other zips). For this we have to use the stream and our crawler fell
into an infinite loop waiting for the '-1' returned from read() method, and kept getting '0'
instead. This is bad IMHO.

> 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.


Mime
View raw message