[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Suggestion for command line parsing
From: |
Eric Blake |
Subject: |
Re: Suggestion for command line parsing |
Date: |
Tue, 4 Nov 2008 07:26:55 -0800 (PST) |
> 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 <address@hidden>
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 <address@hidden>
---
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 <address@hidden>
+ 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 <address@hidden>
+
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.