reopen 418774
quit
On Fri, Oct 05, 2007 at 07:36:47AM -0400, Paul Smith wrote:
>
> > /bin/sh -c 'if false; then d="${foo/bar}"; fi'
>
> Note the "if false;...". The POSIX spec, in the sections we have quoted
> above, is clear that this should NOT be an error, because that reference
> is never expanded.
Fair enough. I've fixed it as follows.
Cheers,
--
Visit Openswan at http://www.openswan.org/
Email: Herbert Xu ~{PmV>HI~} <[EMAIL PROTECTED]>
Home Page: http://gondor.apana.org.au/~herbert/
PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt
--
3df3edd13389ae768010bfacee5612346b413e38
diff --git a/ChangeLog b/ChangeLog
index 1db14ac..69ba464 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+2007-10-08 Herbert Xu <[EMAIL PROTECTED]>
+
+ * Report substition errors at expansion time.
+
2007-10-06 Herbert Xu <[EMAIL PROTECTED]>
* Add pushstackmark.
diff --git a/src/expand.c b/src/expand.c
index e3e5d8f..54fe908 100644
--- a/src/expand.c
+++ b/src/expand.c
@@ -749,6 +749,10 @@ evalvar(char *p, int flag)
varflags = *p++;
subtype = varflags & VSTYPE;
+
+ if (!subtype)
+ sh_error("Bad substitution");
+
quoted = flag & EXP_QUOTED;
var = p;
easy = (!quoted || (*var == '@' && shellparam.nparam));
diff --git a/src/parser.c b/src/parser.c
index d0e0553..4b8a5fe 100644
--- a/src/parser.c
+++ b/src/parser.c
@@ -1204,9 +1204,8 @@ varname:
USTPUTC(cc, out);
}
else
-badsub: synerror("Bad substitution");
+ goto badsub;
- STPUTC('=', out);
if (subtype == 0) {
switch (c) {
case ':':
@@ -1216,7 +1215,7 @@ badsub: synerror("Bad substitution");
default:
p = strchr(types, c);
if (p == NULL)
- goto badsub;
+ break;
subtype |= p - types + VSNORMAL;
break;
case '%':
@@ -1234,6 +1233,7 @@ badsub: synerror("Bad substitution");
}
}
} else {
+badsub:
pungetc();
}
*((char *)stackblock() + typeloc) = subtype;
@@ -1242,6 +1242,7 @@ badsub: synerror("Bad substitution");
if (dblquote)
dqvarnest++;
}
+ STPUTC('=', out);
}
goto parsesub_return;
}
--
To UNSUBSCRIBE, email to [EMAIL PROTECTED]
with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]