]> granicus.if.org Git - php/commitdiff
- Fix handling of not existing long CLI options
authorJohannes Schlüter <johannes@php.net>
Thu, 22 Mar 2007 21:34:58 +0000 (21:34 +0000)
committerJohannes Schlüter <johannes@php.net>
Thu, 22 Mar 2007 21:34:58 +0000 (21:34 +0000)
sapi/cli/getopt.c
sapi/cli/tests/015.phpt [new file with mode: 0644]

index 8634003daee0a7d775f022bdc265541eeb4fcad3..963c4554e1ace31908c7e2d3972fe45f87d98ea9 100644 (file)
@@ -79,11 +79,16 @@ int php_getopt(int argc, char* const *argv, const opt_struct opts[], char **opta
        }
        if ((argv[*optind][0] == '-') && (argv[*optind][1] == '-')) {
                /* '--' indicates end of args if not followed by a known long option name */
+               if (argv[*optind][2] == '\0') {
+                       (*optind)++;
+                       return(EOF);
+               }
+
                while (1) {
                        opts_idx++;
                        if (opts[opts_idx].opt_char == '-') {
                                (*optind)++;
-                               return(EOF);
+                               return(php_opt_error(argc, argv, *optind-1, optchr, OPTERRARG, show_err));
                        } else if (opts[opts_idx].opt_name && !strcmp(&argv[*optind][2], opts[opts_idx].opt_name)) {
                                break;
                        }
diff --git a/sapi/cli/tests/015.phpt b/sapi/cli/tests/015.phpt
new file mode 100644 (file)
index 0000000..e5c0ab0
--- /dev/null
@@ -0,0 +1,30 @@
+--TEST--
+CLI long options
+--SKIPIF--
+<?php include "skipif.inc"; ?>
+--FILE--
+<?php
+
+$php = getenv('TEST_PHP_EXECUTABLE');
+
+
+echo `"$php" --version | grep built:`;
+echo `echo "<?php print_r(\\\$argv);" | "$php" -- foo bar baz`, "\n";
+echo `"$php" --version foo bar baz | grep built:`;
+echo `"$php" --notexisting foo bar baz | grep Usage:`;
+
+echo "Done\n";
+?>
+--EXPECTF--     
+PHP %d.%d.%d%s(cli) (built: %s)
+Array
+(
+    [0] => -
+    [1] => foo
+    [2] => bar
+    [3] => baz
+)
+
+PHP %d.%d.%d%s(cli) (built: %s)
+Usage: php [options] [-f] <file> [--] [args...]
+Done