This is an automated email from the ASF dual-hosted git repository.

centic9 pushed a commit to branch trunk
in repository https://gitbox.apache.org/repos/asf/poi.git

commit 2810c299ff52e98060d530dd1e6f848c17960eac
Author: Dominik Stadler <[email protected]>
AuthorDate: Sun Apr 12 20:50:41 2026 +0200

    Add some JavaDoc and tests for changes in VBAMacroReader
---
 .../apache/poi/poifs/macros/VBAMacroReader.java    | 12 ++++++++++
 .../poi/poifs/macros/TestVBAMacroReader.java       | 27 ++++++++++++++++++++++
 2 files changed, 39 insertions(+)

diff --git a/poi/src/main/java/org/apache/poi/poifs/macros/VBAMacroReader.java 
b/poi/src/main/java/org/apache/poi/poifs/macros/VBAMacroReader.java
index f422870f1c..7edadea0f5 100644
--- a/poi/src/main/java/org/apache/poi/poifs/macros/VBAMacroReader.java
+++ b/poi/src/main/java/org/apache/poi/poifs/macros/VBAMacroReader.java
@@ -74,10 +74,22 @@ public class VBAMacroReader implements Closeable {
     private static final int DEFAULT_MAX_STRING_LENGTH = 20000;
     private static int MAX_STRING_LENGTH = DEFAULT_MAX_STRING_LENGTH;
 
+    /**
+     * Set the maximum number of bytes to be allocated for a single VBA entry 
or decompressed
+     * stream. Use this to adjust the default limit if you need to process 
very large VBA projects,
+     * or to tighten the limit on memory-constrained systems.
+     *
+     * @param maxStringLength the maximum number of bytes that may be 
allocated; must be &gt; 0
+     * @since 5.4.1
+     */
     public static void setMaxStringLength(int maxStringLength) {
         MAX_STRING_LENGTH = maxStringLength;
     }
 
+    /**
+     * @return the maximum number of bytes that may be allocated per VBA entry 
or decompressed stream
+     * @since 5.4.1
+     */
     public static int getMaxStringLength() {
         return MAX_STRING_LENGTH;
     }
diff --git 
a/poi/src/test/java/org/apache/poi/poifs/macros/TestVBAMacroReader.java 
b/poi/src/test/java/org/apache/poi/poifs/macros/TestVBAMacroReader.java
index 57e9ed814e..e867d3cf80 100644
--- a/poi/src/test/java/org/apache/poi/poifs/macros/TestVBAMacroReader.java
+++ b/poi/src/test/java/org/apache/poi/poifs/macros/TestVBAMacroReader.java
@@ -28,6 +28,10 @@ import static org.apache.poi.POITestCase.assertContains;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertFalse;
 import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertThrows;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
+import org.apache.poi.util.RecordFormatException;
 
 import java.io.File;
 import java.io.FileInputStream;
@@ -317,4 +321,27 @@ class TestVBAMacroReader {
         assertEquals(20, macros.size());
         r.close();
     }
+
+    @Test
+    void maxStringLengthDefaultIsLarge() {
+        // Default should be large enough to handle real-world VBA projects
+        assertTrue(VBAMacroReader.getMaxStringLength() >= 20_000,
+                "Default MAX_STRING_LENGTH should be at least 20_000");
+    }
+
+    @Test
+    void setMaxStringLengthIsRespectedByModuleRead() throws IOException {
+        int prevLimit = VBAMacroReader.getMaxStringLength();
+        try {
+            // Set an absurdly small limit so the module stream read is 
rejected
+            VBAMacroReader.setMaxStringLength(1);
+            File f = 
POIDataSamples.getSpreadSheetInstance().getFile("SimpleMacro.xls");
+            try (VBAMacroReader r = new VBAMacroReader(f)) {
+                assertThrows(RecordFormatException.class, r::readMacros,
+                        "Expected RecordFormatException when MAX_STRING_LENGTH 
is exceeded during module read");
+            }
+        } finally {
+            VBAMacroReader.setMaxStringLength(prevLimit);
+        }
+    }
 }


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

Reply via email to