Details
-
Bug
-
Status: Resolved
-
Critical
-
Resolution: Duplicate
-
1.0
-
None
-
None
-
OS/X java 1.6
Description
I have a corrupt .zip file (in my Download directory) that causes ZipArchiveInputStream to enter an infinite loop on the second call to getEntry(). This was discovered while testing a Tika/Lucene based search application. Obviously, it would be preferable to detect and throw an exception. The short explanation is that closeEntry() calls skip(Long.MAX_VALUE). skip() calls read() which returns 0 and inf.finished() remains false, so no progress is made and skip() spins.
If it helps, entry.getSize() returns -1 for the first entry. I can provide the file to repro (775800 bytes).
UPDATE: I just hit he same error scanning a truncated commons-compress-1.0-bin.zip (437687 bytes) with this code.
package main;
import org.apache.commons.compress.archivers.ArchiveEntry;
import org.apache.commons.compress.archivers.zip.ZipArchiveInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
public class Main
{
public static void main(String[] args) throws IOException
{
File f = new File(args[0]);
FileInputStream fis = new FileInputStream(f);
ZipArchiveInputStream zip = new ZipArchiveInputStream(fis);
ArchiveEntry entry;
entry = zip.getNextEntry();
while (null != entry)
System.out.print("DONE\n");
}
}
Attachments
Issue Links
- duplicates
-
COMPRESS-87 ZipArchiveInputStream doesn't report the end of a truncated archive
- Resolved