Repository navigation
[Payment due @cretadn22] Upgrade xlsx to 0.20.3 to fix security vulnerabilities - #103028
Conversation
|
@cretadn22 Please copy/paste the Reviewer Checklist from here into a new comment on this PR and complete it. If you have the K2 extension, you can simply click: [this button] |
|
The failing Analysis: Evidence
|
Reviewer Checklist
Screenshots/VideosAndroid: HybridAppScreen.Recording.2026-10-06.at.00.28.43.movAndroid: mWeb ChromeScreen.Recording.2026-10-05.at.23.59.25.moviOS: HybridAppScreen.Recording.2026-10-06.at.00.28.21.moviOS: mWeb SafariScreen.Recording.2026-10-06.at.00.00.38.movMacOS: Chrome / SafariScreen.Recording.2026-10-05.at.23.48.01.mov |
|
It seems this test is already failing on main |
|
@MelvinBot Looks good! Could you please merge the latest main? |
|
I didn't merge I can only make code changes when directed by the PR author, an assignee, or an existing co-author. To have me implement this, the PR assignee or author should reply with a request tagging me. @cristipaval, should I merge the latest |
|
🎯 @cretadn22, thanks for reviewing and testing this PR! 🎉 A payment issue will be created for your review once this PR is deployed to production. If payment is not needed (e.g., regression PR review fix etc), react with 👎 to this comment to prevent the payment issue from being created. |
|
@cristipaval Everything looks good. Can you ask Melvin to merge the latest main and update the author checklist? |
…urity Co-authored-by: Cristi Paval <cristipaval@users.noreply.github.com>
|
I merged the latest The test failed because of a problem on I didn't check off the PR Author Checklist, so the |
|
The failing Analysis: The iOS archive built successfully. The job failed afterward, in the Evidence
|
|
✋ This PR was not deployed to staging yet because QA is ongoing. It will be automatically deployed to staging after the next production release. |
|
🚧 cristipaval has triggered a test Expensify/App build. You can view the workflow run here. |
|
🧪🧪 Use the links below to test this adhoc build on Android, iOS, and Web. Happy testing! 🧪🧪
|
|
🚀 Deployed to staging by https://github.com/cristipaval in version: 9.5.4-0 🚀
|
|
This PR failing because of the issue #103328 |
|
🤖 Payment issue created: #103373 |
|
🚀 Deployed to production by https://github.com/puneetlath in version: 9.5.4-3 🚀
Bundle Size Analysis (Sentry): |
Explanation of Change
Upgrades
xlsx(SheetJS) 0.18.5 → 0.20.3. Fixes both open Dependabot alerts: Prototype Pollution (GHSA-4r6h-8v6p-xvw6, fixed in 0.19.3) and ReDoS (GHSA-5pgg-2g8v-p4x9, fixed in 0.20.2).SheetJS stopped publishing to npm after 0.18.5, so the dependency now points at the official SheetJS CDN tarball (their documented install method). 0.20.x bundles its old sub-deps (
adler-32,cfb,codepage,crc-32,frac,ssf,wmf,word), so those drop out of the lockfile.Usage: Only in
ImportSpreadsheet.tsx:144-166, which lazy-loadsxlsxto parse user-uploaded CSV/XLS/XLSX files (XLSX.read+sheet_to_json) for spreadsheet imports: categories, tags (incl. multi-level), members, per diem, workflows, merchant rules, company cards, and personal card transactions.Risk: 0.20.0 changed how date cells are interpreted in UTC.
sheet_to_jsonstill returns dates that are correct in local time by default, so the app's localformat()call is unaffected. Verified locally: an XLSX date cell read with the app's options formats to the same calendar day in UTC−11 through UTC+14, including across DST.Change Log
From the SheetJS CHANGELOG:
Int8Array; CSV export only quotes leadingIDdata-v; SYLK error cellssheet_to_jsonforces UTC for formatted strings; non-compliant XLSX merge cells;densetype; mini/core export map entries#NUM!, Infinity →#DIV/0!sheet_to_jsontype fixdensemodeAI Tests:
npm cisucceeds with the updated lockfile;tsc --noEmitpasses;ImportSpreadsheetTestpasses; ad-hoc check of CSV/XLSX parsing (incl. dates across 7 time zones) passes. Other related Jest suites couldn't load in the sandbox (Node 24 vs required Node 26 ESM support), unrelated to this change.Fixed Issues
$ https://github.com/Expensify/Expensify/issues/688729
PROPOSAL:
Tests
.csv. Verify columns/rows show and import succeeds..xlsxand an.xlsfile (Tags or Members). Verify data shows correctly..xlsxwith a date column (Excel date format). Verify dates show as the correct day, not shifted by one. Repeat with your device set to a UTC− time zone (for example, US Pacific).2026-01-15and01/16/2026. Verify values are kept as-is..xlsx. Verify import succeeds.Offline tests
QA Steps
Same as tests
PR Author Checklist
### Fixed Issuessection aboveTestssectionOffline stepssectionQA stepssectionAvatar, I verified the components usingAvatarare working as expected)StyleUtils.getBackgroundAndBorderStyle(theme.componentBG))npm run compress-svg)Avataris modified, I verified thatAvataris working as expected in all cases)Designlabel and/or tagged@Expensify/designso the design team can review the changes.mainbranch was merged into this PR after a review, I tested again and verified the outcome was still expected according to theTeststeps.Screenshots/Videos
Android: Native
Android: mWeb Chrome
iOS: Native
iOS: mWeb Safari
MacOS: Chrome / Safari