]> source.dussan.org Git - poi.git/commitdiff
[bug-63498] NPE when calling getShapeName on XSLFTableCell. Thanks to Mate Borcsok.
authorPJ Fanning <fanningpj@apache.org>
Wed, 12 Jun 2019 17:30:52 +0000 (17:30 +0000)
committerPJ Fanning <fanningpj@apache.org>
Wed, 12 Jun 2019 17:30:52 +0000 (17:30 +0000)
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1861172 13f79535-47bb-0310-9956-ffa450edef68

src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFShape.java
src/ooxml/testcases/org/apache/poi/xslf/usermodel/TestXSLFTableRow.java

index 3df55edbaa029fb4112969a6ff98acd3bbc3fb2b..8227b46460b815faeadd37f6306ab74df70cee4c 100644 (file)
@@ -98,13 +98,18 @@ public abstract class XSLFShape implements Shape<XSLFShape,XSLFTextParagraph> {
     }
 
     @Override
-    public String getShapeName(){
-        return getCNvPr().getName();
+    public String getShapeName() {
+        CTNonVisualDrawingProps nonVisualDrawingProps = getCNvPr();
+        return nonVisualDrawingProps == null ? null : nonVisualDrawingProps.getName();
     }
 
     @Override
     public int getShapeId() {
-        return (int)getCNvPr().getId();
+        CTNonVisualDrawingProps nonVisualDrawingProps = getCNvPr();
+        if (nonVisualDrawingProps == null) {
+            throw new IllegalStateException("no underlying shape exists");
+        }
+        return Math.toIntExact(nonVisualDrawingProps.getId());
     }
 
     /**
index 8a08928193ecff1484ef129ea8ef78ca557f4e58..47345133b8454db903fa98d06ebc2ffc110745d0 100644 (file)
 ==================================================================== */
 package org.apache.poi.xslf.usermodel;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertSame;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
+import static org.junit.Assert.*;
 
 import java.io.IOException;
 import java.util.List;
@@ -128,4 +123,28 @@ public class TestXSLFTableRow {
         assertNotNull(ctrow);
     }
 
+
+    @Test
+    public void getShapeNameOfCells() throws Exception {
+        try(XMLSlideShow ss1 = XSLFTestDataSamples.openSampleDocument("table_test.pptx")) {
+            for (XSLFSlide slide : ss1.getSlides()) {
+                for (XSLFShape shape : slide.getShapes()) {
+                    assertEquals("Table 3", shape.getShapeName());
+                    if (shape instanceof XSLFTable) {
+                        for (XSLFTableRow row : ((XSLFTable) shape).getRows()) {
+                            for (XSLFTableCell cell : row.getCells()) {
+                                assertNull(cell.getShapeName()); // Do not throw NPE
+                                try {
+                                    cell.getShapeId();
+                                    fail("expected getShapeId to fail");
+                                } catch (IllegalStateException ise) {
+                                    // expected
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+        }
+    }
 }