]> source.dussan.org Git - poi.git/commitdiff
Bugzilla 52348: Avoid exception when creating cell style in a workbook that has...
authorYegor Kozlov <yegor@apache.org>
Mon, 19 Dec 2011 09:06:10 +0000 (09:06 +0000)
committerYegor Kozlov <yegor@apache.org>
Mon, 19 Dec 2011 09:06:10 +0000 (09:06 +0000)
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1220659 13f79535-47bb-0310-9956-ffa450edef68

src/documentation/content/xdocs/status.xml
src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFCellStyle.java
src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFCellStyle.java
test-data/spreadsheet/52348.xlsx [new file with mode: 0644]

index f9609297ca4e4981f0611c3ceab4c5ddc2a03604..735eedfbae7a6f51ad85cd081683c44d645da3de 100644 (file)
@@ -34,6 +34,7 @@
 
     <changes>
         <release version="3.8-beta6" date="2012-??-??">
+           <action dev="poi-developers" type="fix">52348 - Avoid exception when creating cell style in a workbook that has an empty xf table</action>
            <action dev="poi-developers" type="fix">52219 - fixed XSSFSimpleShape to set rich text attributes from XSSFRichtextString</action>
            <action dev="poi-developers" type="fix">52314 - enhanced SheetUtil.getColumnWidth</action>
         </release>
index 51ffe6e06e9096e1bf46e863208456a18a876159..d633300ae69f687334e7cd6f977d4e5351af56bd 100644 (file)
@@ -68,15 +68,15 @@ public class XSSFCellStyle implements CellStyle {
 
     /**
      * Creates a Cell Style from the supplied parts
-     * @param cellXfId The main XF for the cell
-     * @param cellStyleXfId Optional, style xf
+     * @param cellXfId The main XF for the cell. Must be a valid 0-based index into the XF table
+     * @param cellStyleXfId Optional, style xf. A value of <code>-1</code> means no xf.
      * @param stylesSource Styles Source to work off
      */
     public XSSFCellStyle(int cellXfId, int cellStyleXfId, StylesTable stylesSource, ThemesTable theme) {
         _cellXfId = cellXfId;
         _stylesSource = stylesSource;
         _cellXf = stylesSource.getCellXfAt(this._cellXfId);
-        _cellStyleXf = stylesSource.getCellStyleXfAt(cellStyleXfId);
+        _cellStyleXf = cellStyleXfId == -1 ? null : stylesSource.getCellStyleXfAt(cellStyleXfId);
         _theme = theme;
     }
 
index a9c968c7e399c2b79e95cbbc41824c2b26c545f0..11b724f4abe036dac045e49d29796bf50f606d2a 100644 (file)
@@ -691,4 +691,19 @@ public class TestXSSFCellStyle extends TestCase {
        assertEquals(fmtClone.getFormat("Test##"), reload.getDataFormat());
        assertFalse(fmtClone.getFormat("Test##") == fmt.getFormat("Test##"));
    }
+
+    /**
+     * Avoid ArrayIndexOutOfBoundsException  when creating cell style
+     * in a workbook that has an empty xf table.
+     */
+    public void testBug52348() {
+        XSSFWorkbook workbook = XSSFTestDataSamples.openSampleWorkbook("52348.xlsx");
+        StylesTable st = workbook.getStylesSource();
+        assertEquals(0, st._getStyleXfsSize());
+        
+        
+        XSSFCellStyle style = workbook.createCellStyle(); // no exception at this point
+        assertNull(style.getStyleXf());
+    }
+
 }
diff --git a/test-data/spreadsheet/52348.xlsx b/test-data/spreadsheet/52348.xlsx
new file mode 100644 (file)
index 0000000..356490d
Binary files /dev/null and b/test-data/spreadsheet/52348.xlsx differ