bug-autoconf
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH] m4sh: protect LINENO against stray macro


From: Eric Blake
Subject: [PATCH] m4sh: protect LINENO against stray macro
Date: Fri, 27 Aug 2010 11:02:21 -0600

* lib/m4sugar/m4sh.m4 (_AS_LINENO_PREPARE): Double quote entire
sed script, to avoid issue uncovered by automake testsuite where
'b' was an m4 macro that broke execution on dash.
Reported by Stefano Lattarini.

Signed-off-by: Eric Blake <address@hidden>
---

> Hmm - that means that m4sh is not robust to a macro named [b] in the
> environment.  I can probably fix this particular failure with some
> additional quoting.

Like this.

 ChangeLog           |    6 ++++++
 lib/m4sugar/m4sh.m4 |   10 +++++-----
 2 files changed, 11 insertions(+), 5 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index 236bfcd..5a11ab3 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,11 @@
 2010-08-27  Eric Blake  <address@hidden>

+       m4sh: protect LINENO against stray macro
+       * lib/m4sugar/m4sh.m4 (_AS_LINENO_PREPARE): Double quote entire
+       sed script, to avoid issue uncovered by automake testsuite where
+       'b' was an m4 macro that broke execution on dash.
+       Reported by Stefano Lattarini.
+
        m4sh: assume ${a:-b} support
        * tests/m4sh.at (Null variable substitution): New test.
        * doc/autoconf.texi (Shell Substitutions) <${var:-value}>: Mention
diff --git a/lib/m4sugar/m4sh.m4 b/lib/m4sugar/m4sh.m4
index 8343b25..ef99cb5 100644
--- a/lib/m4sugar/m4sh.m4
+++ b/lib/m4sugar/m4sh.m4
@@ -1138,23 +1138,23 @@ dnl trailing '-' during substitution so that $LINENO is 
not a special
 dnl case at line end.  (Raja R Harinath suggested sed '=', and Paul
 dnl Eggert wrote the scripts with optimization help from Paolo Bonzini).
 [_AS_LINENO_WORKS || {
-  # Blame Lee E. McMahon (1931-1989) for sed's syntax.  :-)
+[  # Blame Lee E. McMahon (1931-1989) for sed's syntax.  :-)
   sed -n '
     p
-    /[[$]]LINENO/=
+    /[$]LINENO/=
   ' <$as_myself |
     sed '
-      s/[[$]]LINENO.*/&-/
+      s/[$]LINENO.*/&-/
       t lineno
       b
       :lineno
       N
       :loop
-      s/[[$]]LINENO\([[^'$as_cr_alnum'_]].*\n\)\(.*\)/\2\1\2/
+      s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/
       t loop
       s/-\n.*//
     ' >$as_me.lineno &&
-  chmod +x "$as_me.lineno" ||
+  chmod +x "$as_me.lineno"] ||
     AS_ERROR([cannot create $as_me.lineno; rerun with a POSIX shell])

   # Don't try to exec as it changes $[0], causing all sort of problems
-- 
1.7.2.2




reply via email to

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