test(fleet): recognize env argv0 operands
All checks were successful
ci/woodpecker/pr/ci Pipeline was successful

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Jarvis
2026-07-16 13:45:09 -05:00
parent 30fad7a2b3
commit 42c7980dfb

View File

@@ -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',