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.

Reply via email to