From 0df7bfd74aadd258d040c25fbe9e63d0298fa63b Mon Sep 17 00:00:00 2001 From: Ron Yorston Date: Thu, 29 Oct 2015 16:44:56 +0000 Subject: [PATCH] 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 --- shell/ash.c | 5 +++-- shell/ash_test/ash-heredoc/heredoc3.right | 1 + shell/ash_test/ash-heredoc/heredoc3.tests | 9 +++++++++ 3 files changed, 13 insertions(+), 2 deletions(-) create mode 100644 shell/ash_test/ash-heredoc/heredoc3.right create mode 100755 shell/ash_test/ash-heredoc/heredoc3.tests diff --git a/shell/ash.c b/shell/ash.c index f13dd2a..753eacf 100644 --- a/shell/ash.c +++ b/shell/ash.c @@ -11887,6 +11887,7 @@ static int readtoken(void) { int t; + int kwd = checkkwd; #if DEBUG smallint alreadyseen = tokpushback; #endif @@ -11900,7 +11901,7 @@ readtoken(void) /* * eat newlines */ - if (checkkwd & CHKNL) { + if (kwd & CHKNL) { while (t == TNL) { parseheredoc(); t = xxreadtoken(); @@ -11914,7 +11915,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 0000000..ce01362 --- /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 0000000..96c227c --- /dev/null +++ b/shell/ash_test/ash-heredoc/heredoc3.tests @@ -0,0 +1,9 @@ +echo hello >greeting +cat </dev/null +rm greeting -- 2.6.1