From 0ec4434f599d1d34922ee49ff139d9a5d28f3fda Mon Sep 17 00:00:00 2001 From: Dominik Stadler Date: Tue, 6 Jan 2026 23:50:13 +0100 Subject: [PATCH] Avoid NPE with broken file --- .../apache/poi/hslf/usermodel/HSLFShape.java | 10 ++++++---- .../poi/hslf/usermodel/HSLFTextParagraph.java | 3 +++ .../apache/poi/hslf/dev/TestPPTXMLDump.java | 1 + .../poi/hslf/dev/TestSlideShowDumper.java | 1 + ...f557c0a46bcb0068b1c3e15589dac383307bc8.ppt | Bin 0 -> 44032 bytes test-data/spreadsheet/stress.xls | Bin 73216 -> 73728 bytes 6 files changed, 11 insertions(+), 4 deletions(-) create mode 100644 test-data/slideshow/60f557c0a46bcb0068b1c3e15589dac383307bc8.ppt diff --git a/poi-scratchpad/src/main/java/org/apache/poi/hslf/usermodel/HSLFShape.java b/poi-scratchpad/src/main/java/org/apache/poi/hslf/usermodel/HSLFShape.java index 87fa7c21fb..b234a80833 100644 --- a/poi-scratchpad/src/main/java/org/apache/poi/hslf/usermodel/HSLFShape.java +++ b/poi-scratchpad/src/main/java/org/apache/poi/hslf/usermodel/HSLFShape.java @@ -408,11 +408,13 @@ public abstract class HSLFShape implements Shape { if (fSchemeIndex && sheet != null) { //red is the index to the color scheme ColorSchemeAtom ca = sheet.getColorScheme(); - int schemeColor = ca.getColor(ecr.getSchemeIndex()); + if (ca != null) { + int schemeColor = ca.getColor(ecr.getSchemeIndex()); - rgb[0] = (schemeColor >> 0) & 0xFF; - rgb[1] = (schemeColor >> 8) & 0xFF; - rgb[2] = (schemeColor >> 16) & 0xFF; + rgb[0] = (schemeColor >> 0) & 0xFF; + rgb[1] = (schemeColor >> 8) & 0xFF; + rgb[2] = (schemeColor >> 16) & 0xFF; + } } else if (fPaletteIndex) { //TODO } else if (fPaletteRGB) { diff --git a/poi-scratchpad/src/main/java/org/apache/poi/hslf/usermodel/HSLFTextParagraph.java b/poi-scratchpad/src/main/java/org/apache/poi/hslf/usermodel/HSLFTextParagraph.java index 4e5e3280d2..d7b4b3cb71 100644 --- a/poi-scratchpad/src/main/java/org/apache/poi/hslf/usermodel/HSLFTextParagraph.java +++ b/poi-scratchpad/src/main/java/org/apache/poi/hslf/usermodel/HSLFTextParagraph.java @@ -1665,6 +1665,9 @@ public final class HSLFTextParagraph implements TextParagraph LOCAL_EXCLUDED = new HashSet<>(); diff --git a/test-data/slideshow/60f557c0a46bcb0068b1c3e15589dac383307bc8.ppt b/test-data/slideshow/60f557c0a46bcb0068b1c3e15589dac383307bc8.ppt new file mode 100644 index 0000000000000000000000000000000000000000..3d8459400cc65a2c48bc6c16eda42c1c207fc9c6 GIT binary patch literal 44032 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 J|iQ+ZBz98?+ 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 G)4l=7#nS@- literal 0 HcmV?d00001 diff --git a/test-data/spreadsheet/stress.xls b/test-data/spreadsheet/stress.xls index a3a5a5694a0e38ee39d3cd4014b730b0132349d5..40c8ad9c04e990176b345cc026585515c252df22 100644 GIT binary patch delta 3556 zcmZ9Odr(wW9LLXDc9-S3tcz~4GHuE@>S8YPSXPiAUx=u{z7^4BT|q~I5t_`gfiawE z)EuW9-oI)pE2+$|HAqvlcbSzHz0BTkGb>Xxd2GLP`0e7k>~PPX@BQA-_j~sq&eCyQ z-Em62*Ou}C!Jjljb{(EOGx?Sy0j4C91zUolmbUfHO|3gf8mYc4ZBO2<@x~L97B;4o zm8#4cVb9W|>8lF}Y2CPfZK$=e`R-W-wsraW_Mk10S5P0Ux7i8`>vMv+p`85uLdV)b zFt;!_*JiH|7T(^{(l&*Vd4Z;;<~GabP++Yk*u1fMv!ylI7}^xFtlQkY$w3blpx z^%~9O$)uA^fb3+bHam-uX_Li$s~B@I4m(AA9R_j4~eDZH|!1C6(q z=@Q3OHBl4Y)UmmSXo&8f39+lRL`$;GW9K21W{2a~H|)^pRB6N?UVW)g({3V0GeIAnX<+s^5}YuO@tmBeL#LB6-a_O#qr7(F zq&EYdlmYi6(8YmI#AY`abaCJy0$oucaS1#Z=M7;Ax4?5lLAd{DLpKKwBhVcKx&@$H z0D3s^Ni68$cbt!59?ml&&lBT$IIm*V)lNJd_!J_%0?;cw5-$f%MW8nZ^l~7qCH_df zoHrk5K7r>G9*GZlaR1SUz8KIa+_8@X3$UP{0}sSz?2$x2K|e28f(89Co}cqzq4R=% z&g%vOEJGE!Dj5chQrf_Pbv8()U?OBYKRyZzJOvhJCef2PmJ4f<_$hlA&bhV@{zj6< zR=0+)?(XaRRr;sFz!oR7o5(ZLioxmhS*df-N)JjsaC}ZW56452ZpccXm-67)Bdr-S z)5FrXA+zHJygHs=4SND-#S^xC55u{WK#nJIBm-V*evaL~iG-!IoN*BtN05;qFcJht zg1}&HP2@$XbeQ$19X309k&z@Yk_1MQz+hX7iS$W5oN)#iFCimEV5A6)6oHY-8Am0{ z2W*0Ht5QE4UwepJ>FZtDaD1c72gf(NI;ow$)peZO zli$XeNf5J7MY9Y$fie<_M54cY`f^nCJ=zta7W$5Cp>X}XawQv1%UdYDzgJDCfI-gE zf^oRzcU;oL`Z6&pU5x3S?9xtk6Baz7hB-KV2g{byLo z%J2Mhd5(@|&in$!>`@VBCt>T(hL3}-%jn8v+q8*%DR%;go|AhR?kl`<7UC}G==7rV zDB1*^O@YhdxUbQhgMeiTG*kZ#inCGN3Sz^zDCP>(Tm?0cQ@=xRp5V<>c-h`+BHyDo zAHzmigC9^VKygMQH24ukyFj%osD+&R6M72;Z=u5L;NG9n>%g!>5T^eH#W^URV-0>q zu}Gj6DX7Jq`Wt$S1#hv!JC}QZNAFw=t4o3g7f>ugaVHc1K=F=Iv9C9YKCCLbh-#^j zRjSA;<5_>Aw+yj+QUQAj#XC_v24cfsD9#h8^AuF}L~iy*|O~Q+WN{t3j_H!wx~1UW?)i6wk2+@hGkos4ErJT29rW zw^s1hD!i+>Hvzq?Fs#l94H8kTLvbe)lTciZVy}^IDoRFijS#g)5f$K3Dd-JEqtbzz zieh~sbu!4B=c6R0CD8TQUn;CAdcZ_vus6RA=5O{B@XnrY=H g>e|m!={9w`+%b_}p}Xa~GU$D(rqsS08B`nhKL~4gQ2+n{ delta 2878 zcmZ9N3v5$W7{|}owd>k-l(83322OzlD%nt8qf9p5Oy=05YbP5ph?&Fy8a0uSWea49 z5saFfa$<}ziV9O<&H@#Ah;I;4QBe`_t%wMSBF}a8JE#AxyWP#sm+yD~=l?(F_O!R{ zfVFL}^~s`)jRJoIg?Oy1WSnboW0N9IG5e9__uT)`iq)$gY!?H?!i&Z_*G5~lU5EkU ztc-xLY5WBRB&9JG}HZS&d{TEZKZEnD(mipV&DjU&_dw!FP-?SLNc8T^Wl}l^yp8O`8 zI&Je37E`BfCSqcpw&4#dWI@1&9gjIY_I<9TDxVK7Zy1iAgxX3&&>TNu}WgP0K&NQh9Y4x5E5qpR7dE6T+ri6EvNu90L`$7-UWZECzGxNyOzHIZl;#WxXoz$#!Dh`*I%_*9Z8ZhVcir$x1iThqA!Rs*hxaDhK5nD?Pf& zLL)PKVzF57|Kl9k6Db%>hbclfy2V0=;4Lh^6JxbO!^#@@BSL_R={S4^o?xi3G}V(QuB^O zQV7Xe2aWN42Urw`-0kOItRi92hpP8jjn|Lx1hnH}Q0e60lYqAYu2t|9;O&5082Y{k zoM4KYkQAkU6!OFm&`yLwOu7CDI0?|3&hRI|$$$ZdzMlc7#36TTS5uOrigna4&=$j> zQ@Q>MI2G`Og1-U!0PQZ0`WISq`FsK~FuHAsu zfNK?u0@eU-Vd(1ttTjc|CPn#mR18`_3}VWamGM_Epf`&lzX#*5PQU;|p9L^ziV7x0 z)$6DfXzO9nsa&mqcLSbK&<3~&(4NgvselcpsD`AdMjd5`wh;zP*ub3zxEOGQf)2nX zfRSuk>2m@uHAO8=ifYnP>CiUyM&+=p3vgL)l!6(6%i}N-$)R%EHJFN1TvLQ7Wj9f9 v^So49<)JJY^pGp<;DUnHGg?oQQDDuMZ63Nr8|1^oXuV}+M&$Z1N=^A6#O*Ni