about summary refs log tree commit diff
diff options
context:
space:
mode:
authorPeter Stephenson <p.w.stephenson@ntlworld.com>2013-11-17 20:33:57 +0000
committerPeter Stephenson <p.w.stephenson@ntlworld.com>2013-11-17 20:33:57 +0000
commitbd919f30aeb45828404899a1524b2028446860bd (patch)
tree13e320dfae6a9a2334cfc041198700aa671123b1
parent412eb078850e2d5213048052e40215322e3949c8 (diff)
downloadzsh-bd919f30aeb45828404899a1524b2028446860bd.tar.gz
zsh-bd919f30aeb45828404899a1524b2028446860bd.tar.xz
zsh-bd919f30aeb45828404899a1524b2028446860bd.zip
32001: fix crash on ${:*} and ${:|}
-rw-r--r--ChangeLog5
-rw-r--r--Src/subst.c8
-rw-r--r--Test/D04parameter.ztst9
3 files changed, 22 insertions, 0 deletions
diff --git a/ChangeLog b/ChangeLog
index 87b00c13f..ff7ee20c2 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2013-11-17  Peter Stephenson  <p.w.stephenson@ntlworld.com>
+
+	* 32001: Src/subst.: fix crash on empty arrays with array
+	intersection and disjunction.
+
 2013-11-15  Barton E. Schaefer  <schaefer@zsh.org>
 
 	* Martin Vaeth: 31988: Doc/Makefile.in, Util/helpfiles: remove
diff --git a/Src/subst.c b/Src/subst.c
index a4df2567f..1059508ef 100644
--- a/Src/subst.c
+++ b/Src/subst.c
@@ -2941,6 +2941,14 @@ paramsubst(LinkList l, LinkNode n, char **str, int qt, int pf_flags)
 		}
 	    }
 	}
+	if (vunset) {
+	    if (unset(UNSET)) {
+		*idend = '\0';
+		zerr("%s: parameter not set", idbeg);
+		return NULL;
+	    }
+	    val = dupstring("");
+	}
     } else {			/* no ${...=...} or anything, but possible modifiers. */
 	/*
 	 * Handler ${+...}.  TODO: strange, why do we handle this only
diff --git a/Test/D04parameter.ztst b/Test/D04parameter.ztst
index bea945971..a8cc93a12 100644
--- a/Test/D04parameter.ztst
+++ b/Test/D04parameter.ztst
@@ -1551,3 +1551,12 @@
 0:Empty parameter shouldn't cause modifiers to crash the shell
 >
 >
+
+# This used to cause uncontrolled behaviour, but at best
+# you got the wrong output so the check is worth it.
+   args() { print $#; }
+   args ${:*}
+   args ${:|}
+0:Intersection and disjunction with empty parameters
+>0
+>0