From b2d572c8bb456d777c6efb77fbb98492ff176cb5 Mon Sep 17 00:00:00 2001 From: jenasnic Date: Mon, 18 Sep 2023 10:33:33 +0200 Subject: [PATCH] Fix missing font index with some XLS files (#3734) * Fix missing font index with some XLS files * Add test case * Improve Test --------- Co-authored-by: JC Co-authored-by: jenasnic --- src/PhpSpreadsheet/Reader/Xls.php | 4 ++- .../Reader/Xls/XlsBugPr3734Test.php | 23 ++++++++++++++++++ tests/data/Reader/XLS/bug-pr-3734.xls | Bin 0 -> 14849 bytes 3 files changed, 26 insertions(+), 1 deletion(-) create mode 100644 tests/PhpSpreadsheetTests/Reader/Xls/XlsBugPr3734Test.php create mode 100644 tests/data/Reader/XLS/bug-pr-3734.xls diff --git a/src/PhpSpreadsheet/Reader/Xls.php b/src/PhpSpreadsheet/Reader/Xls.php index 6b4be6d90..4b4a8e484 100644 --- a/src/PhpSpreadsheet/Reader/Xls.php +++ b/src/PhpSpreadsheet/Reader/Xls.php @@ -2116,7 +2116,9 @@ class Xls extends BaseReader // check the OpenOffice documentation of the FONT record $fontIndex = self::getUInt2d($recordData, 0) - 1; } - $objStyle->setFont($this->objFonts[$fontIndex]); + if (isset($this->objFonts[$fontIndex])) { + $objStyle->setFont($this->objFonts[$fontIndex]); + } // offset: 2; size: 2; Index to FORMAT record $numberFormatIndex = self::getUInt2d($recordData, 2); diff --git a/tests/PhpSpreadsheetTests/Reader/Xls/XlsBugPr3734Test.php b/tests/PhpSpreadsheetTests/Reader/Xls/XlsBugPr3734Test.php new file mode 100644 index 000000000..85bfbfb76 --- /dev/null +++ b/tests/PhpSpreadsheetTests/Reader/Xls/XlsBugPr3734Test.php @@ -0,0 +1,23 @@ +getActiveSheet(); + self::assertSame('Calibri', $sheet->getStyle('A1')->getFont()->getName()); + $spreadsheet->disconnectWorksheets(); + } +} diff --git a/tests/data/Reader/XLS/bug-pr-3734.xls b/tests/data/Reader/XLS/bug-pr-3734.xls new file mode 100644 index 0000000000000000000000000000000000000000..8fa0e56a3360871d54bf0036446430678911e9b7 GIT binary patch literal 14849 zcmeI2U2I%O6~|}q-uUVH6^#VKjxxT)jNd^8Z-Nt4u4Vq0z+LSkf+G;N}m zq)LKlc`_fBcmO2SK2}0`L`XDkrSif<`bL2!rF<3;N)h525J(_F%>RGp&U)^h*;SCJ zRA9%Ndw0&AduM)gX3m_M@!Pk`x39fYe@`XCK9yE?*1A;IlBe*SQ9?W?vm5;KU@c@8m;*oD}Q$mcz{_aYV%`w-CuR2i`!v4WUJ96%gI ztRW5|4kOkPM-cgqPWWK8z>>OzzpJXD4yuc|UslgSQ+FQ*(PIpewhinBO5KpFI;3y< zdi`?~H}?PG-4y$Qk$(cEUsg}4Gg6PIjQFna{VGVYeA*)3@8-n1 zzth4#hgNt(>O{#^bpgLGw)yC0SV5L+LYu73M^*mf;Q0>)Q#SAa?kDYcJHP+`THy2X z5C%P}2Zp?l#{B5gqhZjCbci%2hi4JOpbS9<0?ZE2MIj8jAk507pmZXq6X~FcCwZMv z=TA+{hCvCEE=VxN9N*QLn%uD~3@VUyLx!nlYU+W>Jr7JxPVL~!oNqYSFpSS=NyGk0B`f<$ENt_A6DZ+({03)1Y8=M|YzP5Jyk*0PqO=}z>Dnd#kOy)vFprQ>_w1J9_ zeu^HTq92G=H~QHoKz$AnTfen_*wrlku%}7ih>ti|_ z8z*wH+ljW*f9ObSfNfho0t>48th zsFDY&UXI6JyiXED*DidYKKr& z9I8rNs!D>Y;!qXgsgue!4HX-wV&haCoQemh;>V$zV{kqyI8_Iy+7_o8!zrq2Vl+{b zgsIvvRU4-2z*IdjRX+^ZH3sHEff;aM2HL zK|dAOoQ7(bP}Ll&S{teYR;@7|)f^qwJUXh`G&P&1=FrqUG&MgBSI>rKx6lkZG(&A@ zda(Ysb<~G6bp$s@>xkaakcVf;<{7eih8&(D56_UFhdTj=XOHjM zWCEubBK9`8svJU`e}-+AVVh;xVHx(Y4EtHQqhVMc5|+BdQg6#rw^=IKA|VT=&-LL$ z_0&D;soO|(8>#Lf)jddcKN2@+4ANdf8d*m=^a>p98a8n_rNW1eJK9_{jKum{5orRg zJ3eJdJeFX@h8eM8Mw&1umh`G&!~-+phZ(hCJ|-}u4$NpPn1UL$l~Y7A&QgVhEU=iE=|&nHd)C#LI-Y_+blFOS#u)Jk&BpADY4E0*sJhOsQwy7=n!>jgt;|=?z@kZ>8X*Ho9 ziWjB{;^j%ztRknU*9+aLwyNz`q2~Q&x#ndldi~AYaOD~Py4H}pzT9X~PWvSCznDku z7v{QI*huVqscJ&~hPO3e)PC@onObIFcasJcxuoSb0g+TXBejS5b{Tk(5`w-8< zXhnK(eH;@4e{&y&Tl;zSk8l0youg+Kr&mNiF7mB%{h~-#k;jCOfE}k7>I-=CM#v>C zzOreSYd5S07f(NVuCZzHOY-uU<$8_QL#oVbhw8=Oo{7G7ds_dvJ-xQ}81kYJOrZ>{ zxT4FV@^CEm@94Au{(VFpm$iak&SKj&Xe9$imXxv4y4i1)gN^Y+H6G z_+85BaB>_Nhx3oqTGHI3pM3`oC#NJ*;e*ynh;*r#x5=&WgzwB@MmVrU?k1hhl#H1LL{Dl8d?g>zX8y<}o6Jh6&*FdivTEtm_mT68DN*f1Fz zCgZ?lJTMtQ3}+?-GbAus2PWGZCL4p{QI4yatfQE$&62fQvJOku!;GON>pXA@z=#0$z{VWDae6myO#PjwRzi@ks$R z1zmP0<1U9T+E`^~kjcq9neXyf zp?fSfV8eDhEZrWKZa)iMM#Hj6SPD%R6&=fSLTq)OSb!^FDW(@m;=tGwheo;JjQxU* z!a>(WDKt^c88#K4R7=5+LXXR!Y!(!HC6OdT;gUsA79Y6-e?J@0Q-}vTLARg(=AZw* zaK7~IZ{*e1`(Ar@60(;NX)5`gJ1m^fW)SJHpFpI;`wSwh@fAcmyDuWLgx@3c2Hfdn z$2OCYZYQVzcl5&9%a^WPdg5y1;In7XJuPKk&yLIglSSK@$khp*7U;A