about summary refs log tree commit diff
path: root/Src
diff options
context:
space:
mode:
authorPeter Stephenson <pws@users.sourceforge.net>2008-11-17 16:11:29 +0000
committerPeter Stephenson <pws@users.sourceforge.net>2008-11-17 16:11:29 +0000
commit2fbc131ca81470a6b9aa077578f2eb58a7e8e008 (patch)
treee4299db3af1599c149ef6c3ecd484b8dc8f860b0 /Src
parent0662164f13dc1df9ca2cdf1b5ab78d297eed51d1 (diff)
downloadzsh-2fbc131ca81470a6b9aa077578f2eb58a7e8e008.tar.gz
zsh-2fbc131ca81470a6b9aa077578f2eb58a7e8e008.tar.xz
zsh-2fbc131ca81470a6b9aa077578f2eb58a7e8e008.zip
26055: ensure process substitution is handled before parameter and command
Diffstat (limited to 'Src')
-rw-r--r--Src/subst.c13
1 files changed, 9 insertions, 4 deletions
diff --git a/Src/subst.c b/Src/subst.c
index 5cc4748b8..a8f894c68 100644
--- a/Src/subst.c
+++ b/Src/subst.c
@@ -152,8 +152,8 @@ stringsubst(LinkList list, LinkNode node, int ssub, int asssub)
     char *str  = str3, c;
 
     while (!errflag && (c = *str)) {
-	if ((c == Inang || c == Outang || (str == str3 && c == Equals)) &&
-	    str[1] == Inpar) {
+	if (((c = *str) == Inang || c == Outang || (str == str3 && c == Equals))
+	    && str[1] == Inpar) {
 	    char *subst, *rest, *snew, *sptr;
 	    int str3len = str - str3, sublen, restlen;
 
@@ -181,8 +181,13 @@ stringsubst(LinkList list, LinkNode node, int ssub, int asssub)
 	    str3 = snew;
 	    str = snew + str3len + sublen;
 	    setdata(node, str3);
-	    continue;
-	} else if ((qt = c == Qstring) || c == String) {
+	} else
+	    str++;
+    }
+    str = str3;
+
+    while (!errflag && (c = *str)) {
+	if ((qt = c == Qstring) || c == String) {
 	    if ((c = str[1]) == Inpar) {
 		if (!qt)
 		    list->list.flags |= LF_ARRAY;