From 07951cfffb218291e7574b874660eab652cb54f1 Mon Sep 17 00:00:00 2001 From: Herbert Xu Date: Wed, 29 Apr 2020 00:19:59 +1000 Subject: parser: Fix alias expansion after heredoc or newlines This script should print OK: alias a="case x in " b=x a b) echo BAD;; esac alias BEGIN={ END=} BEGIN cat <<- EOF > /dev/null $(:) EOF END : <<- EOF && $(:) EOF BEGIN echo OK END However, because the value of checkkwd is either zeroed when it shouldn't, or isn't zeroed when it should, dash currently gets it wrong in every case. This patch fixes it by saving checkkwd and zeroing it where needed. Suggested-by: Harald van Dijk Reported-by: Harald van Dijk Reported-by: Martijn Dekker Signed-off-by: Herbert Xu --- src/parser.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/parser.c b/src/parser.c index 9c9a7dc..3131045 100644 --- a/src/parser.c +++ b/src/parser.c @@ -704,10 +704,14 @@ top: if (kwd & CHKNL) { while (t == TNL) { parseheredoc(); + checkkwd = 0; t = xxreadtoken(); } } + kwd |= checkkwd; + checkkwd = 0; + if (t != TWORD || quoteflag) { goto out; } @@ -725,7 +729,7 @@ top: } } - if (checkkwd & CHKALIAS) { + if (kwd & CHKALIAS) { struct alias *ap; if ((ap = lookupalias(wordtext, 1)) != NULL) { if (*ap->val) { @@ -735,7 +739,6 @@ top: } } out: - checkkwd = 0; #ifdef DEBUG if (!alreadyseen) TRACE(("token %s %s\n", tokname[t], t == TWORD ? wordtext : "")); -- cgit 1.4.1 f
Commit message (Expand)Author
2014-04-12git: update to 1.9.2Christian Hesse
2014-04-05Fix cgit_parse_url when a repo url is contained in another repo urlJulian Maurice
2014-03-20Makefile: use more reliable git tarball mirrorJason A. Donenfeld
2014-03-20git: update to 1.9.1Christian Hesse