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 &gt;0 but &lt;8 bytes,



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to