ash: parser: Do not push token back before parseheredoc
Upstream commit: Date: Mon, 19 Nov 2018 18:43:58 +0800 parser: Do not push token back before parseheredoc When we read the first token in list() we use peektoken instead of readtoken as the following code needs to use the same token again. However, this is wrong when we're in a here-document as it will clobber the saved token without resetting the tokpushback flag. This patch fixes it by doing the tokpushback after parseheredoc and setting lasttoken again if parseheredoc was called. Reported-by: Ron Yorston <rmy@frippery.org> Fixes: 7c245aa8ed33 ("[PARSER] Simplify EOF/newline handling in...") Fixes: ee5cbe9fd6bc ("[SHELL] Optimize dash -c "command" to avoid a fork") Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au> Tested-by: Simon Ser <contact@emersion.fr> Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
parent
9a1a659707
commit
c08993f40c
@ -11607,7 +11607,7 @@ list(int nlflag)
|
|||||||
|
|
||||||
n1 = NULL;
|
n1 = NULL;
|
||||||
for (;;) {
|
for (;;) {
|
||||||
switch (peektoken()) {
|
switch (readtoken()) {
|
||||||
case TNL:
|
case TNL:
|
||||||
if (!(nlflag & 1))
|
if (!(nlflag & 1))
|
||||||
break;
|
break;
|
||||||
@ -11618,9 +11618,12 @@ list(int nlflag)
|
|||||||
if (!n1 && (nlflag & 1))
|
if (!n1 && (nlflag & 1))
|
||||||
n1 = NODE_EOF;
|
n1 = NODE_EOF;
|
||||||
parseheredoc();
|
parseheredoc();
|
||||||
|
tokpushback++;
|
||||||
|
lasttoken = TEOF;
|
||||||
return n1;
|
return n1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
tokpushback++;
|
||||||
checkkwd = CHKNL | CHKKWD | CHKALIAS;
|
checkkwd = CHKNL | CHKKWD | CHKALIAS;
|
||||||
if (nlflag == 2 && ((1 << peektoken()) & tokendlist))
|
if (nlflag == 2 && ((1 << peektoken()) & tokendlist))
|
||||||
return n1;
|
return n1;
|
||||||
|
Loading…
Reference in New Issue
Block a user