]> source.dussan.org Git - poi.git/commitdiff
Fix Bug 56514, add missing null-check if simple shape does not have any text
authorDominik Stadler <centic@apache.org>
Fri, 16 May 2014 07:09:55 +0000 (07:09 +0000)
committerDominik Stadler <centic@apache.org>
Fri, 16 May 2014 07:09:55 +0000 (07:09 +0000)
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1595127 13f79535-47bb-0310-9956-ffa450edef68

src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFSimpleShape.java
src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFDrawing.java
test-data/spreadsheet/56514.xlsx [new file with mode: 0644]

index 44fc91bbf903ccc21aea315c4b15ac4e536ab887..7ce8c4e0df918573965976f1cf28ab63be0f8534 100644 (file)
@@ -25,28 +25,7 @@ import org.apache.poi.hssf.util.HSSFColor;
 import org.apache.poi.ss.usermodel.VerticalAlignment;
 import org.apache.poi.util.Internal;
 import org.apache.poi.util.Units;
-import org.openxmlformats.schemas.drawingml.x2006.main.CTNonVisualDrawingProps;
-import org.openxmlformats.schemas.drawingml.x2006.main.CTPoint2D;
-import org.openxmlformats.schemas.drawingml.x2006.main.CTPositiveSize2D;
-import org.openxmlformats.schemas.drawingml.x2006.main.CTPresetGeometry2D;
-import org.openxmlformats.schemas.drawingml.x2006.main.CTRegularTextRun;
-import org.openxmlformats.schemas.drawingml.x2006.main.CTSRgbColor;
-import org.openxmlformats.schemas.drawingml.x2006.main.CTShapeProperties;
-import org.openxmlformats.schemas.drawingml.x2006.main.CTSolidColorFillProperties;
-import org.openxmlformats.schemas.drawingml.x2006.main.CTTextBody;
-import org.openxmlformats.schemas.drawingml.x2006.main.CTTextBodyProperties;
-import org.openxmlformats.schemas.drawingml.x2006.main.CTTextCharacterProperties;
-import org.openxmlformats.schemas.drawingml.x2006.main.CTTextFont;
-import org.openxmlformats.schemas.drawingml.x2006.main.CTTextParagraph;
-import org.openxmlformats.schemas.drawingml.x2006.main.CTTransform2D;
-import org.openxmlformats.schemas.drawingml.x2006.main.STShapeType;
-import org.openxmlformats.schemas.drawingml.x2006.main.STTextAlignType;
-import org.openxmlformats.schemas.drawingml.x2006.main.STTextAnchoringType;
-import org.openxmlformats.schemas.drawingml.x2006.main.STTextHorzOverflowType;
-import org.openxmlformats.schemas.drawingml.x2006.main.STTextUnderlineType;
-import org.openxmlformats.schemas.drawingml.x2006.main.STTextVertOverflowType;
-import org.openxmlformats.schemas.drawingml.x2006.main.STTextVerticalType;
-import org.openxmlformats.schemas.drawingml.x2006.main.STTextWrappingType;
+import org.openxmlformats.schemas.drawingml.x2006.main.*;
 import org.openxmlformats.schemas.drawingml.x2006.spreadsheetDrawing.CTShape;
 import org.openxmlformats.schemas.drawingml.x2006.spreadsheetDrawing.CTShapeNonVisual;
 import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTRElt;
@@ -81,8 +60,10 @@ public class XSSFSimpleShape extends XSSFShape implements Iterable<XSSFTextParag
         // initialize any existing paragraphs - this will be the default body paragraph in a new shape, 
         // or existing paragraphs that have been loaded from the file
         CTTextBody body = ctShape.getTxBody();
-        for(int i = 0; i < body.sizeOfPArray(); i++) {
-            _paragraphs.add(new XSSFTextParagraph(body.getPArray(i), ctShape));                
+        if(body != null) {
+            for(int i = 0; i < body.sizeOfPArray(); i++) {
+                _paragraphs.add(new XSSFTextParagraph(body.getPArray(i), ctShape));            
+            }
         }
     }
 
index 3eea634e189bb79aaf138e6afb0a755fbd8b7136..bdfd630e91c81ca8ded6c99b8b12af64c4344e5b 100644 (file)
@@ -17,6 +17,7 @@
 package org.apache.poi.xssf.usermodel;
 
 import java.awt.Color;
+import java.io.IOException;
 import java.util.Arrays;
 import java.util.List;
 
@@ -141,7 +142,7 @@ public class TestXSSFDrawing extends TestCase {
         assertNotNull(XSSFTestDataSamples.writeOutAndReadBack(wb));
     }
     
-    public void testMultipleDrawings(){
+    public void testMultipleDrawings() throws IOException{
         XSSFWorkbook wb = new XSSFWorkbook();
         for (int i = 0; i < 3; i++) {
             XSSFSheet sheet = wb.createSheet();
@@ -149,9 +150,13 @@ public class TestXSSFDrawing extends TestCase {
             assertNotNull(drawing);
         }
         OPCPackage pkg = wb.getPackage();
-        assertEquals(3, pkg.getPartsByContentType(XSSFRelation.DRAWINGS.getContentType()).size());
+        try {
+            assertEquals(3, pkg.getPartsByContentType(XSSFRelation.DRAWINGS.getContentType()).size());
         
-        assertNotNull(XSSFTestDataSamples.writeOutAndReadBack(wb));
+            assertNotNull(XSSFTestDataSamples.writeOutAndReadBack(wb));
+        } finally {
+            pkg.close();
+        }
     }
 
     public void testClone() throws Exception{
@@ -693,4 +698,24 @@ public class TestXSSFDrawing extends TestCase {
         
         assertNotNull(XSSFTestDataSamples.writeOutAndReadBack(wb));
     }
+
+    public void testXSSFSimpleShapeCausesNPE56514() throws Exception {
+        XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("56514.xlsx");
+        XSSFSheet sheet = wb.getSheetAt(0);
+        XSSFDrawing drawing = sheet.createDrawingPatriarch();
+        List<XSSFShape> shapes = drawing.getShapes();
+        assertEquals(4, shapes.size());
+        
+        wb = XSSFTestDataSamples.writeOutAndReadBack(wb);
+        
+        shapes = drawing.getShapes();
+        assertEquals(4, shapes.size());
+        
+/*        OutputStream stream = new FileOutputStream(new File("C:\\temp\\56514.xlsx"));
+        try {
+            wb.write(stream);
+        } finally {
+            stream.close();
+        }*/
+    }
 }
diff --git a/test-data/spreadsheet/56514.xlsx b/test-data/spreadsheet/56514.xlsx
new file mode 100644 (file)
index 0000000..29163a5
Binary files /dev/null and b/test-data/spreadsheet/56514.xlsx differ