Author: fanningpj
Date: Thu Mar 27 09:32:19 2025
New Revision: 1924657
URL: http://svn.apache.org/viewvc?rev=1924657&view=rev
Log:
[bug-69628] in ZipArchiveFakeEntry, use min of IOUtils and ZipArchiveFakeEntry
entry size limits
Modified:
poi/trunk/poi-ooxml/src/main/java/org/apache/poi/openxml4j/util/ZipArchiveFakeEntry.java
poi/trunk/poi-ooxml/src/test/java/org/apache/poi/xwpf/usermodel/TestXWPFBugs.java
poi/trunk/poi/src/main/java/org/apache/poi/util/IOUtils.java
Modified:
poi/trunk/poi-ooxml/src/main/java/org/apache/poi/openxml4j/util/ZipArchiveFakeEntry.java
URL:
http://svn.apache.org/viewvc/poi/trunk/poi-ooxml/src/main/java/org/apache/poi/openxml4j/util/ZipArchiveFakeEntry.java?rev=1924657&r1=1924656&r2=1924657&view=diff
==============================================================================
---
poi/trunk/poi-ooxml/src/main/java/org/apache/poi/openxml4j/util/ZipArchiveFakeEntry.java
(original)
+++
poi/trunk/poi-ooxml/src/main/java/org/apache/poi/openxml4j/util/ZipArchiveFakeEntry.java
Thu Mar 27 09:32:19 2025
@@ -43,6 +43,11 @@ public final class ZipArchiveFakeEntry e
private static final int DEFAULT_MAX_ENTRY_SIZE = 100_000_000;
private static int MAX_ENTRY_SIZE = DEFAULT_MAX_ENTRY_SIZE;
+ /**
+ * Set the maximum size of a single entry in a zip-file.
+ * @param maxEntrySize number of bytes at which a zip entry is regarded as
too large for holding in memory
+ * - defaults to 100_000_000 (approx 100Mb). A value
of -1 means the default value is used.
+ */
public static void setMaxEntrySize(int maxEntrySize) {
if(maxEntrySize < 0) {
MAX_ENTRY_SIZE = DEFAULT_MAX_ENTRY_SIZE;
@@ -52,7 +57,8 @@ public final class ZipArchiveFakeEntry e
}
public static int getMaxEntrySize() {
- return MAX_ENTRY_SIZE;
+ final int ioMaxSize = IOUtils.getByteArrayMaxOverride();
+ return ioMaxSize < 0 ? MAX_ENTRY_SIZE : Math.min(MAX_ENTRY_SIZE,
ioMaxSize);
}
private byte[] data;
Modified:
poi/trunk/poi-ooxml/src/test/java/org/apache/poi/xwpf/usermodel/TestXWPFBugs.java
URL:
http://svn.apache.org/viewvc/poi/trunk/poi-ooxml/src/test/java/org/apache/poi/xwpf/usermodel/TestXWPFBugs.java?rev=1924657&r1=1924656&r2=1924657&view=diff
==============================================================================
---
poi/trunk/poi-ooxml/src/test/java/org/apache/poi/xwpf/usermodel/TestXWPFBugs.java
(original)
+++
poi/trunk/poi-ooxml/src/test/java/org/apache/poi/xwpf/usermodel/TestXWPFBugs.java
Thu Mar 27 09:32:19 2025
@@ -30,6 +30,7 @@ import java.util.List;
import org.apache.poi.openxml4j.util.ZipArchiveFakeEntry;
import org.apache.poi.openxml4j.util.ZipInputStreamZipEntrySource;
+import org.apache.poi.util.IOUtils;
import org.apache.poi.util.Units;
import org.apache.poi.xwpf.XWPFTestDataSamples;
import org.apache.poi.xwpf.usermodel.XWPFRun.FontCharRange;
@@ -357,6 +358,13 @@ class TestXWPFBugs {
} finally {
ZipArchiveFakeEntry.setMaxEntrySize(-1);
}
+ // test again with smaller byte array max
+ IOUtils.setByteArrayMaxOverride(30 * 1024 * 1024);
+ try (XWPFDocument doc =
XWPFTestDataSamples.openSampleDocument("bug69628.docx")) {
+ assertEquals(expectedParagraphs, doc.getParagraphs().size());
+ } finally {
+ IOUtils.setByteArrayMaxOverride(-1);
+ }
// test again but temp files enabled
ZipInputStreamZipEntrySource.setThresholdBytesForTempFiles(1000);
try (XWPFDocument doc =
XWPFTestDataSamples.openSampleDocument("bug69628.docx")) {
Modified: poi/trunk/poi/src/main/java/org/apache/poi/util/IOUtils.java
URL:
http://svn.apache.org/viewvc/poi/trunk/poi/src/main/java/org/apache/poi/util/IOUtils.java?rev=1924657&r1=1924656&r2=1924657&view=diff
==============================================================================
--- poi/trunk/poi/src/main/java/org/apache/poi/util/IOUtils.java (original)
+++ poi/trunk/poi/src/main/java/org/apache/poi/util/IOUtils.java Thu Mar 27
09:32:19 2025
@@ -108,6 +108,14 @@ public final class IOUtils {
}
/**
+ * @return The maximum number of bytes that should be possible to be
allocated in one step.
+ * @since 5.4.1
+ */
+ public static int getByteArrayMaxOverride() {
+ return BYTE_ARRAY_MAX_OVERRIDE;
+ }
+
+ /**
* Peeks at the first 8 bytes of the stream. Returns those bytes, but
* with the stream unaffected. Requires a stream that supports mark/reset,
* or a PushbackInputStream. If the stream has >0 but <8 bytes,
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]