From 42c7980dfb2ff2b518d1220bed81e952578d9489 Mon Sep 17 00:00:00 2001 From: Jarvis Date: Thu, 16 Jul 2026 13:45:09 -0500 Subject: [PATCH] test(fleet): recognize env argv0 operands Co-Authored-By: Claude Opus 4.8 --- .../src/fleet/fleet-documentation.spec.ts | 46 +++++++++++++++++-- 1 file changed, 43 insertions(+), 3 deletions(-) diff --git a/packages/mosaic/src/fleet/fleet-documentation.spec.ts b/packages/mosaic/src/fleet/fleet-documentation.spec.ts index 08a61e2..c2d45e3 100644 --- a/packages/mosaic/src/fleet/fleet-documentation.spec.ts +++ b/packages/mosaic/src/fleet/fleet-documentation.spec.ts @@ -234,11 +234,11 @@ function normalizedCommandTokens(segment: string): string[] { index += 1; break; } - if (/^(?:--unset|--chdir)$/.test(token)) { + if (/^(?:--unset|--chdir|--argv0)$/.test(token)) { index += 2; continue; } - if (/^(?:--unset=|--chdir=)/.test(token)) { + if (/^(?:--unset=|--chdir=|--argv0=)/.test(token)) { index += 1; continue; } @@ -257,7 +257,7 @@ function normalizedCommandTokens(segment: string): string[] { let consumed = false; for (let optionIndex = 0; optionIndex < options.length; optionIndex += 1) { const option = options[optionIndex] ?? ''; - if (option === 'u' || option === 'C') { + if (option === 'u' || option === 'C' || option === 'a') { index += options.slice(optionIndex + 1) === '' ? 2 : 1; consumed = true; break; @@ -462,6 +462,34 @@ const UNSAFE_EXAMPLE_FIXTURES = [ expected: 'privileged-command', source: 'env --unset FOO /usr/bin/apt-get install example', }, + { + expected: 'privileged-command', + source: 'env -a alternate /usr/bin/apt-get --version', + }, + { + expected: 'privileged-command', + source: 'env --argv0 alternate /usr/bin/apt-get --version', + }, + { + expected: 'privileged-command', + source: 'env --argv0=alternate /usr/bin/apt-get --version', + }, + { + expected: 'privileged-command', + source: 'env -ia alternate /usr/bin/apt-get --version', + }, + { + expected: 'privileged-command', + source: 'env -iaalternate /usr/bin/apt-get --version', + }, + { + expected: 'privileged-command', + source: "env -S '-a alternate /usr/bin/apt-get --version'", + }, + { + expected: 'privileged-command', + source: "env -S '--argv0=alternate /usr/bin/apt-get --version'", + }, { expected: 'privileged-command', source: 'env -S apt-get install example' }, { expected: 'privileged-command', source: "env -S 'apt-get update'" }, { expected: 'privileged-command', source: "env -S'/usr/bin/apt-get --version'" }, @@ -559,6 +587,18 @@ describe('documentation validation regressions', (): void => { "env --split-string='FOO=x /usr/bin/printf safe'", 'env -iu FOO /usr/bin/printf safe', 'env -ivS/usr/bin/printf safe', + 'env -a alternate /usr/bin/printf safe', + 'env --argv0 alternate /usr/bin/printf safe', + 'env --argv0=alternate /usr/bin/printf safe', + 'env -ia alternate /usr/bin/printf safe', + 'env -iaalternate /usr/bin/printf safe', + "env -S '-a alternate /usr/bin/printf safe'", + "env -S '--argv0 alternate /usr/bin/printf safe'", + 'env -a', + 'env --argv0', + 'env -ia alternate', + "printf '%s\\n' 'env -a alternate /usr/bin/apt-get --version'", + 'command -v env -a alternate /usr/bin/apt-get', 'su -lc /usr/bin/id operator', 'su -l -s /bin/sh operator', 'su -s /bin/sh -- operator',