[bug-63498] NPE when calling getShapeName on XSLFTableCell. Thanks to Mate Borcsok.

git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1861172 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
PJ Fanning 2019-06-12 17:30:52 +00:00
parent 3e061ca74c
commit d20bc98f70
2 changed files with 33 additions and 9 deletions

View 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());
}
/**

View File

@ -16,12 +16,7 @@
==================================================================== */
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
}
}
}
}
}
}
}
}
}