From: Dominik Stadler Date: Wed, 4 Apr 2018 19:40:54 +0000 (+0000) Subject: Try to avoid one NPE that popped up in commoncrawl-corpus tests X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=eb4e20cd69b89f697989b06a9643f22a97458044;p=poi.git Try to avoid one NPE that popped up in commoncrawl-corpus tests git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1828375 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/src/integrationtest/org/apache/poi/stress/XSLFFileHandler.java b/src/integrationtest/org/apache/poi/stress/XSLFFileHandler.java index 043d390990..7aab657650 100644 --- a/src/integrationtest/org/apache/poi/stress/XSLFFileHandler.java +++ b/src/integrationtest/org/apache/poi/stress/XSLFFileHandler.java @@ -66,7 +66,7 @@ public class XSLFFileHandler extends SlideShowHandler { @Override @Test public void test() throws Exception { - File file = new File("test-data/slideshow/ae.ac.uaeu.faculty_nafaachbili_GeomLec1.pptx"); + File file = new File("test-data/slideshow/ca.ubc.cs.people_~emhill_presentations_HowWeRefactor.pptx"); try (InputStream stream = new FileInputStream(file)) { handleFile(stream, file.getPath()); } diff --git a/src/java/org/apache/poi/sl/draw/DrawShape.java b/src/java/org/apache/poi/sl/draw/DrawShape.java index 242b9d6a68..9977e667ed 100644 --- a/src/java/org/apache/poi/sl/draw/DrawShape.java +++ b/src/java/org/apache/poi/sl/draw/DrawShape.java @@ -66,7 +66,15 @@ public class DrawShape implements Drawable { if (tx == null) { tx = new AffineTransform(); } - final Rectangle2D anchor = tx.createTransformedShape(ps.getAnchor()).getBounds2D(); + + // we saw one document failing here, probably the format is slightly broken, but + // maybe better to try to handle it more gracefully + java.awt.Shape transformedShape = tx.createTransformedShape(ps.getAnchor()); + if(transformedShape == null) { + return; + } + + final Rectangle2D anchor = transformedShape.getBounds2D(); char cmds[] = isHSLF ? new char[]{ 'h','v','r' } : new char[]{ 'r','h','v' }; for (char ch : cmds) { @@ -184,7 +192,7 @@ public class DrawShape implements Drawable { } AffineTransform tx = (AffineTransform)graphics.getRenderingHint(Drawable.GROUP_TRANSFORM); - if(tx != null && !tx.isIdentity()) { + if(tx != null && !tx.isIdentity() && tx.createTransformedShape(anchor) != null) { anchor = tx.createTransformedShape(anchor).getBounds2D(); } return anchor; diff --git a/src/java/org/apache/poi/sl/draw/DrawSimpleShape.java b/src/java/org/apache/poi/sl/draw/DrawSimpleShape.java index c5abefa4c5..7ed1d35da2 100644 --- a/src/java/org/apache/poi/sl/draw/DrawSimpleShape.java +++ b/src/java/org/apache/poi/sl/draw/DrawSimpleShape.java @@ -405,6 +405,9 @@ public class DrawSimpleShape extends DrawShape { } Rectangle2D anchor = getAnchor(graphics, sh); + if(anchor == null) { + return lst; + } for (Path p : geom) { double w = p.getW(), h = p.getH(), scaleX = Units.toPoints(1), scaleY = scaleX; diff --git a/src/java/org/apache/poi/sl/draw/DrawTextShape.java b/src/java/org/apache/poi/sl/draw/DrawTextShape.java index ed14653814..413ab218c9 100644 --- a/src/java/org/apache/poi/sl/draw/DrawTextShape.java +++ b/src/java/org/apache/poi/sl/draw/DrawTextShape.java @@ -45,6 +45,10 @@ public class DrawTextShape extends DrawSimpleShape { TextShape s = getShape(); Rectangle2D anchor = DrawShape.getAnchor(graphics, s); + if(anchor == null) { + return; + } + Insets2D insets = s.getInsets(); double x = anchor.getX() + insets.left; double y = anchor.getY(); diff --git a/test-data/slideshow/ca.ubc.cs.people_~emhill_presentations_HowWeRefactor.pptx b/test-data/slideshow/ca.ubc.cs.people_~emhill_presentations_HowWeRefactor.pptx new file mode 100755 index 0000000000..544ee321e1 Binary files /dev/null and b/test-data/slideshow/ca.ubc.cs.people_~emhill_presentations_HowWeRefactor.pptx differ