Uploaded image for project: 'Commons Compress'
  1. Commons Compress
  2. COMPRESS-96

Corrupt zip files can cause infinite loop

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Resolved
    • Critical
    • Resolution: Duplicate
    • 1.0
    • 1.1
    • 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)

      { if (entry.isDirectory()) System.out.printf("%s/\n", entry.getName()); else System.out.printf("%s %d\n", entry.getName(), entry.getSize()); entry = zip.getNextEntry(); }

      System.out.print("DONE\n");
      }
      }

      Attachments

        Issue Links

          Activity

            People

              Unassigned Unassigned
              matthew_bellew Matthew Bellew
              Votes:
              0 Vote for this issue
              Watchers:
              0 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: