Skip to content

Upgrade brace-expansion to address GHSA-3jxr-9vmj-r5cp - #17

Merged
royvandewater merged 1 commit into
v1from
bump-brace-expansion
Jul 28, 2026
Merged

Upgrade brace-expansion to address GHSA-3jxr-9vmj-r5cp#17
royvandewater merged 1 commit into
v1from
bump-brace-expansion

Conversation

@royvandewater

Copy link
Copy Markdown

Fixes Dependabot alert #63.

What

brace-expansion 1.1.15 → 1.1.16. Lockfile-only change — no package.json or pnpm-workspace.yaml edits, no overrides.

pnpm update brace-expansion reached the patched version on its own: the only copy in the tree comes from minimatch@3.1.5, which declares brace-expansion: ^1.1.7, and 1.1.16 satisfies that range. Steps 2–4 of the usual escalation (parent upgrade, overrides) were not needed.

1.1.16 was published 2026-07-08, so it is already past the repo's 14-day minimumReleaseAge. The age policy was not touched.

Advisories

Alert Advisory Status after this PR
#63 GHSA-3jxr-9vmj-r5cp — exponential-time DoS via consecutive non-expanding brace groups (< 1.1.16) Fixed — 1.1.16 is the first patched release on the 1.x line
#64 GHSA-mh99-v99m-4gvg — unbounded expansion length causing OOM (<= 5.0.7) Not fixed by this PR — see below

Why alert austenstone#64 is not addressed here

GHSA-mh99-v99m-4gvg is only patched in 5.0.8. There is no patched release on the 1.x or 2.x lines: the upstream backport PRs (juliangruber/brace-expansion#129 and austenstone#130) are still open, and 1.1.16 verifiably lacks the length bound — the EXPANSION_MAX / EXPANSION_MAX_LENGTH guards exist only in the 5.x source.

The repo has exactly one copy of brace-expansion, on the 1.x line via minimatch@3.1.5. There is nothing on the 5.x line to bump, so no part of alert austenstone#64 is fixable today.

An override forcing the 1.x copy to 5.0.8 is not a viable stopgap either. 5.x changed the export shape — its CommonJS build does exports.expand = expand (a named export), whereas minimatch@3.x does require('brace-expansion') and calls the module object directly. Forcing 5.0.8 would fail at call time with expand is not a function. It also raises the engine floor to Node 20 || >=22.

The disposition of alert austenstone#64 is a separate decision and is deliberately left open.

Note on CI

pnpm test fails on this branch, but it fails identically on a clean tree (pre-existing TypeScript errors in __tests__/main.test.ts: a missing @jest/globals type declaration and stale kebab-case keys in the Input fixture). Not caused by this change.

brace-expansion 1.1.15 is vulnerable to an exponential-time DoS via
consecutive non-expanding brace groups (GHSA-3jxr-9vmj-r5cp, high).
Patched in 1.1.16 for the 1.x line.

`pnpm update brace-expansion` reached the patched version directly, so
this is a lockfile-only change -- minimatch@3.1.5 already declares
`brace-expansion: ^1.1.7`, which 1.1.16 satisfies. No override needed.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@royvandewater
royvandewater marked this pull request as ready for review July 28, 2026 21:19
@royvandewater
royvandewater merged commit 77223a1 into v1 Jul 28, 2026
1 check passed
@royvandewater
royvandewater deleted the bump-brace-expansion branch July 28, 2026 21:19
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant