chore(deps): override js-yaml (3.15.0 / 4.2.0) (DoS fixes)#1713
chore(deps): override js-yaml (3.15.0 / 4.2.0) (DoS fixes)#1713cliffhall wants to merge 1 commit into
Conversation
Add version-targeted overrides for the two js-yaml lines in the tree to resolve quadratic-DoS advisories, keeping each major on its own line: - js-yaml 3.x (pulled by @istanbuljs/load-nyc-config via jest coverage) -> 3.15.0 (first 3.x with the fix) - js-yaml 4.x (pulled by @eslint/eslintrc) -> 4.2.0 The 3->4 API differs, so the 3.x consumer is kept on the 3.x line to avoid breaking jest coverage tooling. Resolves Dependabot alerts #134, #133 Part of #1706 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01HiccCEh9mwCfVzE8qYcop1
a5cafaa to
9ef5644
Compare
|
Claude finished @cliffhall's task in 1m 34s —— View job Review: js-yaml security overrides ✅Verified against the GitHub Advisory Database, the resolved lockfile, and the npm registry. This is a clean, correct fix — approve.
Advisories resolvedThe target advisory is GHSA-h67p-54hq-rp68 (Quadratic-complexity DoS in merge-key handling). Confirmed patched ranges from the advisory DB:
Both overrides land exactly on the first patched release. As a bonus, these versions also clear the older prototype-pollution advisory GHSA-mh29-5h37-fv8m (patched 3.14.2 / 4.1.1). Majors stay separated ✔Version-targeted override keys are correct npm syntax, and the resolved tree confirms independence — only two js-yaml instances exist and each stays on its own major: This is the right call — forcing the 3.x consumer onto 4.x would break the Lockfile integrity ✔The Minor note (non-blocking, forward-looking)The VerdictCorrect, minimal, and well-scoped. Resolves the DoS advisories, keeps the majors independent, and nothing is broken. 👍 |
npm does not reliably apply these transitive overrides to an existing lockfile (bare and targeted overrides via install/update leave residual vulnerable copies). This regenerates the lockfile from scratch with version-targeted overrides so every copy of the affected packages resolves to a patched version. Resolves Dependabot alerts: - esbuild #121 (-> 0.28.1) - minimatch #69, #66, #61 (3.x -> 3.1.5) - @babel/core #132 (-> 7.29.7; completes the partial fix from #1712) Also pins js-yaml overrides (3.15.0 / 4.2.0) to prevent regression. Supersedes #1713, #1714, #1715. Part of #1706. Verified: 0 vulnerable copies across all advisories; build + client (535) + cli tests pass; lockfile internally consistent. Claude-Session: https://claude.ai/code/session_01HiccCEh9mwCfVzE8qYcop1 Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
Superseded by #1718, which regenerates the lockfile with version-targeted overrides so every transitive copy is patched (npm wouldn't apply these overrides to the existing lockfile minimally, leaving residual vulnerable copies). js-yaml (#1713) was already resolved on main. See #1718 for the verified ALL-CLEAN result. Part of #1706. |
Summary
Two js-yaml lines exist in the dependency tree, each affected by the quadratic-DoS advisories. This PR adds version-targeted npm overrides so each major stays on its own line and gets its respective patched release:
@istanbuljs/load-nyc-config(used by jest coverage tooling), currently 3.14.2 → 3.15.0 (first 3.x release with the fix).@eslint/eslintrc, currently 4.1.1 → 4.2.0.Why keep the majors separate
The js-yaml 3 → 4 API changed (e.g.
safeLoad/safeDumpwere removed, default schema behavior differs). Forcing the 3.x consumer onto the 4.x line would break jest coverage tooling, so the two lines are pinned independently using version-targeted override keys rather than a single blanket override.Verification
npm ls js-yaml --allafter install:No 3.x below 3.15.0, no 4.x below 4.2.0.
Checks run and passing:
prettier --check .,npm run check-version, clienteslint, clientjest(535 tests, coverage exercises the 3.x line), CLI tests (85 tests), andnpm run build. E2e (Playwright) skipped — requires browser downloads.Resolves Dependabot alerts #134, #133
Part of #1706
🤖 Generated with Claude Code
https://claude.ai/code/session_01HiccCEh9mwCfVzE8qYcop1