From ea6378092693b08b29b37787cc16cbeb06b327f1 Mon Sep 17 00:00:00 2001 From: Andreas Beeker Date: Fri, 18 Nov 2016 23:29:53 +0000 Subject: [PATCH] Bug 60373 - TableCell.getTextHeight() returns Null pointer Exception git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1770447 13f79535-47bb-0310-9956-ffa450edef68 --- .../apache/poi/sl/draw/DrawTableShape.java | 9 ++++-- .../apache/poi/xslf/usermodel/XSLFTable.java | 11 +++++-- .../org/apache/poi/sl/TestTable.java | 6 ++-- .../org/apache/poi/xslf/TestXSLFBugs.java | 32 ++++++++++++++++++- 4 files changed, 50 insertions(+), 8 deletions(-) diff --git a/src/java/org/apache/poi/sl/draw/DrawTableShape.java b/src/java/org/apache/poi/sl/draw/DrawTableShape.java index 970c9b4e0..947b2ad13 100644 --- a/src/java/org/apache/poi/sl/draw/DrawTableShape.java +++ b/src/java/org/apache/poi/sl/draw/DrawTableShape.java @@ -137,8 +137,10 @@ public class DrawTableShape extends DrawShape { for (int row=0; row tc = ts.getCell(row, col); - DrawTextShape dts = df.getDrawable(tc); - dts.drawContent(graphics); + if (tc != null) { + DrawTextShape dts = df.getDrawable(tc); + dts.drawContent(graphics); + } } } } @@ -229,6 +231,9 @@ public class DrawTableShape extends DrawShape { * @param args the border attributes */ private static void setEdges(TableCell cell, BorderEdge edges[], Object... args) { + if (cell == null) { + return; + } for (BorderEdge be : edges) { if (be != null) { if (args.length == 0) { diff --git a/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFTable.java b/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFTable.java index 61ab6b44d..2637381d3 100644 --- a/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFTable.java +++ b/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFTable.java @@ -297,7 +297,7 @@ public class XSLFTable extends XSLFGraphicFrame implements Iterable c = tbl1.getCell(0, col++); - c.setTextDirection(td); - c.setText("bla"); + if (c != null) { + c.setTextDirection(td); + c.setText("bla"); + } } ByteArrayOutputStream bos = new ByteArrayOutputStream(); diff --git a/src/ooxml/testcases/org/apache/poi/xslf/TestXSLFBugs.java b/src/ooxml/testcases/org/apache/poi/xslf/TestXSLFBugs.java index 7c02ba282..759bbf6fb 100644 --- a/src/ooxml/testcases/org/apache/poi/xslf/TestXSLFBugs.java +++ b/src/ooxml/testcases/org/apache/poi/xslf/TestXSLFBugs.java @@ -60,6 +60,10 @@ import org.apache.poi.xslf.usermodel.XSLFShape; import org.apache.poi.xslf.usermodel.XSLFSlide; import org.apache.poi.xslf.usermodel.XSLFSlideLayout; import org.apache.poi.xslf.usermodel.XSLFSlideMaster; +import org.apache.poi.xslf.usermodel.XSLFTable; +import org.apache.poi.xslf.usermodel.XSLFTableCell; +import org.apache.poi.xslf.usermodel.XSLFTableRow; +import org.apache.poi.xslf.usermodel.XSLFTextParagraph; import org.apache.poi.xslf.usermodel.XSLFTextRun; import org.junit.Ignore; import org.junit.Test; @@ -556,4 +560,30 @@ public class TestXSLFBugs { rwPptx.close(); ppt.close(); } -} + + + @Test + public void bug60373() throws IOException { + XMLSlideShow ppt = new XMLSlideShow(); + XSLFSlide sl = ppt.createSlide(); + XSLFTable t = sl.createTable(); + XSLFTableRow r = t.addRow(); + bug60373_addCell(r); + bug60373_addCell(r); + r = t.addRow(); + XSLFTableCell c = bug60373_addCell(r); + // call getTextHeight, when table is not fully populated + double th = c.getTextHeight(); + assertTrue(th > 10); + ppt.close(); + } + + private static XSLFTableCell bug60373_addCell(XSLFTableRow r) { + XSLFTableCell cell = r.addCell(); + XSLFTextParagraph p = cell.addNewTextParagraph(); + XSLFTextRun tr = p.addNewTextRun(); + tr.setText("t"); + return cell; + } + +} \ No newline at end of file