mirror of
https://github.com/php/php-src.git
synced 2024-09-22 10:27:25 +00:00
added a test script for bug60116 and fixed behabior of ESCAPE_CMD_END.
This commit is contained in:
parent
41abc6d017
commit
71ee976a2d
@ -280,7 +280,7 @@ PHPAPI char *php_escape_shell_cmd_ex(char *str, int flag)
|
||||
cmd[y++] = '\\';
|
||||
cmd[y++] = str[x];
|
||||
} else if (flag == ESCAPE_CMD_END) {
|
||||
if (x == 0 || x == l - 1) {
|
||||
if ((x == 0 || x == l - 1) && (str[0] == str[l-1])) {
|
||||
cmd[y++] = str[x];
|
||||
} else {
|
||||
cmd[y++] = '\\';
|
||||
|
160
ext/standard/tests/general_functions/bug60116.phpt
Normal file
160
ext/standard/tests/general_functions/bug60116.phpt
Normal file
@ -0,0 +1,160 @@
|
||||
--TEST--
|
||||
Test escapeshellcmd() to escape the quotation
|
||||
--SKIPIF--
|
||||
<?php
|
||||
if( substr(PHP_OS, 0, 3) == 'WIN' ) {
|
||||
die('skip...Invalid for Windows');
|
||||
}
|
||||
?>
|
||||
--FILE--
|
||||
<?php
|
||||
echo "*** Testing escapeshellcmd() escape the quotation ***\n";
|
||||
$data = array(
|
||||
'"abc',
|
||||
"'abc",
|
||||
'?<>',
|
||||
'()[]{}$',
|
||||
'%^',
|
||||
'#&;`|*?',
|
||||
'~<>\\',
|
||||
'%NOENV%',
|
||||
"abc' 'def",
|
||||
'abc" "def',
|
||||
"'abc def'",
|
||||
'"abc def"',
|
||||
);
|
||||
|
||||
echo "case: default\n";
|
||||
|
||||
$count = 1;
|
||||
foreach ($data AS $value) {
|
||||
echo "-- Test " . $count++ . " --\n";
|
||||
var_dump(escapeshellcmd($value));
|
||||
}
|
||||
|
||||
echo "case: ESCAPE_CMD_PAIR\n";
|
||||
$count = 1;
|
||||
foreach ($data AS $value) {
|
||||
echo "-- Test " . $count++ . " --\n";
|
||||
var_dump(escapeshellcmd($value, ESCAPE_CMD_PAIR));
|
||||
}
|
||||
|
||||
echo "case: ESCAPE_CMD_END\n";
|
||||
$count = 1;
|
||||
foreach ($data AS $value) {
|
||||
echo "-- Test " . $count++ . " --\n";
|
||||
var_dump(escapeshellcmd($value, ESCAPE_CMD_END));
|
||||
}
|
||||
|
||||
echo "case: ESCAPE_CMD_ALL\n";
|
||||
$count = 1;
|
||||
foreach ($data AS $value) {
|
||||
echo "-- Test " . $count++ . " --\n";
|
||||
var_dump(escapeshellcmd($value, ESCAPE_CMD_ALL));
|
||||
}
|
||||
|
||||
echo "Done\n";
|
||||
?>
|
||||
--EXPECTF--
|
||||
*** Testing escapeshellcmd() escape the quotation ***
|
||||
case: default
|
||||
-- Test 1 --
|
||||
string(5) "\"abc"
|
||||
-- Test 2 --
|
||||
string(5) "\'abc"
|
||||
-- Test 3 --
|
||||
string(6) "\?\<\>"
|
||||
-- Test 4 --
|
||||
string(14) "\(\)\[\]\{\}\$"
|
||||
-- Test 5 --
|
||||
string(3) "%\^"
|
||||
-- Test 6 --
|
||||
string(14) "\#\&\;\`\|\*\?"
|
||||
-- Test 7 --
|
||||
string(8) "\~\<\>\\"
|
||||
-- Test 8 --
|
||||
string(7) "%NOENV%"
|
||||
-- Test 9 --
|
||||
string(9) "abc' 'def"
|
||||
-- Test 10 --
|
||||
string(9) "abc" "def"
|
||||
-- Test 11 --
|
||||
string(9) "'abc def'"
|
||||
-- Test 12 --
|
||||
string(9) ""abc def""
|
||||
case: ESCAPE_CMD_PAIR
|
||||
-- Test 1 --
|
||||
string(5) "\"abc"
|
||||
-- Test 2 --
|
||||
string(5) "\'abc"
|
||||
-- Test 3 --
|
||||
string(6) "\?\<\>"
|
||||
-- Test 4 --
|
||||
string(14) "\(\)\[\]\{\}\$"
|
||||
-- Test 5 --
|
||||
string(3) "%\^"
|
||||
-- Test 6 --
|
||||
string(14) "\#\&\;\`\|\*\?"
|
||||
-- Test 7 --
|
||||
string(8) "\~\<\>\\"
|
||||
-- Test 8 --
|
||||
string(7) "%NOENV%"
|
||||
-- Test 9 --
|
||||
string(9) "abc' 'def"
|
||||
-- Test 10 --
|
||||
string(9) "abc" "def"
|
||||
-- Test 11 --
|
||||
string(9) "'abc def'"
|
||||
-- Test 12 --
|
||||
string(9) ""abc def""
|
||||
case: ESCAPE_CMD_END
|
||||
-- Test 1 --
|
||||
string(5) "\"abc"
|
||||
-- Test 2 --
|
||||
string(5) "\'abc"
|
||||
-- Test 3 --
|
||||
string(6) "\?\<\>"
|
||||
-- Test 4 --
|
||||
string(14) "\(\)\[\]\{\}\$"
|
||||
-- Test 5 --
|
||||
string(3) "%\^"
|
||||
-- Test 6 --
|
||||
string(14) "\#\&\;\`\|\*\?"
|
||||
-- Test 7 --
|
||||
string(8) "\~\<\>\\"
|
||||
-- Test 8 --
|
||||
string(7) "%NOENV%"
|
||||
-- Test 9 --
|
||||
string(11) "abc\' \'def"
|
||||
-- Test 10 --
|
||||
string(11) "abc\" \"def"
|
||||
-- Test 11 --
|
||||
string(9) "'abc def'"
|
||||
-- Test 12 --
|
||||
string(9) ""abc def""
|
||||
case: ESCAPE_CMD_ALL
|
||||
-- Test 1 --
|
||||
string(5) "\"abc"
|
||||
-- Test 2 --
|
||||
string(5) "\'abc"
|
||||
-- Test 3 --
|
||||
string(6) "\?\<\>"
|
||||
-- Test 4 --
|
||||
string(14) "\(\)\[\]\{\}\$"
|
||||
-- Test 5 --
|
||||
string(3) "%\^"
|
||||
-- Test 6 --
|
||||
string(14) "\#\&\;\`\|\*\?"
|
||||
-- Test 7 --
|
||||
string(8) "\~\<\>\\"
|
||||
-- Test 8 --
|
||||
string(7) "%NOENV%"
|
||||
-- Test 9 --
|
||||
string(11) "abc\' \'def"
|
||||
-- Test 10 --
|
||||
string(11) "abc\" \"def"
|
||||
-- Test 11 --
|
||||
string(11) "\'abc def\'"
|
||||
-- Test 12 --
|
||||
string(11) "\"abc def\""
|
||||
Done
|
Loading…
Reference in New Issue
Block a user