fix(arborist): audit the non-isolated tree under the linked strategy#9625
Open
manzoorwanijk wants to merge 1 commit into
Open
fix(arborist): audit the non-isolated tree under the linked strategy#9625manzoorwanijk wants to merge 1 commit into
manzoorwanijk wants to merge 1 commit into
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
In continuation of our exploration of using
install-strategy=linkedin the Gutenberg monorepo, whichUnder
install-strategy=linked,npm install --auditreportedfound 0 vulnerabilitieseven with a known-vulnerable package installed, while standalonenpm auditreported it correctly. Only the install-time audit was affected.Why
A linked reify swaps
idealTreefor the isolated tree (createIsolatedTree()) before the quick audit runs, so_submitQuickAudit()audited the isolated tree. That tree cannot be audited: its inventory had a stubquery()that always returned[], and its edges route through symlinkLinks instead of real package nodes. SoAuditReport.prepareBulkData()produced an empty bulk request and the registry was never asked about any installed version. Standalonenpm auditwas unaffected because it audits the regular tree loaded from the lockfile.How
reify.jsstashes the original non-isolated ideal tree in#linkedIdealForAuditduring the linked swap, and_submitQuickAudit()now auditsthis.#linkedIdealForAudit || this.idealTree— the same tree standalonenpm audituses, with a queryable inventory and real package nodes. The_diffTrees()/#reifyPackages()/orphan-sweep block is wrapped intry/finallythat restoresidealTreeand clears the stashed references even if reify throws, so a reused Arborist never audits or diffs a stale isolated tree.isolated-classes.jsdrops the now-unusedIsolatedInventoryclass (its only caller was the rerouted audit path) in favor of a plainMap; thequery()stub returning[]was the silent-empty behavior behind this bug.References
Fixes #9609
Part of #9608