diff options
author | 2015-10-29 16:44:56 +0000 | |
---|---|---|
committer | 2016-03-21 14:28:06 -0400 | |
commit | 4194c2875310c13ee3ca2bb0e1aea6a2ae67c55a (patch) | |
tree | 30aefd9a2561892308cd186d495983f19785cd1d /shell | |
parent | 3a76bb5136d05f94ee62e377aa723e63444912c7 (diff) | |
download | busybox-4194c2875310c13ee3ca2bb0e1aea6a2ae67c55a.tar.gz busybox-4194c2875310c13ee3ca2bb0e1aea6a2ae67c55a.tar.bz2 |
ash: fix error during recursive processing of here document
Save the value of the checkkwd flag to prevent it being clobbered
during recursion.
Based on commit ec2c84d from git://git.kernel.org/pub/scm/utils/dash/dash.git
by Herbert Xu.
function old new delta
readtoken 190 203 +13
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 1/0 up/down: 13/0) Total: 13 bytes
Signed-off-by: Ron Yorston <rmy@pobox.com>
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
Signed-off-by: Mike Frysinger <vapier@gentoo.org>
(cherry picked from commit 713f07d906d9171953be0c12e2369869855b6ca6)
Diffstat (limited to 'shell')
-rw-r--r-- | shell/ash.c | 5 | ||||
-rw-r--r-- | shell/ash_test/ash-heredoc/heredoc3.right | 1 | ||||
-rwxr-xr-x | shell/ash_test/ash-heredoc/heredoc3.tests | 9 |
3 files changed, 13 insertions, 2 deletions
diff --git a/shell/ash.c b/shell/ash.c index 8a1628e81..256e933e3 100644 --- a/shell/ash.c +++ b/shell/ash.c @@ -11893,6 +11893,7 @@ static int readtoken(void) { int t; + int kwd = checkkwd; #if DEBUG smallint alreadyseen = tokpushback; #endif @@ -11906,7 +11907,7 @@ readtoken(void) /* * eat newlines */ - if (checkkwd & CHKNL) { + if (kwd & CHKNL) { while (t == TNL) { parseheredoc(); t = xxreadtoken(); @@ -11920,7 +11921,7 @@ readtoken(void) /* * check for keywords */ - if (checkkwd & CHKKWD) { + if (kwd & CHKKWD) { const char *const *pp; pp = findkwd(wordtext); diff --git a/shell/ash_test/ash-heredoc/heredoc3.right b/shell/ash_test/ash-heredoc/heredoc3.right new file mode 100644 index 000000000..ce0136250 --- /dev/null +++ b/shell/ash_test/ash-heredoc/heredoc3.right @@ -0,0 +1 @@ +hello diff --git a/shell/ash_test/ash-heredoc/heredoc3.tests b/shell/ash_test/ash-heredoc/heredoc3.tests new file mode 100755 index 000000000..96c227cc1 --- /dev/null +++ b/shell/ash_test/ash-heredoc/heredoc3.tests @@ -0,0 +1,9 @@ +echo hello >greeting +cat <<EOF && +$(cat greeting) +EOF +{ + echo $? + cat greeting +} >/dev/null +rm greeting |