Jon Neel created COMPRESS-239:
---------------------------------

             Summary: ArchiveStreamFactory cannot create an ArchiveInputStream 
from any input stream that is blocking
                 Key: COMPRESS-239
                 URL: https://issues.apache.org/jira/browse/COMPRESS-239
             Project: Commons Compress
          Issue Type: Bug
          Components: Archivers
    Affects Versions: 1.5
         Environment: Windows Server 2008r1/r2, Ubuntu 12.10
            Reporter: Jon Neel


Encountered while streaming zip data over a network:

In the createArchiveInputStream method of ArchiveStreamFactory, when the 
provided input stream is read, and it blocks before 12 bytes are available for 
reading, due to the contract of the java.io.InputStream class, the archive 
signature will not be completely read, and an ArchiveException will be thrown 
("No Archiver found for the stream signature").

In ZipArchiveInputStream, you have implemented a readFully method, which should 
solve this issue, but since you are checking the length of the signature read 
against the expected length, you are never getting to do that.  When you try to 
read the signature, you should be using readFully.

For reference, here is important part of the contract of 
java.io.InputStream.read():

This method blocks until [ANY] input data is available, end of file is 
detected, or an exception is thrown.

If len is zero, then no bytes are read and 0 is returned; otherwise, there is 
an attempt to read _at least one byte_. If no byte is available because the 
stream is at end of file, the value -1 is returned; otherwise, at least one 
byte is read and stored into b.



--
This message was sent by Atlassian JIRA
(v6.1#6144)

Reply via email to