Robin Schimpf created COMPRESS-607:
--------------------------------------

             Summary: ZipArchiveInputStream: Large STORED entry leads to 
OutOfMemory
                 Key: COMPRESS-607
                 URL: https://issues.apache.org/jira/browse/COMPRESS-607
             Project: Commons Compress
          Issue Type: Bug
    Affects Versions: 1.21
            Reporter: Robin Schimpf


While extracting a large Zip with only STORED entries a file larger than 4GB 
triggered an OutOfMemory error without the JVM having exhausted the available 
memory.
{code:java}
Caused by: java.lang.OutOfMemoryError
        at 
java.base/java.io.ByteArrayOutputStream.hugeCapacity(ByteArrayOutputStream.java:125)
        at 
java.base/java.io.ByteArrayOutputStream.grow(ByteArrayOutputStream.java:119)
        at 
java.base/java.io.ByteArrayOutputStream.ensureCapacity(ByteArrayOutputStream.java:95)
        at 
java.base/java.io.ByteArrayOutputStream.write(ByteArrayOutputStream.java:156)
        at 
org.apache.commons.compress.archivers.zip.ZipArchiveInputStream.cacheBytesRead(ZipArchiveInputStream.java:1086)
        at 
org.apache.commons.compress.archivers.zip.ZipArchiveInputStream.readStoredEntry(ZipArchiveInputStream.java:1015)
        at 
org.apache.commons.compress.archivers.zip.ZipArchiveInputStream.readStored(ZipArchiveInputStream.java:588)
        at 
org.apache.commons.compress.archivers.zip.ZipArchiveInputStream.read(ZipArchiveInputStream.java:526){code}
The stream seems to buffer the whole entry in memory until it finds the next 
entry. Since the buffer is stored in an ByteArrayOutputStream only Integer.MAX 
bytes can be buffered.

Is this limitation intended? I have read 
[https://commons.apache.org/proper/commons-compress/zip.html#ZipArchiveInputStream_vs_ZipFile]
 but found nothing about file size limitation.

Since the file is stored on disk I will switch to ZipFile but for other cases 
it would be preferrable to be able to extract such files.



--
This message was sent by Atlassian Jira
(v8.20.1#820001)

Reply via email to