> So there's already an attempt to reject invalid shell var names. In > the ==foo=bar case, $ac_envvar ends up empty (hence the eval errors > out and the export ends up displaying the current environment). Indeed. And the same bug was previously reported and fixed in autotest, http://git.savannah.gnu.org/gitweb/?p=autoconf.git;a=commitdiff;h=372769c, then followed with a slicker patch that also catches leading digits: http://git.savannah.gnu.org/gitweb/?p=autoconf.git;a=commitdiff;h=66b800 I'm applying this (it has the benefit of reducing the number of forks): From: Eric Blake <ebb9@xxxxxxx> Date: Tue, 4 Nov 2008 08:20:00 -0700 Subject: [PATCH] Reject arguments with leading =. * lib/autoconf/general.m4 (_AC_INIT_PARSE_ARGS): Detect case of missing variable name, with fewer forks. Quote invalid arguments in message, in case they include spaces. * lib/autoconf/status.m4 (_AC_OUTPUT_CONFIG_STATUS) (_AC_OUTPUT_MAIN_LOOP): Quote invalid arguments. * lib/autotest/general.m4 (AT_INIT): Likewise. Reported by Jeff Squyres. Signed-off-by: Eric Blake <ebb9@xxxxxxx> --- ChangeLog | 11 +++++++++++ lib/autoconf/general.m4 | 8 +++++--- lib/autoconf/status.m4 | 10 +++++----- lib/autotest/general.m4 | 4 ++-- 4 files changed, 23 insertions(+), 10 deletions(-) diff --git a/ChangeLog b/ChangeLog index 269eee5..f54b453 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,16 @@ 2008-11-04 Eric Blake <ebb9@xxxxxxx> + Reject arguments with leading =. + * lib/autoconf/general.m4 (_AC_INIT_PARSE_ARGS): Detect case of + missing variable name, with fewer forks. Quote invalid arguments + in message, in case they include spaces. + * lib/autoconf/status.m4 (_AC_OUTPUT_CONFIG_STATUS) + (_AC_OUTPUT_MAIN_LOOP): Quote invalid arguments. + * lib/autotest/general.m4 (AT_INIT): Likewise. + Reported by Jeff Squyres. + +2008-11-04 Eric Blake <ebb9@xxxxxxx> + Upgrade to FDL 1.3. * cfg.mk (fetch): Add fdl-1.3.texi. * .gitattributes: Likewise. diff --git a/lib/autoconf/general.m4 b/lib/autoconf/general.m4 index 834c4b9..de4de33 100644 --- a/lib/autoconf/general.m4 +++ b/lib/autoconf/general.m4 @@ -883,15 +883,17 @@ do | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; - -*) AC_MSG_ERROR([unrecognized option: $ac_option + -*) AC_MSG_ERROR([unrecognized option: `$ac_option' Try `$[0] --help' for more information.]) ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([[^=]]*\)='` # Reject names that are not valid shell variable names. - expr "x$ac_envvar" : "[.*[^_$as_cr_alnum]]" >/dev/null && - AC_MSG_ERROR([invalid variable name: $ac_envvar]) + case $ac_envvar in #( + '' | [[0-9]]* | *[[!_$as_cr_alnum]]* ) + AC_MSG_ERROR([invalid variable name: `$ac_envvar']) ;; + esac eval $ac_envvar=\$ac_optarg export $ac_envvar ;; diff --git a/lib/autoconf/status.m4 b/lib/autoconf/status.m4 index 9ee4b2a..2f6276a 100644 --- a/lib/autoconf/status.m4 +++ b/lib/autoconf/status.m4 @@ -1494,7 +1494,7 @@ m4_ifdef([_AC_SEEN_CONFIG(HEADERS)], [dnl ac_need_defaults=false;; --he | --h) # Conflict between --help and --header - AC_MSG_ERROR([ambiguous option: $[1] + AC_MSG_ERROR([ambiguous option: `$[1]' Try `$[0] --help' for more information.]);; ], [ --he | --h |])dnl --help | --hel | -h ) @@ -1504,7 +1504,7 @@ Try `$[0] --help' for more information.]);; ac_cs_silent=: ;; # This is an error. - -*) AC_MSG_ERROR([unrecognized option: $[1] + -*) AC_MSG_ERROR([unrecognized option: `$[1]' Try `$[0] --help' for more information.]) ;; *) AS_VAR_APPEND([ac_config_targets], [" $[1]"]) @@ -1562,7 +1562,7 @@ for ac_config_target in $ac_config_targets do case $ac_config_target in m4_ifdef([_AC_LIST_TAGS], [_AC_LIST_TAGS]) - *) AC_MSG_ERROR([invalid argument: $ac_config_target]);; + *) AC_MSG_ERROR([invalid argument: `$ac_config_target']);; esac done @@ -1635,7 +1635,7 @@ do esac case $ac_mode$ac_tag in :[[FHL]]*:*);; - :L* | :C*:*) AC_MSG_ERROR([invalid tag $ac_tag]);; + :L* | :C*:*) AC_MSG_ERROR([invalid tag `$ac_tag']);; :[[FH]]-) ac_tag=-:-;; :[[FH]]*) ac_tag=$ac_tag:$ac_tag.in;; esac @@ -1663,7 +1663,7 @@ do [[\\/$]]*) false;; *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; esac || - AC_MSG_ERROR([cannot find input file: $ac_f]);; + AC_MSG_ERROR([cannot find input file: `$ac_f']);; esac case $ac_f in *\'*) ac_f=`AS_ECHO(["$ac_f"]) | sed "s/'/'\\\\\\\\''/g"`;; esac AS_VAR_APPEND([ac_file_inputs], [" '$ac_f'"]) diff --git a/lib/autotest/general.m4 b/lib/autotest/general.m4 index 68f75d8..d9e7089 100644 --- a/lib/autotest/general.m4 +++ b/lib/autotest/general.m4 @@ -596,7 +596,7 @@ m4_divert_push([PARSE_ARGS_END])dnl # Reject names that are not valid shell variable names. case $at_envvar in '' | [[0-9]]* | *[[!_$as_cr_alnum]]* ) - AS_ERROR([invalid variable name: $at_envvar]) ;; + AS_ERROR([invalid variable name: `$at_envvar']) ;; esac at_value=`AS_ECHO(["$at_optarg"]) | sed "s/'/'\\\\\\\\''/g"` # Export now, but save eval for later and for debug scripts. @@ -947,7 +947,7 @@ m4_divert_push([TESTS])dnl # Create the master directory if it doesn't already exist. test -d "$at_suite_dir" || mkdir "$at_suite_dir" || - AS_ERROR([cannot create '$at_suite_dir']) + AS_ERROR([cannot create `$at_suite_dir']) # Can we diff with `/dev/null'? DU 5.0 refuses. if diff /dev/null /dev/null >/dev/null 2>&1; then -- 1.6.0.2 -- View this message in context: http://www.nabble.com/Suggestion-for-command-line-parsing-tp20322164p20324495.html Sent from the Gnu - Autoconf - General mailing list archive at Nabble.com. _______________________________________________ Autoconf mailing list Autoconf@xxxxxxx http://lists.gnu.org/mailman/listinfo/autoconf