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)