autoconf
[Top][All Lists]
Advanced

[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.





reply via email to

[Prev in Thread] Current Thread [Next in Thread]