diff options
author | Peter Stephenson <p.w.stephenson@ntlworld.com> | 2015-01-18 22:38:57 +0000 |
---|---|---|
committer | Peter Stephenson <p.w.stephenson@ntlworld.com> | 2015-01-18 22:38:57 +0000 |
commit | c6c9f5daf2e196e6ab7346dfbf5f5166a1d87f0c (patch) | |
tree | de064fa6ba629549d42868b7016dd3c28bfb0e34 /Src/exec.c | |
parent | 6856ab39e32e0cba96fcdae004878938125890ac (diff) | |
download | zsh-c6c9f5daf2e196e6ab7346dfbf5f5166a1d87f0c.tar.gz zsh-c6c9f5daf2e196e6ab7346dfbf5f5166a1d87f0c.tar.xz 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.c | 9 |
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 */ |