This is an automated email from the ASF dual-hosted git repository. centic pushed a commit to branch trunk in repository https://gitbox.apache.org/repos/asf/poi.git
commit 55c1608a2d0e236c270bf8f833f4719f6996dc7e Author: Dominik Stadler <[email protected]> AuthorDate: Sat Feb 14 17:15:14 2026 +0100 Avoid NPE with malformed anchors in slideshow files --- .../apache/poi/hslf/usermodel/HSLFGroupShape.java | 18 +++++++++++------- .../62d2ecd89aeb715b07072d4f8a8734f4dbeb5c10.ppt | Bin 0 -> 224256 bytes test-data/spreadsheet/stress.xls | Bin 78848 -> 78848 bytes 3 files changed, 11 insertions(+), 7 deletions(-) diff --git a/poi-scratchpad/src/main/java/org/apache/poi/hslf/usermodel/HSLFGroupShape.java b/poi-scratchpad/src/main/java/org/apache/poi/hslf/usermodel/HSLFGroupShape.java index 1754e67d2b..66edf97706 100644 --- a/poi-scratchpad/src/main/java/org/apache/poi/hslf/usermodel/HSLFGroupShape.java +++ b/poi-scratchpad/src/main/java/org/apache/poi/hslf/usermodel/HSLFGroupShape.java @@ -78,7 +78,7 @@ implements HSLFShapeContainer, GroupShape<HSLFShape,HSLFTextParagraph> { public void setAnchor(Rectangle2D anchor) { EscherClientAnchorRecord clientAnchor = getEscherChild(EscherClientAnchorRecord.RECORD_ID); boolean isInitialized = !(clientAnchor.getDx1() == 0 && clientAnchor.getRow1() == 0); - + if (isInitialized) { moveAndScale(anchor); } else { @@ -113,7 +113,7 @@ implements HSLFShapeContainer, GroupShape<HSLFShape,HSLFTextParagraph> { protected void setExteriorAnchor(Rectangle2D anchor) { EscherClientAnchorRecord clientAnchor = getEscherChild(EscherClientAnchorRecord.RECORD_ID); - + //hack. internal variable EscherClientAnchorRecord.shortRecord can be //initialized only in fillFields(). We need to set shortRecord=false; byte[] header = new byte[16]; @@ -131,7 +131,7 @@ implements HSLFShapeContainer, GroupShape<HSLFShape,HSLFTextParagraph> { // TODO: does this make sense? setInteriorAnchor(anchor); } - + /** * Create a new ShapeGroup and create an instance of <code>EscherSpgrContainer</code> which represents a group of shapes */ @@ -186,7 +186,7 @@ implements HSLFShapeContainer, GroupShape<HSLFShape,HSLFTextParagraph> { double scaleY = (anchorSrc.getHeight() == 0) ? 0 : anchorDest.getHeight() / anchorSrc.getHeight(); setExteriorAnchor(anchorDest); - + for (HSLFShape shape : getShapes()) { Rectangle2D chanchor = shape.getAnchor(); double x = anchorDest.getX()+(chanchor.getX()-anchorSrc.getX())*scaleX; @@ -204,12 +204,16 @@ implements HSLFShapeContainer, GroupShape<HSLFShape,HSLFTextParagraph> { * @return the anchor of this shape group */ @Override - public Rectangle2D getAnchor(){ + public Rectangle2D getAnchor() { EscherClientAnchorRecord clientAnchor = getEscherChild(EscherClientAnchorRecord.RECORD_ID); int x1,y1,x2,y2; - if(clientAnchor == null){ + if(clientAnchor == null) { LOG.atInfo().log("EscherClientAnchorRecord was not found for shape group. Searching for EscherChildAnchorRecord."); EscherChildAnchorRecord rec = getEscherChild(EscherChildAnchorRecord.RECORD_ID); + if (rec == null) { + throw new IllegalStateException("Cannot get anchor, neither had an EscherClientAnchorRecord nor an EscherChildAnchorRecord"); + } + x1 = rec.getDx1(); y1 = rec.getDy1(); x2 = rec.getDx2(); @@ -293,7 +297,7 @@ implements HSLFShapeContainer, GroupShape<HSLFShape,HSLFTextParagraph> { isFirst = false; continue; } - + if(r instanceof EscherContainerRecord) { // Create the Shape for it EscherContainerRecord container = (EscherContainerRecord)r; diff --git a/test-data/slideshow/62d2ecd89aeb715b07072d4f8a8734f4dbeb5c10.ppt b/test-data/slideshow/62d2ecd89aeb715b07072d4f8a8734f4dbeb5c10.ppt new file mode 100644 index 0000000000..05256ad4a5 Binary files /dev/null and b/test-data/slideshow/62d2ecd89aeb715b07072d4f8a8734f4dbeb5c10.ppt differ diff --git a/test-data/spreadsheet/stress.xls b/test-data/spreadsheet/stress.xls index 9b4388c582..a6db95bc78 100644 Binary files a/test-data/spreadsheet/stress.xls and b/test-data/spreadsheet/stress.xls differ --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
