1
0
Fork 0
mirror of git://git.code.sf.net/p/zsh/code synced 2025-10-23 04:30:24 +02:00

34560: Fix $(( that's actually a multiline cmd subst.

This commit is contained in:
Peter Stephenson 2015-02-16 17:16:57 +00:00
parent 041a85243e
commit 126fb61c7c
5 changed files with 73 additions and 2 deletions

View file

@ -330,8 +330,37 @@ inputline(void)
}
}
isfirstch = 1;
/* Put this into the input channel. */
inputsetline(ingetcline, INP_FREE);
if ((inbufflags & INP_APPEND) && inbuf) {
/*
* We need new input but need to be able to back up
* over the old input, so append this line.
* Pushing the line onto the stack doesn't have the right
* effect.
*
* This is quite a simple and inefficient fix, but currently
* we only need it when backing up over a multi-line $((...
* that turned out to be a command substitution rather than
* a math substitution, which is a very special case.
* So it's not worth rewriting.
*/
char *oinbuf = inbuf;
int newlen = strlen(ingetcline);
int oldlen = (int)(inbufptr - inbuf) + inbufleft;
if (inbufflags & INP_FREE) {
inbuf = realloc(inbuf, oldlen + newlen + 1);
inbufptr += inbuf - oinbuf;
strcpy(inbuf + oldlen, ingetcline);
} else {
/* Paranoia: don't think this is used */
DPUTS(1, "Appending to unallocated input line.");
}
inbufleft += newlen;
inbufct += newlen;
inbufflags |= INP_FREE;
} else {
/* Put this into the input channel. */
inputsetline(ingetcline, INP_FREE);
}
return 0;
}