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] Created: (COMPRESS-87) ZipArchiveInputStream doesn't report the end of a truncated archive
Date Sat, 24 Oct 2009 21:29:59 GMT
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


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