about summary refs log tree commit diff
path: root/Src
diff options
context:
space:
mode:
authorClint Adams <clint@users.sourceforge.net>2000-09-19 16:47:38 +0000
committerClint Adams <clint@users.sourceforge.net>2000-09-19 16:47:38 +0000
commit9f012ce7c91cf517242bd2d26e6d97dca61f791c (patch)
treea673824bf8e605467ecc6a09057c34eccc5e916b /Src
parent946085efa5b9b949664ab94fcda302914936a1c5 (diff)
downloadzsh-9f012ce7c91cf517242bd2d26e6d97dca61f791c.tar.gz
zsh-9f012ce7c91cf517242bd2d26e6d97dca61f791c.tar.xz
zsh-9f012ce7c91cf517242bd2d26e6d97dca61f791c.zip
12847: dynamically allocate buf and z in bin_whence()
Diffstat (limited to 'Src')
-rw-r--r--Src/builtin.c14
1 files changed, 6 insertions, 8 deletions
diff --git a/Src/builtin.c b/Src/builtin.c
index 6fa8da6e3..efbbd20d9 100644
--- a/Src/builtin.c
+++ b/Src/builtin.c
@@ -2390,17 +2390,14 @@ bin_whence(char *nam, char **argv, char *ops, int func)
 	/* Option -a is to search the entire path, *
 	 * rather than just looking for one match. */
 	if (all) {
-	    char **pp, buf[PATH_MAX], *z;
+	    char **pp, *buf, *z;
 
+	    pushheap();
 	    for (pp = path; *pp; pp++) {
-		z = buf;
 		if (**pp) {
-		    strucpy(&z, *pp);
-		    *z++ = '/';
-		}
-		if ((z - buf) + strlen(*argv) >= PATH_MAX)
-		    continue;
-		strcpy(z, *argv);
+		    z = dyncat(*pp, "/");
+		} else z = NULL;
+		buf = dyncat(z, *argv);
 		if (iscom(buf)) {
 		    if (wd) {
 			printf("%s: command\n", *argv);
@@ -2420,6 +2417,7 @@ bin_whence(char *nam, char **argv, char *ops, int func)
 		puts(wd ? ": none" : " not found");
 		returnval = 1;
 	    }
+	    popheap();
 	} else if ((cnam = findcmd(*argv, 1))) {
 	    /* Found external command. */
 	    if (wd) {