Mercurial > hg > octave-nkf > gnulib-hg
changeset 16846:a80d21de5373
system-quote, execute, spawn-pipe: Escape '?' on Windows.
* lib/system-quote.c (SHELL_SPECIAL_CHARS, CMD_SPECIAL_CHARS): Add the
'?' character.
* lib/w32spawn.h (SHELL_SPECIAL_CHARS): Likewise.
* tests/test-system-quote-main.c (check_all): Check also strings like
"??????????".
Reported by Eli Zaretskii <eliz@gnu.org>.
author | Bruno Haible <bruno@clisp.org> |
---|---|
date | Fri, 11 May 2012 01:39:04 +0200 |
parents | 1118b1dc4eab |
children | 53fb1ea35cc9 |
files | ChangeLog lib/system-quote.c lib/w32spawn.h tests/test-system-quote-main.c |
diffstat | 4 files changed, 36 insertions(+), 7 deletions(-) [+] |
line wrap: on
line diff
--- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,13 @@ +2012-05-10 Bruno Haible <bruno@clisp.org> + + system-quote, execute, spawn-pipe: Escape '?' on Windows. + * lib/system-quote.c (SHELL_SPECIAL_CHARS, CMD_SPECIAL_CHARS): Add the + '?' character. + * lib/w32spawn.h (SHELL_SPECIAL_CHARS): Likewise. + * tests/test-system-quote-main.c (check_all): Check also strings like + "??????????". + Reported by Eli Zaretskii <eliz@gnu.org>. + 2012-05-10 Paul Eggert <eggert@cs.ucla.edu> _Noreturn: port config.h to gcc -Wundef
--- a/lib/system-quote.c +++ b/lib/system-quote.c @@ -42,10 +42,15 @@ \" -> " \\\" -> \" \\\\\" -> \\" - - '*' characters may get expanded or lead to a failure with error code - ERROR_PATH_NOT_FOUND. + - '*', '?' characters may get expanded through wildcard expansion in the + callee: By default, in the callee, the initialization code before main() + takes the result of GetCommandLine(), wildcard-expands it, and passes it + to main(). The exceptions to this rule are: + - programs that inspect GetCommandLine() and ignore argv, + - mingw programs that have a global variable 'int _CRT_glob = 0;', + - Cygwin programs, when invoked from a Cygwin program. */ -# define SHELL_SPECIAL_CHARS "\"\\ \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037*" +# define SHELL_SPECIAL_CHARS "\"\\ \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037*?" # define SHELL_SPACE_CHARS " \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" /* Copies the quoted string to p and returns the number of bytes needed. @@ -112,7 +117,7 @@ double-quotes and the rest of the string inside double-quotes: %"var"%. This is guaranteed to not be a reference to an environment variable. */ -# define CMD_SPECIAL_CHARS "\"\\ \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037!%&'*+,;<=>[]^`{|}~" +# define CMD_SPECIAL_CHARS "\"\\ \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037!%&'*+,;<=>?[]^`{|}~" # define CMD_FORBIDDEN_CHARS "\n\r" /* Copies the quoted string to p and returns the number of bytes needed.
--- a/lib/w32spawn.h +++ b/lib/w32spawn.h @@ -115,10 +115,15 @@ \" -> " \\\" -> \" \\\\\" -> \\" - - '*' characters may get expanded or lead to a failure with error code - ERROR_PATH_NOT_FOUND. + - '*', '?' characters may get expanded through wildcard expansion in the + callee: By default, in the callee, the initialization code before main() + takes the result of GetCommandLine(), wildcard-expands it, and passes it + to main(). The exceptions to this rule are: + - programs that inspect GetCommandLine() and ignore argv, + - mingw programs that have a global variable 'int _CRT_glob = 0;', + - Cygwin programs, when invoked from a Cygwin program. */ -#define SHELL_SPECIAL_CHARS "\"\\ \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037*" +#define SHELL_SPECIAL_CHARS "\"\\ \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037*?" #define SHELL_SPACE_CHARS " \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" static char ** prepare_spawn (char **argv)
--- a/tests/test-system-quote-main.c +++ b/tests/test-system-quote-main.c @@ -248,6 +248,15 @@ /* '?' would be interpreted as a wildcard character. */ check_one (interpreter, prog, "?"); + check_one (interpreter, prog, "??"); + check_one (interpreter, prog, "???"); + check_one (interpreter, prog, "????"); + check_one (interpreter, prog, "?????"); + check_one (interpreter, prog, "??????"); + check_one (interpreter, prog, "???????"); + check_one (interpreter, prog, "????????"); + check_one (interpreter, prog, "?????????"); + check_one (interpreter, prog, "??????????"); check_one (interpreter, prog, "foo?bar"); /* '^' would be interpreted in old /bin/sh, e.g. SunOS 4.1.4. */