You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@poi.apache.org by fa...@apache.org on 2026/03/20 10:11:29 UTC

(poi) branch trunk updated: Fix ArrayIndexOutOfBoundsException in XSSFTextParagraph when auto number scheme index is out of range (#1033)

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

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


The following commit(s) were added to refs/heads/trunk by this push:
     new 113059e48e Fix ArrayIndexOutOfBoundsException in XSSFTextParagraph when auto number scheme index is out of range (#1033)
113059e48e is described below

commit 113059e48ebbce78bd8631938ce914e695083d40
Author: amos-wnjsoft <39...@users.noreply.github.com>
AuthorDate: Fri Mar 20 18:11:24 2026 +0800

    Fix ArrayIndexOutOfBoundsException in XSSFTextParagraph when auto number scheme index is out of range (#1033)
    
    * Fix ArrayIndexOutOfBoundsException in XSSFTextParagraph when auto number scheme index is out of range
    
    * removed the try-catch block and added throws IOException to the method signature
---
 .../poi/xssf/usermodel/XSSFTextParagraph.java      |  9 +++++-
 .../poi/xssf/usermodel/TestXSSFTextParagraph.java  | 37 ++++++++++++++++++++++
 2 files changed, 45 insertions(+), 1 deletion(-)

diff --git a/poi-ooxml/src/main/java/org/apache/poi/xssf/usermodel/XSSFTextParagraph.java b/poi-ooxml/src/main/java/org/apache/poi/xssf/usermodel/XSSFTextParagraph.java
index c994038aeb..d917f8f720 100644
--- a/poi-ooxml/src/main/java/org/apache/poi/xssf/usermodel/XSSFTextParagraph.java
+++ b/poi-ooxml/src/main/java/org/apache/poi/xssf/usermodel/XSSFTextParagraph.java
@@ -865,7 +865,14 @@ public class XSSFTextParagraph implements Iterable<XSSFTextRun>{
         ParagraphPropertyFetcher<ListAutoNumber> fetcher = new ParagraphPropertyFetcher<ListAutoNumber>(getLevel()){
             public boolean fetch(CTTextParagraphProperties props){
                 if(props.isSetBuAutoNum() && props.getBuAutoNum().getType() != null) {
-                    setValue(ListAutoNumber.values()[props.getBuAutoNum().getType().intValue() - 1]);
+                    int typeIdx = props.getBuAutoNum().getType().intValue() - 1;
+                    ListAutoNumber[] values = ListAutoNumber.values();
+                    if (typeIdx >= 0 && typeIdx < values.length) {
+                        setValue(values[typeIdx]);
+                    } else {
+                        // Fallback handling: use the default format when the value is out of range
+                        setValue(ListAutoNumber.ARABIC_PLAIN);
+                    }
                     return true;
                 }
                 return false;
diff --git a/poi-ooxml/src/test/java/org/apache/poi/xssf/usermodel/TestXSSFTextParagraph.java b/poi-ooxml/src/test/java/org/apache/poi/xssf/usermodel/TestXSSFTextParagraph.java
index 17daaf102c..ae8f11bf37 100644
--- a/poi-ooxml/src/test/java/org/apache/poi/xssf/usermodel/TestXSSFTextParagraph.java
+++ b/poi-ooxml/src/test/java/org/apache/poi/xssf/usermodel/TestXSSFTextParagraph.java
@@ -18,6 +18,12 @@ package org.apache.poi.xssf.usermodel;
 
 import static org.junit.jupiter.api.Assertions.*;
 
+import org.openxmlformats.schemas.drawingml.x2006.main.STTextAutonumberScheme;
+import org.openxmlformats.schemas.drawingml.x2006.main.CTTextParagraphProperties;
+import org.openxmlformats.schemas.drawingml.x2006.main.CTTextAutonumberBullet;
+import org.openxmlformats.schemas.drawingml.x2006.main.STTextAutonumberScheme;
+import org.openxmlformats.schemas.drawingml.x2006.main.CTTextParagraph;
+
 import java.awt.Color;
 import java.io.IOException;
 import java.util.List;
@@ -224,4 +230,35 @@ class TestXSSFTextParagraph {
             assertArrayEquals(run.getFontColorAsBytes(), run2.getFontColorAsBytes());
         }
     }
+
+    @Test
+    public void testBulletAutoNumberSchemeOutOfBounds() throws IOException{
+        try (XSSFWorkbook wb = new XSSFWorkbook()) {
+            XSSFSheet sheet = wb.createSheet();
+            XSSFDrawing drawing = sheet.createDrawingPatriarch();
+            XSSFTextBox shape = drawing.createTextbox(new XSSFClientAnchor(0, 0, 0, 0, 0, 0, 1, 1));
+
+            // Ensure the paragraph is created correctly
+            XSSFTextParagraph para = shape.addNewTextParagraph();
+
+            // 1. Obtain or create the underlying XML structure
+            CTTextParagraph ctPara = para.getXmlObject();
+            CTTextParagraphProperties pr = ctPara.isSetPPr() ? ctPara.getPPr() : ctPara.addNewPPr();
+
+            // 2. Force a level to avoid ParagraphPropertyFetcher errors
+            pr.setLvl(0);
+
+            // 3. Set an out-of-range autonumber type (e.g. 24)
+            CTTextAutonumberBullet bullet = pr.isSetBuAutoNum() ? pr.getBuAutoNum() : pr.addNewBuAutoNum();
+            bullet.setType(STTextAutonumberScheme.Enum.forInt(24));
+
+            // 4. Execute the test
+            // If you haven't applied the fix, this line will throw AIOOBE
+            // If the fix is applied, this should return ARABIC_PLAIN
+            ListAutoNumber result = para.getBulletAutoNumberScheme();
+
+            assertNotNull(result, "Result should not be null");
+            assertEquals(ListAutoNumber.ARABIC_PLAIN, result, "Should fallback to ARABIC_PLAIN for unknown index");
+        }
+    }
 }


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@poi.apache.org
For additional commands, e-mail: commits-help@poi.apache.org