summaryrefslogtreecommitdiff
path: root/Src/exec.c
diff options
context:
space:
mode:
authorPeter Stephenson <p.w.stephenson@ntlworld.com>2015-01-18 22:38:57 +0000
committerPeter Stephenson <p.w.stephenson@ntlworld.com>2015-01-18 22:38:57 +0000
commitc6c9f5daf2e196e6ab7346dfbf5f5166a1d87f0c (patch)
treede064fa6ba629549d42868b7016dd3c28bfb0e34 /Src/exec.c
parent6856ab39e32e0cba96fcdae004878938125890ac (diff)
downloadzsh-c6c9f5daf2e196e6ab7346dfbf5f5166a1d87f0c.tar.gz
zsh-c6c9f5daf2e196e6ab7346dfbf5f5166a1d87f0c.zip
34322: bug with interface to parsestr() etc.
Was showing up in places like ${(e)...} where command substitution could reallocate the token string, but actually there was never any guarantee that the lexer wouldn't do that, so this was always a bit iffy.
Diffstat (limited to 'Src/exec.c')
-rw-r--r--Src/exec.c9
1 files changed, 5 insertions, 4 deletions
diff --git a/Src/exec.c b/Src/exec.c
index 7b6495113..f42fb2b9b 100644
--- a/Src/exec.c
+++ b/Src/exec.c
@@ -3772,19 +3772,20 @@ gethere(char **strp, int typ)
*bptr++ = '\n';
}
*t = '\0';
+ s = buf;
+ buf = dupstring(buf);
+ zfree(s, bsiz);
if (!qt) {
int ef = errflag;
- parsestr(buf);
+ parsestr(&buf);
if (!errflag) {
/* Retain any user interrupt error */
errflag = ef | (errflag & ERRFLAG_INT);
}
}
- s = dupstring(buf);
- zfree(buf, bsiz);
- return s;
+ return buf;
}
/* open here string fd */