diff options
| author | Nikita Popov <nikita.ppv@gmail.com> | 2020-01-27 13:32:51 +0100 |
|---|---|---|
| committer | Nikita Popov <nikita.ppv@gmail.com> | 2020-01-27 13:32:51 +0100 |
| commit | 16f194c75e05381628ae2b9468fb8004dec9e176 (patch) | |
| tree | fe16599af39275ddff3d73781daf9cbf59a0fd25 /sapi/cli | |
| parent | 3f6779879cf7a293541ea10cd2852c9f45cbe73f (diff) | |
| parent | 1cccbb8ff1339c44075e7dee8613d98dc8056f68 (diff) | |
| download | php-git-16f194c75e05381628ae2b9468fb8004dec9e176.tar.gz | |
Merge branch 'PHP-7.4'
* PHP-7.4:
Fix bug #78323: Code 0 is returned on invalid options
Diffstat (limited to 'sapi/cli')
| -rw-r--r-- | sapi/cli/php_cli.c | 6 | ||||
| -rw-r--r-- | sapi/cli/tests/015.phpt | 2 | ||||
| -rw-r--r-- | sapi/cli/tests/bug78323.phpt | 78 |
3 files changed, 84 insertions, 2 deletions
diff --git a/sapi/cli/php_cli.c b/sapi/cli/php_cli.c index d610c532c9..8cc570f132 100644 --- a/sapi/cli/php_cli.c +++ b/sapi/cli/php_cli.c @@ -1226,7 +1226,7 @@ int main(int argc, char *argv[]) setmode(_fileno(stderr), O_BINARY); /* make the stdio mode be binary */ #endif - while ((c = php_getopt(argc, argv, OPTIONS, &php_optarg, &php_optind, 0, 2))!=-1) { + while ((c = php_getopt(argc, argv, OPTIONS, &php_optarg, &php_optind, 1, 2))!=-1) { switch (c) { case 'c': if (ini_path_override) { @@ -1278,6 +1278,10 @@ int main(int argc, char *argv[]) case '?': php_cli_usage(argv[0]); goto out; + case PHP_GETOPT_INVALID_ARG: /* print usage on bad options, exit 1 */ + php_cli_usage(argv[0]); + exit_status = 1; + goto out; case 'i': case 'v': case 'm': sapi_module = &cli_sapi_module; goto exit_loop; diff --git a/sapi/cli/tests/015.phpt b/sapi/cli/tests/015.phpt index 01f5328e99..5a5e6c5190 100644 --- a/sapi/cli/tests/015.phpt +++ b/sapi/cli/tests/015.phpt @@ -16,7 +16,7 @@ $php = getenv('TEST_PHP_EXECUTABLE'); echo `"$php" -n --version | grep built:`; echo `echo "<?php print_r(\\\$argv);" | "$php" -n -- foo bar baz`, "\n"; echo `"$php" -n --version foo bar baz | grep built:`; -echo `"$php" -n --notexisting foo bar baz | grep Usage:`; +echo `"$php" -n --notexisting foo bar baz 2>&1 | grep Usage:`; echo "Done\n"; ?> diff --git a/sapi/cli/tests/bug78323.phpt b/sapi/cli/tests/bug78323.phpt new file mode 100644 index 0000000000..02b18e02a2 --- /dev/null +++ b/sapi/cli/tests/bug78323.phpt @@ -0,0 +1,78 @@ +--TEST-- +Bug #78323 Test exit code and error message for invalid parameters +--SKIPIF-- +<?php +include "skipif.inc"; +?> +--FILE-- +<?php +$php = getenv('TEST_PHP_EXECUTABLE'); + +// There are 3 types of option errors: +// 1 : in flags +// 2 option not found +// 3 no argument for option + + +// colon in flags +ob_start(); +passthru("$php -a:Z 2>&1", $exitCode); +$output = ob_get_contents(); +ob_end_clean(); + +$lines = preg_split('/\R/', $output); +echo $lines[0], "\n", + $lines[1], "\n", + "Done: $exitCode\n\n"; + + +// option not found +ob_start(); +passthru("$php -Z 2>&1", $exitCode); +$output = ob_get_contents(); +ob_end_clean(); + +$lines = preg_split('/\R/', $output); +echo $lines[0], "\n", + $lines[1], "\n", + "Done: $exitCode\n\n"; + + +// no argument for option +ob_start(); +passthru("$php --memory-limit=1G 2>&1", $exitCode); +$output = ob_get_contents(); +ob_end_clean(); + +$lines = preg_split('/\R/', $output); +echo $lines[0], "\n", + $lines[1], "\n", + "Done: $exitCode\n\n"; + + +// Successful execution +ob_start(); +passthru("$php -dmemory-limit=1G -v", $exitCode); +$output = ob_get_contents(); +ob_end_clean(); + +$lines = preg_split('/\R/', $output); +echo $lines[0], "\n", + "Done: $exitCode\n"; + +?> +--EXPECTF-- +Error in argument %d, char %d: : in flags +Usage: %s [options] [-f] <file> [--] [args...] +Done: 1 + +Error in argument %d, char %d: option not found %s +Usage: %s [options] [-f] <file> [--] [args...] +Done: 1 + +Error in argument %d, char %d: no argument for option %s +Usage: %s [options] [-f] <file> [--] [args...] +Done: 1 + +PHP %s +Done: 0 |
