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] [Commented] (COMPRESS-189) ZipArchiveInputStream may read 0 bytes when reading from a nested Zip file
Date Mon, 01 Oct 2012 18:31:07 GMT

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

Daniel Lowe commented on COMPRESS-189:
--------------------------------------

This issue can be worked around by reading while 0 or more bytes are read. Unfortunately Java's
built in InputStreamReader will throw an exception is 0 bytes are read which is the underlying
reason why in the example above Commons-IO throws an exception.

Marking and resetting seems to be a reasonable way to workaround the problem:
BufferedInputStream archiveBis = new BufferedInputStream(archiveInput);
archiveBis.mark(1);
archiveBis.read();//if the bug is encountered nothing will be read
archiveBis.reset();

Obviously a proper fix would be better
                
> 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
For more information on JIRA, see: http://www.atlassian.com/software/jira

Mime
View raw message