test(fleet): recognize env argv0 operands
All checks were successful
ci/woodpecker/pr/ci Pipeline was successful
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:
@@ -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',
|
||||
|
||||
Reference in New Issue
Block a user