From ab196a744119540e3953f14a5f851ad547e2f687 Mon Sep 17 00:00:00 2001 From: Dominik Stadler Date: Sat, 24 Jan 2026 10:52:41 +0100 Subject: [PATCH] Use log instead of assert when parsing emf-files Assert effectively hides problem in provided input files. --- .../hemf/record/emfplus/HemfPlusHeader.java | 11 ++++++++++- ...60e9fe792eaaf1bba8be90c2b62f057cfff142.emf | Bin 0 -> 21258 bytes test-data/spreadsheet/stress.xls | Bin 77824 -> 77824 bytes 3 files changed, 10 insertions(+), 1 deletion(-) create mode 100644 test-data/slideshow/crash-7b60e9fe792eaaf1bba8be90c2b62f057cfff142.emf diff --git a/poi-scratchpad/src/main/java/org/apache/poi/hemf/record/emfplus/HemfPlusHeader.java b/poi-scratchpad/src/main/java/org/apache/poi/hemf/record/emfplus/HemfPlusHeader.java index 32215fd81e..e293860a59 100644 --- a/poi-scratchpad/src/main/java/org/apache/poi/hemf/record/emfplus/HemfPlusHeader.java +++ b/poi-scratchpad/src/main/java/org/apache/poi/hemf/record/emfplus/HemfPlusHeader.java @@ -24,6 +24,8 @@ import java.io.IOException; import java.util.Map; import java.util.function.Supplier; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; import org.apache.poi.common.usermodel.GenericRecord; import org.apache.poi.hemf.draw.HemfGraphics; import org.apache.poi.hemf.draw.HemfGraphics.EmfRenderState; @@ -38,6 +40,8 @@ import org.apache.poi.util.LittleEndianInputStream; @Internal public class HemfPlusHeader implements HemfPlusRecord { + private static final Logger log = LogManager.getLogger(HemfPlusHeader.class); + /** * The GraphicsVersion enumeration defines versions of operating system graphics that are used to * create EMF+ metafiles. @@ -89,7 +93,12 @@ public class HemfPlusHeader implements HemfPlusRecord { this.flags = flags; version.init(leis); - assert(version.getMetafileSignature() == 0xDBC01 && version.getGraphicsVersion() != null); + if (version.getMetafileSignature() != 0xDBC01) { + log.atWarn().log("Had invalid meta-file signature, expected " + 0xDBC01 + ", had: " + version.getMetafileSignature()); + } + if (version.getGraphicsVersion() == null) { + log.atWarn().log("Encountered empty graphics version in emf file"); + } emfPlusFlags = leis.readUInt(); diff --git a/test-data/slideshow/crash-7b60e9fe792eaaf1bba8be90c2b62f057cfff142.emf b/test-data/slideshow/crash-7b60e9fe792eaaf1bba8be90c2b62f057cfff142.emf new file mode 100644 index 0000000000000000000000000000000000000000..32373a040954652114d808fc87ef43723ea006bd GIT binary patch literal 21258 zcmeI43viXi7035pNPvI>5dvt`3qp8`fRR>f>&*a)3R7eNDWYH?6%{0+5>yK5=oGEg zL8_H14k#!{t0L0!m|B=>Ef#I3Of5z2jCP#Hc5DTFjL)XO|9*FGHrM3l`|^Nb-O0(m z&e^kjUc2}E_THE=W-hS5y1H6W)ybIB4m70FYiAkragi~JG2_oSCT1o*WX!m@F&>J= z+?{XC!4r+yORaCrQ3v_%UTw@}H?}nlV1@t*fZ+zmk}*?AxeE~Q*Jbx>^3xqr! zm;ea5PqM9HZZ@5g?2s<^Wf0dsEE%_hwY6B4=k-puOZT-+nsm85M(TQ-K zPBP2VZOSgISjwt%0}0HvJ;A@uu&WG6Y{MLuzp_7)NQDH^91o5!F(EEOohQ<`0NU;zz4|6R znq%6Z)7EsQEG2R|({mxQQgy7}{Kr9B>b4O0 zRU#gXFO4acGwzd&>ny4rIIaw8rL?WNYWyNVns>Y?+Qcwvdi6OgRJ$KB3h2{VN-lax ztA7xpmr~IqCPpPTYAAvB%;+I`JN;s+m6ubOY})|plZ>SE zaX@mfp=pjmQ)f0KUYJK6l^%dPi(Gw6*~R!q+>@NMByP|D{F!J)F)GNZ8kz z>UH_5_3v7HW8m*|3TymbzS>B=&+zpg`0CNqdk}BFxJR9YWONW+2fRmo=7?wO7qBO( z-qd|0EPa^ywa=KJ>S4!sdo;^S( zeySg-`PC=?<~j$pbX;`jk8Ck5fjku#T})H`D8$8?ttl?nr}w7XT|;(5cum`OnDet$ z75|#|{9JQxJqGON%45N9zS6r+;>~)FD*b=byW1ze^7p)1U+JBXuAI@D{(SM6iu1Eu zliuCAzyEpj)BCmmxgp1U_Ql5$bF`jSx_w9U^q(~jVovJ2m`U#>pGN*-s!h)$l^UY$ z0nKyZ6_M}r@War40@AO64$!_Fk@gj6=5auKi+nM;n`aolOQD$q&E4b`5os@iraLs> zA@3WJ_Du}tRcH>9|1%=(U}&~M!|NCGLPXki7~eC{Y$5+mL|VOedLNhww24TY4^0f3 z-sE~86h%iLqDZ};%7OOeh_teeHGpj6NgxVe*~ThBwy_~1t!zVQaM_0VN8$S@Yy2^= z6?i1#di#U_dtfARAR=vFK5UG{F3uz$Lmp+$^9gW0pjkp*6p?lh@>$JX_mlrD;+*e? zCJxPG$&`gKsdh%-{(*B5b{+;!%COJ@`68`i#)1L?uAbKz^g#i zec%$-xt4X#B!4R6dUDMu)?lUxXeBYj0 z?|p;XpQ973yXIa^%`-2xXM4{6VP$aNM$gF*rRl~yM!k<#z2Ca`xrbBp{!w>l8u|XQ z%>Nv{_LRfi^ErC&A2G*ta<+n*)`}yoS?^(VmS8>7yVIHKN8$a-cYVDd?f1@2(mT$f zn3e7Qh5 zRx(@FCy@(;m&C!fH;g5huirGGT}h9*?Mi+~S-5H&2lz?rQ<^~IFhI|;e4hRt0P$2^ z{AQ-`-X#~$Hg)h6E`Rm%)Hp-os$0miJMqrsuXp-x?-PI3MK=}DJU0O1{|u11X5q>o zvaNZj8J_0tuX{Ly`FvIP*De0yJGTzL!fkln!?o^Med`{>xITZ?{dMaOiTLXyNanhQ z+wi(aq}T2ChsK^&n(Hjlvauz&Z!2Grd|cW%W094W>XKsuSpU!{duLX-sym#YP+oh* zB8*kHQ;A2l;zCV)YKGV{$B!*9eJBYx|5-xzR1U}n9|UAey8z#wrmG!e();uJ{7Akq zh8w~cnlsGBW}qEM_Nj5%OKiO}c~kAo_fP*!th-aHH+B4m>{v2zJhJVP?hY>KHm#6A zC06pLzgr6I*y+WN%s<(v=BFff3BcL0a8-9WN6?P1_U*XvU z?4N5?uj^dX!tv`GU+>52nK-Q8-M(c-&A;aL_hafzeC?6YyW0nzMb`d4p!zB71KQUF zX9JT7hWcvRY;yk6XJX+NfvdLq_O%K04Fd{*AQhR)3#)Pysamf6_ET@uy~AeT75p^S?`?@9;Pt;yn>4XJC~-;&TC+{T_+`U6OY6H+>(|$W2Q+ z6HSz}xP{k}Clt29PUf1vjO zvk2Kp6TNNKm9yym5h1ohy_XFhRoi6f)w_^Z z4E|{Ba3r~o&}XFTE~M#W?k3JToxypXTqZlE*Plw>c;$~JLsGbEYbd121$>?#Q}=nQ zE}k<1@!Xjc@H`8L$>b?qg`N6%Y8>}5Um?x8q|g5e+I{}2i%uUc#9z;CwdRXbA=_WG zaAgDa@mCnv$9%`z=UYmj&sTMS-TLSwzW0-7u3NYbuiJjiPxH={dqD<&)%|sghxq@T zJd?k0nN|bq9+Bqlwg|~#0MH50{1wcOwrEXha9+Omql*bpebv3DGJ8?ZhZ0U$csNZcR1Mce<|MRUyb{<(` z%X*CxCbr0)%7H1sHWa>v{9e}S+tbOk$&YaFdhJQR=zq-D*U*J88zMYdzgFH zJd+&Bn2LpZEw6f0$8YF(q%}Dn@>l08YOm{fM6*rq*xwqCN3!ELICid@7}&AOnxwD4 zx@blw6zin-fLqOZ$hUzkdVfrG$CBRNz7?#u=3{st ze8<33e3t{6YZY!dzQuOGmg73Ux(4aE-3O5|zk!ilIC6>2lpLS=_ z;>nq3QJsi_RF{8e`mQ^R%D=U5{~N>1#Bn~Yv#9!=ABQ}PZq#hT_;f>Oudt7%TC?6# zs0TuX^P6Z5!cPEJ!g)}BP= zdO)x9#{quQ6$7R1G>$h{npymW(|nWQ$KS3qH<%k~DW$BRguBt)OnZN`(3F9r@(q-N zS{b$ZUc)7BVqdmg4i@z(kr|k1~WzDG%eHvf-cJ0T}?r61cAIC4BPhUAO8_F!j9ikGnIl()1FT<{I{x?Zu;gRTKm!{9J=(hzcPTDa(zF5D1O}ltw%pz zCz-f86N}PvR9U#ifYuTE2kgMr*rkAEB7KYlv_6;g1B++s!*nX?NAvW9iv!Ij*FV|s(#GTu3u&KOBVkF{vjR$ literal 0 HcmV?d00001 diff --git a/test-data/spreadsheet/stress.xls b/test-data/spreadsheet/stress.xls index 65a67126ea9a9693a497461d87d78080c4efb231..18508cf9720c87f8aab19a4994f7fae031a43ddb 100644 GIT binary patch delta 3304 zcmZ9OS#Xn86vyw)(l*_`wh1J3p{2A4cA*q#iK$RjPzqF91xt}7X%m}0Qf91-LPy7C zoa!)kq|MWTKK zAJlEPvbQ*6SK-a;;hb5S8*K5F4pt{&#dT?LO%JO$H^8f!WS0?E2gu-sYGrRHSLnl2 z<32A(-v;t|6TarIYL`Spu%R22t%Ek>=c33=}%V+VA#BeUJ;vb7~ET4!>4a%pY z0n2B?h2@BNPUA)Vs2GA`KSq{xX~8!YZ~JtHxBXGLwqLIFtPp+;@*3XBR`$8L7Pl1U zf#o<^Op3*%SWN6jOQy7ZAwsYnW_boJqh!faELn;rOR?ZXU}ay5@wnwOTD~Gnj$+AC zEIEoLS6WVp)_ggO4~qRHSv19>DHct!z!^1bN9a#}ozDLzzeFt*?Qc3+l|0!c(KCgY)cixRIu2pAAHMCX;kbAcCT>Ig zF1NCO#W3nFi*eNbM>}Ve&Q{20X;%o=5nNTsOSG#5=Ma1Z;WdKw1or@RTqig;4q=7U z%uShQo}31td_?BOdv_Lr6ut{2n@`eeggSx^1Umpa^aLA~q{ft_1v1G%y$eXN7p+Eu zc7kIF(+J)|Fryfv(g`}0C`U>Z{KElnaR&7^kzf-DG!wyF2@W94B)E{^K7?5W7sX-p zbTQwh)3S*+Q|pdWXw4zG7+?jvB;F{6k1vr)KuziC&2-&h=tOBez5nM-b1;UvG?k$R3*Ru z`b=)uXT#S{GwkahJkenhZB^VXI;wbf#&P$?W0Rj9CbUc41i;c41i;ffa9nh?e9P|EN%@si`3)rhz3n#$|VP>VwmaL1T?M z+N48u#+m%!IMY;2L$x3FlefxB&8)PGVqV(H>}FP0YD({W`0c`380O`D_C3$<9R6pQ z&hz%p^Y*viap&)D5%lE}b2c=uS@%RsB>ecZ!YiJ#bsceUa~#SL;H|XDTp>iWPl!1b zvsp$@M3&2(c%7d!#YS2o>D$>=y}r0Mo;g76!Y<+^1HD5yM0~^03st{3nC#fXr)5ivWJ^=BV@ojEk)=bti-oO*rd4moiP2WAnVakeYg#35rWlqs zZFw)*4c<(fwq(K5CfU-lHrcY~4J>RoH0^pbQ!v?XXxgZcabn@K#U zh}L`%8|#ujDbv*YGFgz#knWX;Nczp8c9zNF*rp+J9$jG9z}2G}>5TQd9-T#hP_m&(V=;&M!_r4sxE>(ceQ#7WbIjV#Aik5?ATPt{Q> zRmW*^A6>c(ktPc0+pZ78cPJn}gT-lBoUjz zJ=ikDu<+X=AijWw-{1j}IFTEcKDKh;m%Kc_PCsGL`mxLi=HxO}U&a*3;09!-9yE_3-_mH7$&pz66?R2^J?jCK2Ew@qGB z4f)jmq&9K+S@q=8ieJ=4F2AbcVN`xo4a4ZQ%W4ys-&GHnE2@{vA1b4O%AaZy70+Kd zXN5lJRTV0bLC@cS;{kUPl>ew0ulrZUdEGUP+>Vi8p)9wq15WIR)a|3s&586!}Mw&nuf z1DG|6pbv09U==|t4{(7IwIC&Gp^oxnb|C~i*g6#OUckK!1AvPFFL6{p;9?_caZ1z@ z9W@NIOCYEnP1XXy`v5}>3jyl@cM`OU0GAq3OH-oibyN_u^$=WP>u|vP0fS=*76U#2 zIG><30&tlTwJas7K}U_mYy$+l**XevIp8sdqX8cTyv9*u09P1MD^j9X>ZlUTu7sej zgsi224*_muSO(Y#_&PyrEMSun)szyoN=KDrb`=D&RE9j`03S|7l~Pm%;3J7Bg4TGz z)kf6nl&EGMH375DiKsH!*R|a~IrS&jS0-nqx#?eU4Xx|+*lP1sU4`_i