From ffbea71bc21416d487fcc208cbf5c78385717649 Mon Sep 17 00:00:00 2001 From: SheetJS Date: Wed, 5 Apr 2023 13:11:02 -0400 Subject: [PATCH] XLS ExternSheet record (fixes #2907) --- bits/39_xlsbiff.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/bits/39_xlsbiff.js b/bits/39_xlsbiff.js index f4435b3..e1a254d 100644 --- a/bits/39_xlsbiff.js +++ b/bits/39_xlsbiff.js @@ -138,7 +138,7 @@ function parse_FtArray(blob, length/*::, ot*/) { var ft = blob.read_shift(2); blob.l-=2; try { - fts.push(FtTab[ft](blob, tgt - blob.l)); + fts[ft] = FtTab[ft](blob, tgt - blob.l); } catch(e) { blob.l = tgt; return fts; } } if(blob.l != tgt) blob.l = tgt; //throw new Error("bad Object Ft-sequence"); @@ -696,9 +696,11 @@ function parse_Lbl(blob, length, opts) { }; } -/* [MS-XLS] 2.4.106 TODO: verify filename encoding */ +/* [MS-XLS] 2.4.106 TODO: legacy record filename encoding */ function parse_ExternSheet(blob, length, opts) { if(opts.biff < 8) return parse_BIFF5ExternSheet(blob, length, opts); + /* see issue 2907 */ + if(!(opts.biff > 8) && (length == blob[blob.l] + (blob[blob.l+1] == 0x03 ? 1 : 0) + 1)) return parse_BIFF5ExternSheet(blob, length, opts); var o = [], target = blob.l + length, len = blob.read_shift(opts.biff > 8 ? 4 : 2); while(len-- !== 0) o.push(parse_XTI(blob, opts.biff > 8 ? 12 : 6, opts)); // [iSupBook, itabFirst, itabLast];