about summary refs log tree commit diff
path: root/Src/subst.c
diff options
context:
space:
mode:
Diffstat (limited to 'Src/subst.c')
-rw-r--r--Src/subst.c13
1 files changed, 8 insertions, 5 deletions
diff --git a/Src/subst.c b/Src/subst.c
index f2d0f6553..8644ea0d6 100644
--- a/Src/subst.c
+++ b/Src/subst.c
@@ -3041,18 +3041,20 @@ paramsubst(LinkList l, LinkNode n, char **str, int qt, int pf_flags,
 	    val = dupstring("");
 	} else {
 	    char *sval;
-	    zip = getaparam(s);
+	    int ziplen;
+	    zip = getaparam(s, &ziplen);
 	    if (!zip) {
 		sval = getsparam(s);
 		if (sval)
 		    zip = hmkarray(sval);
+		ziplen = 1;
+		ziplen = !!sval;
 	    }
 	    if (!isarr) aval = mkarray(val);
 	    if (zip) {
 		char **out;
-		int alen, ziplen, outlen, i = 0;
+		int alen, outlen, i = 0;
 		alen = arrlen(aval);
-		ziplen = arrlen(zip);
 		outlen = shortest ^ (alen > ziplen) ? alen : ziplen;
 		if (!shortest && (alen == 0 || ziplen == 0)) {
 		    if (ziplen)
@@ -3083,6 +3085,7 @@ paramsubst(LinkList l, LinkNode n, char **str, int qt, int pf_flags,
     } else if (inbrace && (*s == '|' || *s == Bar ||
 			   *s == '*' || *s == Star)) {
 	int intersect = (*s == '*' || *s == Star);
+	int compare_len;
 	char **compare, **ap, **apsrc;
 	++s;
 	if (*itype_end(s, IIDENT, 0)) {
@@ -3090,9 +3093,9 @@ paramsubst(LinkList l, LinkNode n, char **str, int qt, int pf_flags,
 	    zerr("not an identifier: %s", s);
 	    return NULL;
 	}
-	compare = getaparam(s);
+	compare = getaparam(s, &compare_len);
 	if (compare) {
-	    HashTable ht = newuniqtable(arrlen(compare)+1);
+	    HashTable ht = newuniqtable(compare_len+1);
 	    int present;
 	    for (ap = compare; *ap; ap++)
 		(void)addhashnode2(ht, *ap, (HashNode)