From fea0e34e90d2d8826a95958326ee5c59ccec47ec Mon Sep 17 00:00:00 2001 From: Georgiy Date: Sun, 3 Oct 2021 19:29:23 +0300 Subject: [PATCH] fix #1114 issue (#2308) * fix #1114 issues * fixed code style * update for all version * add test for bag 1114 * remove comment Co-authored-by: georgio --- src/PhpSpreadsheet/Reader/Xls.php | 10 ++++------ .../PhpSpreadsheetTests/Reader/Xls/XlsTest.php | 9 +++++++++ tests/data/Reader/XLS/bug1114.xls | Bin 0 -> 27136 bytes 3 files changed, 13 insertions(+), 6 deletions(-) create mode 100644 tests/data/Reader/XLS/bug1114.xls diff --git a/src/PhpSpreadsheet/Reader/Xls.php b/src/PhpSpreadsheet/Reader/Xls.php index 38254718..13af9688 100644 --- a/src/PhpSpreadsheet/Reader/Xls.php +++ b/src/PhpSpreadsheet/Reader/Xls.php @@ -3749,12 +3749,10 @@ class Xls extends BaseReader } else { $textRun = $richText->createTextRun($text); if (isset($fmtRuns[$i - 1])) { - if ($fmtRuns[$i - 1]['fontIndex'] < 4) { - $fontIndex = $fmtRuns[$i - 1]['fontIndex']; - } else { - // this has to do with that index 4 is omitted in all BIFF versions for some strange reason - // check the OpenOffice documentation of the FONT record - $fontIndex = $fmtRuns[$i - 1]['fontIndex'] - 1; + $fontIndex = $fmtRuns[$i - 1]['fontIndex']; + + if (array_key_exists($fontIndex, $this->objFonts) === false) { + $fontIndex = count($this->objFonts) - 1; } $textRun->setFont(clone $this->objFonts[$fontIndex]); } diff --git a/tests/PhpSpreadsheetTests/Reader/Xls/XlsTest.php b/tests/PhpSpreadsheetTests/Reader/Xls/XlsTest.php index 94257694..2cd14a87 100644 --- a/tests/PhpSpreadsheetTests/Reader/Xls/XlsTest.php +++ b/tests/PhpSpreadsheetTests/Reader/Xls/XlsTest.php @@ -121,4 +121,13 @@ class XlsTest extends AbstractFunctional self::assertSame('Ładowność', $sheet->getCell('I1')->getValue()); $spreadsheet->disconnectWorksheets(); } + + public function testLoadXlsBug1114(): void + { + $filename = 'tests/data/Reader/XLS/bug1114.xls'; + $spreadsheet = \PhpOffice\PhpSpreadsheet\IOFactory::load($filename); + $sheet = $spreadsheet->getActiveSheet(); + self::assertSame(1148140800.0, $sheet->getCell('B2')->getValue()); + $spreadsheet->disconnectWorksheets(); + } } diff --git a/tests/data/Reader/XLS/bug1114.xls b/tests/data/Reader/XLS/bug1114.xls new file mode 100644 index 0000000000000000000000000000000000000000..ae12a11e44c415e4f63e6ab0a7790e0f078fde63 GIT binary patch literal 27136 zcmeHQd30RWdB2huY#?CFW^7}Rjcv?gV@Z}50@&JY3v5e~gl*Pgq^LC_kg)F|AsZovv{_nbX?jw+{1KAUG%Y=+r02A0&LOD3-~HZQ-e_b7+Vq^J zjL)5Uzk9#CecS!+eNWFn`SCHY-v8|EU#N=D0yRm!H8x#M_44a*-DvO(r5bR}ytl^2 z#+coNgv<9n|A#m*eHsKgb&9$s_QS(|Z~&K+m1>Y2&s*45+pX?!d7g8n{N&BQg( z;==K3^i`eOQNJEkN_|3qFVx>h;k!qSAAk>awD_My`Am`4QOz#j=2QFCU3c9D*OpRE`;h?`*MziRC*(DuE;4RXN2^yiqHlGW>KzJ#Qmo+?H5p8) zQ%}|D-^nLJy+hqsFV#&$QYvvxy?R|;jLPbb9@bV<-n3%?8#KXh zqpfLbZ{2iQ#eur@_+GE({RW1t-iPZWkxoSVtx_}IRIwPP#e`lqCvt=3#9+{tFXu{y zQPgkCCxdN?OgWgQ)P`~{nM-7YBb4eb_Y-Xu)RxZ9r zn>t$BJ9^>`6}YhiH&x)36}Z{p4P9M*etRLd?S;5$PPG4QB8Qn3a{1g~AzvOgrCpuf z@l8Q;Fz6c{4&u3de28FaST|alDrYkB;e4T#%4gCcWpYVX(ycAq;sfPEA;=AkN|VV` zsuC85gMoA+6EEj<$H~PLP~}VUVE4cf1Qf&ziBhnzDqXUSvUENdc6nA+B0H``E*Y<= zQGJlZi9!j3%p7_uw%z=$ppZ$7&ac{gI+qM~S7Av@ydj=Vq;mt9++aSH&g}|{rEHKZ z6=PmIE%C;9AxH*6wwz0sig`2!!A5x75^sv@0S}Zji9$9}*cp_H!9Xcr@TJ-kUl~uP zivxv#{7Mu?2Zr+LfuM+4=0}2Lw9n=^#+A3hDlGDM?5=V~kXFdP(8X*dLMJXI_3rkGC+B!<(aLkFMY>lsoqdnc#Kt5B> z<{GhLXm2jX4RIJwG7VEG?wlPdX^dy!{?jNMW#P$@!lw8DSC*ha`_$#pURTER&>lVG zM26Lk8A`9Pu~4s)K_R^hbnp?;fvpN9j=Bxe5~EKjshEt>Ba}3q6dCVY>%%!1qrD*u zR>Wy6qv;@%WT|o7VQE9WSW5I~f*kl=ECwZQU*o6L&EM5g< zBr%>N>}_Sdn1$zpOyLZ(=_D@Tued0axMJYV@kF5?vg2}yQsbqUfRchM+KL95VhnmMihIJtoz@OU{!EhIJToABU7Dj{J=@P<(!eCJJC{GJT z;&#u7wj0t;)Ur3PR?G{LSRMi%KU(9&^=K>Uis@`QW4xNCSSc}?S!=k^ zAXLhfi*TG~3Dbnl@ob)}Gq@R~O8MbJp3zsST#Pg~AyvF>(+U23LtmrU4}{&?2GEby zrN(NRP1Q12R?BRzmbt20=4#`D(YqE_$Wrke#-*{)DTkC9&w#RlJR+_Fc?KnuQsbOC zsfetk*bJq++gmP-$3`aCu)#uNcqkJLBAn<)U^7H(HlrO+f~eW}f$@bfg8|GAUdsq| zJdIWkxRzvPON|KaOF=GQMtGAbC7=Q1QOQKnx+SbmI=*(H=P=^@fl=fCG||eCD4(+P ziIhWo;I{%la5GAy>sM166pU9IKhr9WpJ|oG&$LS8XIiE4Ggo_@w!J4ZBZ*N4xrjVQ zgJeSuG>tXTG}S<}vId%F<3TVHdXP}h5u9hr$sh@{rrqPp)52D42a1q&Fp$AQoJo|S zg;0T@f~2=CEJ~+Ry&L3uS!mR{x2CuyL2W1y6iUc~q;5JWnw3=3V@bBXnw`;^euLEr zlIXpdGUOgdL^D056Pt?r5}JsnagpoR(1?zUew(IhBWv``SL;nALO)dDA!|An@8l9a z6eJK8HCPwpWm>n|?PXT2?kvQkbQa=eIt%eKS6AzOjfv9HI~V5>>`{VJelRGd$^~v% z^zxF`F|1h~HEB~k-;dB6S_7it0yjki34~aBX=jXY)@V(QD2xXKsq}y>SH%%7>pCDC z94Zy9OW`2G_*Jh%#@Xve`~q+B(q-Y+h?RVXT2J6J)Mok&wV6IcZKlsqn`zf6j6i2r zSDh+_PIamjHd&?X#10x;-XfO?y*a?FO^}2>4<##)KYblrx;MA zFr*U#vwBq!AX1QWv(t!{Z%OP%9G2}HN|d%>7gTBu`Vu>XoN=mA;){X=HaOCpJ)($` zbV+;>(wJpAO4A!!#338%cER$7z@Cyt8*0xFv<$$>CI&{^;meKR<6+ue9*T2pPUt*ni#xi+#@wUPOe!9+2fzv@p!c+F5JV6YKm$<7rq?3sFP8Qpo@Z@4YQs`&zc*m^{|o+19cRUc48FGT0yoh1kZf zSo-O~fHR-AXj9$i@rj}~HE^wBoYN@JVLyMt_hzFZiL^)7E&zN2pXRP{mCukyH$ zmQ>fO7L~(QLJg`w4eQ*rD&aocPIWfu&hjW@svR^16;plqO`}!{^f|OrL|z)-CH(fI zj8_Hx_T%?VnO8Fko40X12Ry(YajILghaTSjkJql~pU{}}Re$SH$12et) z75hqps-Rn!K61L1lGn@lJ}8eY>Qmppx*~Ij^ZIn;)vJe3Atm)7je;8S59t<#k-j0(yhKc| zp&o^u(M+HskRcQgN3{ub#76n36jX>b@|>DXtRn1#_1Q-jH7Fq0TeDiB?o*4ABc>Nq z6d27cA1Zw{qnb$NIW{^884Y`+vJ}uZ6<5?r#@vJXQlzB!O(cc~1rqqzgj|{#6`$fg zv}18H>_;7O9A(sLP|e}&qVA%WIr@B~ve6NVv!I0E-Zf0D8AgKSRPJ5R%}MT^&+Xl7 zb#&|^RdGQg=@Ph4ZA-w^o%<12W;jAl(g|?(Sr~8u3yJWQ9O;Mt%R(SFNgYXsTuOlU zP3`=s!*r!N^i>@*F%PP#05OY9pH4jz&bNq6o$jm~zQ=E=O209M91z+vRF5h6?dg$0F?uIKSS6MoV6qJdI^!8$($l>Kfr$*+P6__F< z<7fuiP=w3CI>s-|=QxZj5oVkDk>O%KT-T@$;h1+JRONz^4#6`gqueHjy_x(=gPKN_o)q{z8L zkBtkMn2g~EN9rOcqlu0aH*vJtn=a^*tbQp{&V`zi?ptew6 zT&j)JswQ8zpvsIWKf`Sk`^ZRreI{33R9eQ!8OPMCUm*PwsS8iLbt4t)>($jre}(i4 z(vy?w)l*3SR6qUj8tvRg6;ah-&>2$~B8q9pFBP#IvX6|b#Weg0k$GaIoQxBdQP1sQ z3*!$_C;Ac>+zE>*Hsf!`hvW2r;+44a_<=ALw*A~&}bYmsS{?j-7}w}MMFEUx_}@SO_pyBMkKxanl$)?Xu=Lq}%Sq$KV~oP_CV zCpLmP{NqfeH_BZcQ3ibBIO*~@51P5S6w>yEnDdd^yR`9Fu6B)9nzfDGP*rn~GAqhY z`s9qx2V$M*0%7(9Z#NSzdX$$RpD|Jr_qPS@Qm;jmOk8g4Vgz)IE{vYZf+Nn)kL|ee zqm{?-tRdSgLC08!i;1*Jo?n30=wo>8+`hk9I+wc%?NA#1T0X2*Il@*@&}}mgH)Uqu zME6d;V|(Nr?ba+3G6&XSR4R+1*b`;WeIMgdN+1{VjFA^TW5fTToPE!0qFA%c3J2N0 zECJ8K{eJ^#J=}i_(h$;Kr0bFX8R>PTuDa=ytotWZC^~Wf~71G!2AoCe!6yfJ`mul3v~auog9iIHY43#%bK*8K)P6g3#cE(Nul6i;t<5 zmfaLD1xQh{e@0Tf(H4IxWHAgkyH#OL8c%yz=MTXX$B7>FLY0?umxP|-GW2dn&T=tS z&V89aMHx@O5oMwTuW98Jr&GxnGdtIMt$ZG%Gap0ZNzBPprXOiVGhW#! zYGZZ2rO;CuwdMYXp5Azdi6V&T8s&RIF#_j_oL3}6X&?=HugRk*dPt5ahCfhQf&8_& zqBkq*kX*uG5!Z-T1Gd1i8U^5d=+W5%^Qf%6ZoxN$O0L8ioKG|(&xo@FvDmWENM+4; zep*Jc8V9b8+E5x%&m5?U=lJhNDZalm1}ibsq1R<2BaWD>!XS9WU8rnz$P>qLIwkSa zW`&(tTGFoJ4ON(2r|V%a#=DE$sOSaDZ?mNndO1ZB>2!mNE|Dt|OPM%A<}qTRjAdIu zIwLJ-_SIq}X^C!;+99z}7^DOiSo7@F9W>-^E8Rv=g4`mFS6mc z*(}Qf(uo}BWMgUr%Jble*c#_K^loDWCK`SK_~h54IkoZ*0IGI>^MbxUy)#SJlUbC@%yVr1V?IZ|_$ z${y)?#_vhE{4G`UVr}sAUEt>2822Ilu+|anRmH>8`o;E(6YN8JHLu2>sY~0Ny|&G~ z#ENNGTQGmdcrDr%>EC$_L+(&d>3^Lcp>8lZk&{I3_QZA#58r;z!1m0pgY%LD4%1UL zyYp>aI9V-n<#?-Ghv+9~+5%a#Pe!t$1xDXR`{~VO?vxj4*s278wMY5Je$1R&v?j^T zK(Rd2mT*^g?;F5(xzS_%DmnG;B776VRM!ge1Hwr&M>E!H{HMl5t(&I`aubsI9Pc1# z7?_e@(yP1qNDm?V9-}XuH`gQXD$OC0+eZ|&2bPi1#wnv7^ugLYwe^kn>xcHFoZUoT z-Pf*(_87DdCsomk>N-fhnMeyo&h$YtZ_;*xZ=!q5Ce^D3qz926LV99yz54sQ>4!z`VsAvl z;wHGj$v%lUr<^Fp-_70t0nvrZ!eG=(l#MR^=X$XHIBwwGUE?-5?F)2GIYl(LH;>OxtYcEnNV#xipt#r+WPb-Nz9`y+FO>Bi_7&_ zkcz>99}Ei)zbJGA!rvMQmE;(s+SKDUvV&d@=QU_;ETuQ)u!-sYx!Ac)ZnQO86Q4hl(41^@K9|cd+b}mle1?iT@t%}9bD|>o z2i?XR&5h#{%H^3PIkA(Kj*J(}bMr8EzX|ka%TR=Op>i5Em+dM29F2-9LSJkYmZNk1 zM%9{rQ66$J-d2ny7T%Vi#N=r#6VS>A&4mO~zX*fl_}Dj%#peY5hd(w3o7Lwc`e2UI z-D*ThY{59q;|Ro2{>rE+U(TJ9?zhIk+-(tKcC)4ln{_LrN6#&Xxs~Po+lf%@c}U+w z`aaUjl_5+UBCJ*nl8X#O7d|@0C8hg&i!-a3drJ132c114X4(7kMYWRpdWp<5GI z!6Cb&w#~>LuQ}YB8ttntry@oo7Gl;;S)r+I#;udtrWMC9=1Ba;Td7%4Q(v8ZS2}28 z-M)sp=LNe$t>PmX(O5;s!$^lC;>`}xaN~s%7#;a3o=2Rrcn$G%ZsSYcW;xgJ+LX#g zo>V)tWbHzIss!D=;Y)NSFF>|@aD*|OqmiDC^!ys+_6WGg#Y^VFnR1DeWh@$bP%i$4 zp7S!};KIhb+^A%AF58xwlape@@}QD?g1{V2Fh}~Qzc#mJ7=_S67b7jUPr%|>I@5&gNqSO_K zE43FiJ$Ok*5j1Huax-Z7c8fmHY&lA)9B6v*&~FhmbMaP=b3wD{7^ONu^LO}t6TiR5 z-=53^%?iA}<^!PlHGZd~>>u!_1yfP>ApR!dyZGIUzlnVSe@^}x{0YGep!pFV9sXC) z{04s$F%xCC;Q9Y2aeWKk<8uqf;eRj;CGYo{;ok3qIUP|i@5~`Brm8=;UB;J(@Vz}p z;ya0#h4A_qT|NW+dh^lW{B%oy_qw>wKV9dap}()!Ig9JTB=B}G&`Xn#!xNr(ZOQTS zbAzV4QGYK%TPgkd)w)x?>!rAs&#%{==3U>f7GfMpB>t<%`-XPZ@>+9&MWG@FYy*xsx59j90rXY;bsrnxYmR z;qX*&GINZ>M}eDfEp&K>nxWE74j%(Pzp}#NnRw6A!etI0tBzIs&T{xTJURQy84e$> zj#u-~argvvVx;~oMB{Ir>dH@2P@*x1XXE`#9j7@w2T$bsTE9y6<#Xeu_FJQocwnij03TY}n`564Blkp|NkV!yB+lZJO`!Mm!1V^Jf#{Ghbev*cwh}}j)kio-l29x>R+TTipcw7Jl5dL?-F%MM1L+-mqyAjQZ+!XkpwX8P-#+E@cMx%+FYh6&h<+TV%T)#ooGYv2C4 zCi>+J?R@*sW8L=Uc@<(Re||h~^2f6qE1uupweW(zd_JVEi;S1=(t2*Kb8iz-mY$s=))cAj)=b8sqT!- z_bzo;L|%8RyCdcIsCy&*eHJ%%{qfwduco6p1Q;fVb_q8^Fp z$D``eh`v6i9*gkrarJmaeov?;BKG{GdNLx9r_@ss{yvSvR$m{UQO`umpHHpoQp2AjX4I_C6p4X(2iah+L4eqk$-UL0ro@LqW&j8bMr$W&$CE3(>Ja2;@R^ z91x>0sdqdOg1Qi$0EF-_L?;3v&YW6HwLC<#fe;FYXbuqmxHLp_fv~EF z=wu-LU1*5r0U?YG(R?8M*=dMkKrxFJ0AVc;%N7DHwCEHdtm9$XBA`VUEe2X_(Gs8~ z7M%)&zu^t*Ed^R?(P=>Vv+1zxbfD8MIs*uQfE|{d33R4K%Yc?yv>b>#cj4JtKxbLB z0%(Or4L}VRH3BtS)CAOI(Mq6|7BvGkTeJ#jl|`$85FdoSuK`+P(ORIj7M%@rwngs; zdcQ^I0G(sexj^SybRN)o7OewXXVH3~^%k`NwOG^&)M`;1P@6^VKpv@L-0YXd>@@y;6R*SlTx-9Aj>bB?uKp(KE z2dKxQUZ7r!`hfZ@x)A6>i?#u6vuHcec8hiZ?Xc(~po=WJ80cb)E&;m4qDz4;wdgV+ zY`DVtT@G})MRB0GMOOe_VNn7oVNpL&zeNK;0~RHLk`@I(fki2xltqI;gBA?|4Ox^1 zN?UX#(3KYL1lnm)1}I}u7AR{`4k%|)9w=|oFwn3?R{>pRQ30r6Q4y$UQ3pwC+LIiSy3^m(AqTXY}LeHPsh zbiYLp06k#Q7l6KC(HDWfXwic}4_fpP&_fnI4D_%?j{rSl(W5|*TJ#vuV-`IQ^teS& z06k&RlR!^e^c2uj7CjC0v_;PVJ!8?cK+jtAC7>@^^c>K07JV7$%NBhF=qnaI5A?i6 zUj_QAMPCE@nnhm+`npBm0Q!bS-vs)mMK1uoV9~dLzGcyiKrdSKZJ=*kbO7jpMK1xp zWYNn&FNdfOzegi}#os0);^m3Z(YRLYe>~?eS{OI*?CEIrC&&^s3FuEPnhf+^AgMb= z>Z&y-ENFQVQAr)5)uU_rH!E!YBv5}3?bX#!MeW%@((4>tec$#v7w88-FCsdvLp*2t zh=tS(kn?A@m4!gk$|<<|b6t;PTV(5*`qh6|g|%0M{-CZs54G1!Si3ExZwJK>HT`j* z@2H@^Af(!i{2zfzMz{s&$GXlNsI#@APWAEqapYp>h5gGF?^Dv4q-Gx&KNVR=knRr~tS@b&bAcuVx)G)I90UtNO5i|xPn z`TxLyx5oG`{!o9s2~(9`z3KD+_Peg38IRvOO`UP-bAPh}dH;fR7!u3ZBeCWtq{&E( zkEl;v_l`uOmw+Pc*TNr*-`9{x{|t!d z_b#6^xdQB=V8->qa8Kb|9UAbOn;(n~d#9O^@se ze_2+`hvQ(|Y?m_R|K-8)QO4%~^}ywOpFdI#^uT8LS7Q7l2U=o5?}uui>PJuN+5hwUnC84L3eh z;BWZU44+ov+&jSqdDMwH=AORLR{LHW_D}nHC;iXW%wqrTnD>Al1Mgjz-r;!Gg#8;C zR2ySu-V|hT55-TV{j<#2KYjUhBt`@DPxR^Z=SLwiI;O8W25BY|{nc?u^y&0j^lP(_ zPC}ZEGzV!e(#c5kkm$=}NDGh_BAtS?2x&3W5~Nd+mLi>obUM-*NM|A~Lt2h>783oF OpMGzc@ZN9D9QZFD;}+il literal 0 HcmV?d00001