From d1f0a88ea12ab28604bf0f8fe47d940051757daf Mon Sep 17 00:00:00 2001 From: Dominik Stadler Date: Sun, 18 Jan 2026 17:23:42 +0100 Subject: [PATCH] Avoid NPE in XSLFDiagram Throw IllegalStateException instead Fixes https://issues.oss-fuzz.com/issues/476184825 --- .../poi/xslf/usermodel/XSLFDiagram.java | 4 ++++ ...imized-POIXSLFFuzzer-6071540680032256.pptx | Bin 0 -> 25802 bytes test-data/spreadsheet/stress.xls | Bin 76800 -> 77312 bytes 3 files changed, 4 insertions(+) create mode 100644 test-data/slideshow/clusterfuzz-testcase-minimized-POIXSLFFuzzer-6071540680032256.pptx diff --git a/poi-ooxml/src/main/java/org/apache/poi/xslf/usermodel/XSLFDiagram.java b/poi-ooxml/src/main/java/org/apache/poi/xslf/usermodel/XSLFDiagram.java index 6c89bc8b7f..895745711c 100644 --- a/poi-ooxml/src/main/java/org/apache/poi/xslf/usermodel/XSLFDiagram.java +++ b/poi-ooxml/src/main/java/org/apache/poi/xslf/usermodel/XSLFDiagram.java @@ -181,6 +181,10 @@ public class XSLFDiagram extends XSLFGraphicFrame { textShapeCT.setNvSpPr((CTShapeNonVisual) nonVisualCt.copy()); textShapeCT.getNvSpPr().getCNvSpPr().setTxBox(true); + if (msShapeCt.getSpPr() == null || msShapeCt.getSpPr().getXfrm() == null || msShapeCt.getTxXfrm() == null) { + throw new IllegalStateException("Invalid content in diagram, cannot extract text"); + } + textShapeProps.setXfrm(msShapeCt.getTxXfrm()); int shapeRotation = msShapeCt.getSpPr().getXfrm().getRot(); int textRotation = msShapeCt.getTxXfrm().getRot(); diff --git a/test-data/slideshow/clusterfuzz-testcase-minimized-POIXSLFFuzzer-6071540680032256.pptx b/test-data/slideshow/clusterfuzz-testcase-minimized-POIXSLFFuzzer-6071540680032256.pptx new file mode 100644 index 0000000000000000000000000000000000000000..1d8d49a2b9c357260a30e5f77b3aa28d334fc179 GIT binary patch literal 25802 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 F{TDkj5kmj~ literal 0 HcmV?d00001 diff --git a/test-data/spreadsheet/stress.xls b/test-data/spreadsheet/stress.xls index e34a6c478ca752cd9b695543bcf39bbfc92e0865..7eca50c81b28cc0c0795e8ffbd632244d30289d2 100644 GIT binary patch delta 3054 zcmZ9Oe@xV69LJx}ad*J|;CpxnD0j$#8YrX)cqpKviHeDep@9f-qN6+EV0Jdv)?&4` z)?C9bd8#dI^Uqw)v3adIS80@JmiEhxjLL$3DVqJzRQf#6eLQ@=+_(?V`(DrM^Lf7a z<)HVxv3JX_0SXQBg^8@dDr6?(T5UJjQB5kNZ0U+r4dFq417S*c%9W zw+H;~yZoJn-Zpv$-z4NP<$=$n>gaIgR{1ZLqgV^yFrkp=ff;Ap=As#5o2dS_x{;_mmpXsrPb z0bdVr_=pjIp|0dk>#uE5MZvcg9u*T(!hkMqFjZS029L;g!p`WcW(eRlv`n7fBu*c7CBXrMcAOduI)k0y zgBF+#AMkMt6u=<&Sh0M_SBvry4~ue=zah#HKWzo~qEop27`8XF1eS>pqdYHOUX-0C zb)r=JXzoO2z}HT3uMOPrF|WiDwzNv80k^Lke2H;vHDxCz_&IoYHchEKbGZB+I+P@--h$fik$jT^hda-|#9? zhIxl5-}0A5xyVn5@*N-7kR0Lp4lLjERtJVZ@I9jZ$ln&_QuLAo-Za2Zyw8ctpZQTy zM){Z%cZ_kb3(GIOL6l#4p9^36jUN@|cRnV{AKaCO(l}0sD3FJ^imPMz zn^%B`5O?I=d$Ld-_!_Z=3R|dS@0aYKd|Y(7&OPZ+p#4QV=f!sN&FL^(`24X9z*?w%MB~ZAS!XXSRj1(?WtV?v(rP695c4>@_=1zmx44RqJD$<^DW3NOC zmti=QUFA33cyA<8xSYsh4~EGUK0sm6gV)7E;fh#@mrmTkD|Ay;%c-oyRx50^jun3- zGMJ6nmDKDqHq-1BuA(qA3nxgSaJ6Dxt+Uoht43^%!q({6HIj7@yM~(W$7Wh8g%46V zBqo?b;abJIR%fl1RwuEw3R|mV*Gbkz>^f?;ZaPkoM&Wu2pTMv^ox%-@b%V}YC#@O8 z)+ubAj@>BPsl;xiW_QE{(CpWHtN_dlJye1g_^Z^ae^EQn<#u9!}eSXw<^}H zI%~7E&LFl~VViZV__r&A%_O#knx*961hXi7gu?P1=xo1_!dAuFs*CD`yYz6v+@y02Yv^13{5@`gOHCGC4< g{y_h8!w|_ax_ECMT!#qXoe$3#=6a$x^TC|(KRhueSpWb4 delta 2384 zcmZ9LYiv_x7{}kIYr9+9(_OoZWp`wZMckA*%3#w?KtNVuY;(+kNOXz27$soLk|lh|o|+5JL$SLgG4l~=uUCv?_z!0~3RQj3OL z+=DH{``gRyp}LN=&{)T_juon2sZeca5b{I)odv@uI=4X5WH3#a_b8VFdU-;Nx^rqK z2I^ z4%%Q4`nv7mAv-(;;WwO60-ko@R#5H0@6afOobXgEtftdUm>Y2LKsXo=M{LFk@=enh z!6~154`WEN3v@4cYz?iXW%AQ^lw(df9auT>+Jy z#Tv4}2)44E!x!fV;!J^f9rzH3qJdGCQM@ugkYEZV>cB^s=g|vQEFWVt$?Pe)OaZqJ ze1d(^z%iEdI5I!rF$D}A_!Pm=3x1Z*u##kU!D|X6>A>gsTr}_s%LN>mA4oO@Qgq-8 zyc7*gvwVq}UZ{XE40`EH{tA0ozQzHTalF7XfsjOU5lfTE`3>%5`4$f|{0>K0F5yj< z@56b?@RkjJz|mAX{1K;Ee!`+OO8ktiEWhAuESGUKjXt}AQ!JBMlumLLgDk&d56f>j zKoa;}9+(pSz+BV!-=#{FP2c~SCt!)bwm-zXB33LWIh%5QHn+rEE(IGisP!L#_X&K7;grDp z1s)|BxGiv*X=<5eszOiwE8Yqzh;ZwF0v`}ql1Xq{V5PuDf`K~%mz$=RTc!efDk9#1 z6by1JIrR^5g}`x!Ah1ecY!*$~1gi`U7+~lVxJlsC z1OpiYH=Cw5Tc#THRHk?vq~Kj{%@Vjp;8lj%0viST@@VQVfla2VCd*W_p7M*gSqi$S zz*r#gae=Qh%n{fk@H9{53fyX%+G?3<)l+%mZIyzYd}_@X_=Lc93=0Id3EZ6z9f3lD z+e}m2EK}R{RFQbM&rB6i>q3D~&P*}9Ti}i;4DT+0Q}FgesEl!yDOF8vD)+$o6bu$a p3N{skEAGtY+LL|zCLok&PsQG1xB-W7*J60tc0DV6doeg;{s#uD)tmqT