commons-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Wurstbrot mit Senf (JIRA)" <j...@apache.org>
Subject [jira] [Comment Edited] (COMPRESS-219) ZipArchiveInputStream: ArrayIndexOutOfBoundsException when extracting a STORED zip file entry from within a zip.
Date Wed, 20 Feb 2013 15:43:14 GMT

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

Wurstbrot mit Senf edited comment on COMPRESS-219 at 2/20/13 3:43 PM:
----------------------------------------------------------------------

What you did in the test, works: you wrote the stream to a file, i.e. you actually copied
the internal zip to the file. What causes the problem is the actuall deflating of the zip
within the zip.

That is: creating a new ZipArchiveInputStream from the ZipArchiveInputStream like in the following
snippet (I rewrote your code for NIO.2, sorry for that :-() and attached it to the issue.
                
      was (Author: wurstbrot):
    What you did in the test, works: you wrote the stream to a file, i.e. you actually copied
the internal zip to the file. What causes the problem is the actuall deflating of the zip
within the zip.

That is: creating a new ZipArchiveInputStream from the ZipArchiveInputStream like in the following
snippet (I rewrote your code for NIO.2, sorry for that :-():
@Test
  public static void shouldReadNestedZip() throws Exception {
    final Path outDir = Files.createDirectories(Paths.get("dir"));
    try (ZipArchiveInputStream in = new ZipArchiveInputStream(Files.newInputStream(Paths.get("COMPRESS-219.zip")));)
{
      extractZipInputStream(outDir, in);
    } finally {
      FileUtils.deleteDirectory(outDir.toFile());
    }
  }

  private static void extractZipInputStream(final Path outDir, final ZipArchiveInputStream
in) throws IOException {
    ZipArchiveEntry zae = in.getNextZipEntry();
    while (zae != null) {
      if (zae.getName().endsWith(".zip")) {
        final Path outFile = outDir.resolve(Paths.get(zae.getName().replace("^/", "")));
        Files.createDirectories(outFile);
        final ZipArchiveInputStream zipInZip = new ZipArchiveInputStream(in);
        extractZipInputStream(outFile, zipInZip);
      }
      zae = in.getNextZipEntry();
    }
  }
                  
> ZipArchiveInputStream: ArrayIndexOutOfBoundsException when extracting a STORED zip file
entry from within a zip.
> ----------------------------------------------------------------------------------------------------------------
>
>                 Key: COMPRESS-219
>                 URL: https://issues.apache.org/jira/browse/COMPRESS-219
>             Project: Commons Compress
>          Issue Type: Bug
>          Components: Archivers
>    Affects Versions: 1.4.1
>         Environment: Windows (Linux as well)
>            Reporter: Wurstbrot mit Senf
>            Priority: Minor
>         Attachments: compress-219-test.patch, test-linux.zip
>
>
> When trying to read out a ZIP file, that has been stored (Method STORE, not DEFLATE!,
with DEFLATE it seems OK) in another ZIP file using the ZipArchiveInputStream, I do get an
ArrayIndexOutOfBoundsException when doing the arraycopy in ZipArchiveInputStream#readStored(byte[],
int, int) (line 362) because the "toRead" is not decreased by the buf.offsetInBuffer.
> I will add the zip in question as attachment.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

Mime
View raw message