fix(security): raise brace-expansion and undici override floors #127

Merged
maximus merged 1 commit from issue-124-125-brace-expansion-undici-floors into master 2026-10-02 18:14:27 +00:00
Owner

Fixes #124
Fixes #125

Summary

  • brace-expansion: the three version-scoped overrides go to the patched head of each major: ^1.1.21, ^2.1.7, ^5.0.12 (9 new DoS advisories outdated the #103 floors). No blanket override.
  • undici: scoped override @expo/cli > undici goes from ^6.28.0 to ^6.28.1, resolved to 6.29.0.
  • tests/smoke.test.cjs: three new checks. Issue #124 mentions a minimatch test in the smoke file; none existed, this PR adds it.
    • every installed brace-expansion copy is at or above its major floor (unknown major fails);
    • every installed undici copy is >= 6.28.1;
    • every installed minimatch copy (majors 3, 9, 10) still matches globstar, brace sets and numeric ranges.

Verification

Check Result
New smoke checks on the old lock 2 red (6 brace-expansion copies + 1 undici below floor), minimatch check green
npm test after the bump smoke OK, feedback 11/11
npm ls brace-expansion undici 1.1.21 / 2.1.7 / 5.0.12 / undici 6.29.0, no invalid
npm ls | wc -l 54 -> 54
npm audit 12 -> 10 entries (8 -> 6 high), brace-expansion and undici gone
npx expo export --platform android exit 0, Hermes bundle 8.19 MB
Clean-room npm ci (npm 10.9.4, with patches/) exit 0, lock not rewritten
Lock diff 7 entries (6 brace-expansion + 1 undici), version/resolved/integrity only

Remaining npm audit entries: node-forge cascade (#123, blocked upstream), decode-uri-component cascade (#126), postcss-selector-parser (low).

Not tested: dev server (expo start) and an EAS build on device.

đŸ€– Generated with Claude Code

Fixes #124 Fixes #125 ## Summary - `brace-expansion`: the three version-scoped overrides go to the patched head of each major: `^1.1.21`, `^2.1.7`, `^5.0.12` (9 new DoS advisories outdated the #103 floors). No blanket override. - `undici`: scoped override `@expo/cli > undici` goes from `^6.28.0` to `^6.28.1`, resolved to `6.29.0`. - `tests/smoke.test.cjs`: three new checks. Issue #124 mentions a minimatch test in the smoke file; none existed, this PR adds it. - every installed `brace-expansion` copy is at or above its major floor (unknown major fails); - every installed `undici` copy is >= 6.28.1; - every installed `minimatch` copy (majors 3, 9, 10) still matches globstar, brace sets and numeric ranges. ## Verification | Check | Result | |---|---| | New smoke checks on the old lock | 2 red (6 brace-expansion copies + 1 undici below floor), minimatch check green | | `npm test` after the bump | smoke OK, feedback 11/11 | | `npm ls brace-expansion undici` | 1.1.21 / 2.1.7 / 5.0.12 / undici 6.29.0, no `invalid` | | `npm ls \| wc -l` | 54 -> 54 | | `npm audit` | 12 -> 10 entries (8 -> 6 high), `brace-expansion` and `undici` gone | | `npx expo export --platform android` | exit 0, Hermes bundle 8.19 MB | | Clean-room `npm ci` (npm 10.9.4, with `patches/`) | exit 0, lock not rewritten | | Lock diff | 7 entries (6 brace-expansion + 1 undici), version/resolved/integrity only | Remaining `npm audit` entries: node-forge cascade (#123, blocked upstream), decode-uri-component cascade (#126), postcss-selector-parser (low). Not tested: dev server (`expo start`) and an EAS build on device. đŸ€– Generated with [Claude Code](https://claude.com/claude-code)
maximus added 1 commit 2026-10-02 18:11:36 +00:00
brace-expansion: nine new DoS advisories outdate the floors set in #103.
Raise the three version-scoped overrides to the patched head of each
major (1.1.21, 2.1.7, 5.0.12). undici: raise the @expo/cli scoped
override to ^6.28.1 (resolves to 6.29.0).

Add smoke checks locking the floors and the minimatch brace/glob
behaviour for every installed minimatch major, so a return to a blanket
override fails the suite.

npm audit: 12 -> 10 entries. The rest is tracked in #123 and #126.

Fixes #124
Fixes #125

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Author
Owner

Review — APPROVE

RĂ©sumĂ©. Le correctif fait ce qu'il annonce : les trois overrides version-scoped de brace-expansion passent Ă  la tĂȘte patchĂ©e de chaque majeur, l'override scopĂ© @expo/cli > undici passe Ă  ^6.28.1 (rĂ©solu en 6.29.0), et trois checks de smoke verrouillent les planchers. Aucun point bloquant.

Le dépÎt n'a pas de CI (aucun statut sur 84d0418) : la suite et les mutations ont été rejouées par le relecteur.

VĂ©rifiĂ© par le relecteur (tĂȘte 84d0418)

Vérification Résultat
npm test (node 22.22.0, npm 10.9.4) smoke OK, feedback 11/11
npm ls brace-expansion undici minimatch 1.1.21 / 2.1.7 / 5.0.12, undici 6.29.0, aucun invalid
npm audit 10 entrées (6 high, 3 moderate, 1 low), brace-expansion et undici absents
Intégrité du lock les 4 hashes sha512 du diff sont identiques à npm view <pkg>@<v> dist.integrity
Dist-tags 1.x=1.1.21, 2.x=2.1.7, latest=5.0.12, undici six=6.29.0 : les planchers sont bien les tĂȘtes de ligne
PérimÚtre du diff 3 fichiers ; lock : 7 entrées, version/resolved/integrity seulement
Fermeture d'issues timeline de #124 et #125 : pull_ref de #127 avec ref_action: closes ; Fixes présent aussi dans le message de commit

Mutations (copie hors dépÎt, arbre du dépÎt inchangé)

Mutation Checks rouges
M1 — retour aux anciennes versions (1.1.18 / 2.1.4 / 5.0.9, undici 6.28.0) 2 : plancher brace-expansion, plancher undici
M2 — blanket simulĂ© : brace-expansion 5.0.12 posĂ© sous le minimatch@3 de react-native 1 : minimatch (expand is not a function) ; le check de plancher reste vert, c'est bien le test minimatch qui porte cette rĂ©gression
M3 — une copie en 4.x 1 : plancher brace-expansion (majeur inconnu)

Les trois checks ajoutés détectent chacun le défaut qu'ils sont censés interdire.

Non rejoué

npx expo export --platform android et le npm ci en salle blanche annoncés dans le corps de la PR n'ont pas été rejoués ici. Le dev server et un build EAS restent non testés, comme le dit la PR.

Suggestions (non bloquantes)

  1. tests/smoke.test.cjs:298 — le check undici n'a pas de borne par majeur : une copie 7.x ou 8.x vulnĂ©rable passerait (>= 6.28.1 au sens semver). Une seule copie existe aujourd'hui ; une table de planchers par majeur, comme pour brace-expansion, fermerait le trou.
  2. tests/smoke.test.cjs:273 — versionAtLeast ne gùre pas les prereleases (6.29.0-beta.1 donne NaN sur le dernier segment). Sans effet sur l'arbre actuel.
  3. tests/smoke.test.cjs:314 — la liste figĂ©e des majeurs de minimatch (3, 9, 10) rougira sur un bump lĂ©gitime d'Expo. Comportement voulu (« fail loudly »), Ă  garder en tĂȘte lors du prochain upgrade de SDK.
## Review — APPROVE **RĂ©sumĂ©.** Le correctif fait ce qu'il annonce : les trois overrides version-scoped de `brace-expansion` passent Ă  la tĂȘte patchĂ©e de chaque majeur, l'override scopĂ© `@expo/cli > undici` passe Ă  `^6.28.1` (rĂ©solu en 6.29.0), et trois checks de smoke verrouillent les planchers. Aucun point bloquant. Le dĂ©pĂŽt n'a pas de CI (aucun statut sur `84d0418`) : la suite et les mutations ont Ă©tĂ© rejouĂ©es par le relecteur. ### VĂ©rifiĂ© par le relecteur (tĂȘte `84d0418`) | VĂ©rification | RĂ©sultat | |---|---| | `npm test` (node 22.22.0, npm 10.9.4) | smoke OK, feedback 11/11 | | `npm ls brace-expansion undici minimatch` | 1.1.21 / 2.1.7 / 5.0.12, undici 6.29.0, aucun `invalid` | | `npm audit` | 10 entrĂ©es (6 high, 3 moderate, 1 low), `brace-expansion` et `undici` absents | | IntĂ©gritĂ© du lock | les 4 hashes `sha512` du diff sont identiques Ă  `npm view <pkg>@<v> dist.integrity` | | Dist-tags | `1.x`=1.1.21, `2.x`=2.1.7, `latest`=5.0.12, undici `six`=6.29.0 : les planchers sont bien les tĂȘtes de ligne | | PĂ©rimĂštre du diff | 3 fichiers ; lock : 7 entrĂ©es, `version`/`resolved`/`integrity` seulement | | Fermeture d'issues | timeline de #124 et #125 : `pull_ref` de #127 avec `ref_action: closes` ; `Fixes` prĂ©sent aussi dans le message de commit | ### Mutations (copie hors dĂ©pĂŽt, arbre du dĂ©pĂŽt inchangĂ©) | Mutation | Checks rouges | |---|---| | M1 — retour aux anciennes versions (1.1.18 / 2.1.4 / 5.0.9, undici 6.28.0) | 2 : plancher brace-expansion, plancher undici | | M2 — blanket simulĂ© : `brace-expansion` 5.0.12 posĂ© sous le `minimatch@3` de `react-native` | 1 : minimatch (`expand is not a function`) ; le check de plancher reste vert, c'est bien le test minimatch qui porte cette rĂ©gression | | M3 — une copie en 4.x | 1 : plancher brace-expansion (majeur inconnu) | Les trois checks ajoutĂ©s dĂ©tectent chacun le dĂ©faut qu'ils sont censĂ©s interdire. ### Non rejouĂ© `npx expo export --platform android` et le `npm ci` en salle blanche annoncĂ©s dans le corps de la PR n'ont pas Ă©tĂ© rejouĂ©s ici. Le dev server et un build EAS restent non testĂ©s, comme le dit la PR. ### Suggestions (non bloquantes) 1. `tests/smoke.test.cjs:298` — le check undici n'a pas de borne par majeur : une copie 7.x ou 8.x vulnĂ©rable passerait (`>= 6.28.1` au sens semver). Une seule copie existe aujourd'hui ; une table de planchers par majeur, comme pour `brace-expansion`, fermerait le trou. 2. `tests/smoke.test.cjs:273` — `versionAtLeast` ne gĂšre pas les prereleases (`6.29.0-beta.1` donne `NaN` sur le dernier segment). Sans effet sur l'arbre actuel. 3. `tests/smoke.test.cjs:314` — la liste figĂ©e des majeurs de minimatch (`3`, `9`, `10`) rougira sur un bump lĂ©gitime d'Expo. Comportement voulu (« fail loudly »), Ă  garder en tĂȘte lors du prochain upgrade de SDK.
maximus merged commit 35ab0f64ae into master 2026-10-02 18:14:27 +00:00
maximus deleted branch issue-124-125-brace-expansion-undici-floors 2026-10-02 18:14:27 +00:00
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: maximus/simpl-liste#127
No description provided.