commons-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Daniel Lowe (JIRA)" <j...@apache.org>
Subject [jira] [Updated] (COMPRESS-189) ZipArchiveInputStream may read 0 bytes when reading from a nested Zip file
Date Tue, 26 Jun 2012 21:32:43 GMT

     [ https://issues.apache.org/jira/browse/COMPRESS-189?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]

Daniel Lowe updated COMPRESS-189:
---------------------------------

    Description: 
When the following code is run an error "Underlying input stream returned zero bytes" is produced.
If the commented line is uncommented it can be seen that the ZipArchiveInputStream returned
0 bytes. This only happens the first time read is called, subsequent calls work as expected
i.e. the following code actually works correctly with that line uncommented!

The zip file used to produce this behavious is available at http://wwmm.ch.cam.ac.uk/~dl387/test.ZIP

If this is not the correct way of processing a zip file of zip files please let me know. Also
I believe whilst ZipFile can iterate over entries fast due to being able to look at the master
table whilst ZipArchiveInputStream cannot. Is there anyway of instantiating a ZipFile from
a zip file inside another zip file without first extracting the nested zip file?

    ZipFile zipFile = new ZipFile("C:/test.ZIP");
    for (Enumeration<ZipArchiveEntry> iterator = zipFile.getEntries(); iterator.hasMoreElements();
) {
      ZipArchiveEntry entry = iterator.nextElement();
      InputStream is = new BufferedInputStream(zipFile.getInputStream(entry));
      ZipArchiveInputStream zipInput = new ZipArchiveInputStream(is);
      ZipArchiveEntry innerEntry;
      while ((innerEntry = zipInput.getNextZipEntry()) != null){
        if (innerEntry.getName().endsWith("XML")){
          //zipInput.read();
          System.out.println(IOUtils.toString(zipInput));
        }
      }
    }

  was:
When the following code is run an error "Underlying input stream returned zero bytes" is produced.
If the commented line is uncommented it can be seen that the ZipArchiveInputStream returned
0 bytes. This only happens to the first time read is called, subsequent calls work as expected
i.e. the following code actually works correctly with that line uncommented!

The zip file used to produce this behavious is available at http://wwmm.ch.cam.ac.uk/~dl387/test.ZIP

If this is not the correct way of processing a zip file of zip files please let me know. Also
I believe whilst ZipFile can iterate over entries fast due to being able to look at the master
table whilst ZipArchiveInputStream cannot. Is there anyway of instantiating a ZipFile from
a zip file inside another zip file without first extracting the nested zip file?

    ZipFile zipFile = new ZipFile("C:/test.ZIP");
    for (Enumeration<ZipArchiveEntry> iterator = zipFile.getEntries(); iterator.hasMoreElements();)
{
      ZipArchiveEntry entry = iterator.nextElement();
      InputStream is = new BufferedInputStream(zipFile.getInputStream(entry));
      ZipArchiveInputStream zipInput = new ZipArchiveInputStream(is);
      ZipArchiveEntry innerEntry;
      while ((innerEntry = zipInput.getNextZipEntry()) != null){
        if (innerEntry.getName().endsWith("XML")){
          //zipInput.read();
          System.out.println(IOUtils.toString(zipInput));
        }
      }
    }

    
> ZipArchiveInputStream may read 0 bytes when reading from a nested Zip file
> --------------------------------------------------------------------------
>
>                 Key: COMPRESS-189
>                 URL: https://issues.apache.org/jira/browse/COMPRESS-189
>             Project: Commons Compress
>          Issue Type: Bug
>          Components: Archivers
>    Affects Versions: 1.4.1
>         Environment: JDK 1.6 64-bit, Windows 7
>            Reporter: Daniel Lowe
>
> When the following code is run an error "Underlying input stream returned zero bytes"
is produced. If the commented line is uncommented it can be seen that the ZipArchiveInputStream
returned 0 bytes. This only happens the first time read is called, subsequent calls work as
expected i.e. the following code actually works correctly with that line uncommented!
> The zip file used to produce this behavious is available at http://wwmm.ch.cam.ac.uk/~dl387/test.ZIP
> If this is not the correct way of processing a zip file of zip files please let me know.
Also I believe whilst ZipFile can iterate over entries fast due to being able to look at the
master table whilst ZipArchiveInputStream cannot. Is there anyway of instantiating a ZipFile
from a zip file inside another zip file without first extracting the nested zip file?
>     ZipFile zipFile = new ZipFile("C:/test.ZIP");
>     for (Enumeration<ZipArchiveEntry> iterator = zipFile.getEntries(); iterator.hasMoreElements();
) {
>       ZipArchiveEntry entry = iterator.nextElement();
>       InputStream is = new BufferedInputStream(zipFile.getInputStream(entry));
>       ZipArchiveInputStream zipInput = new ZipArchiveInputStream(is);
>       ZipArchiveEntry innerEntry;
>       while ((innerEntry = zipInput.getNextZipEntry()) != null){
>         if (innerEntry.getName().endsWith("XML")){
>           //zipInput.read();
>           System.out.println(IOUtils.toString(zipInput));
>         }
>       }
>     }

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Mime
View raw message