From 459293b1c536515fbe7fafbae9932aefadb2fbaf Mon Sep 17 00:00:00 2001 From: Denys Vlasenko Date: Thu, 29 Sep 2016 17:58:58 +0200 Subject: [PATCH] ash: fix arithmetic closing )) split by backslash-newline Signed-off-by: Denys Vlasenko --- shell/ash.c | 3 ++- .../ash_test/ash-vars/var_unbackslash1.right | 4 ++++ .../ash_test/ash-vars/var_unbackslash1.tests | 20 +++++++++++++++++++ .../hush-vars/var_unbackslash1.right | 4 ++++ .../hush-vars/var_unbackslash1.tests | 20 +++++++++++++++++++ 5 files changed, 50 insertions(+), 1 deletion(-) diff --git a/shell/ash.c b/shell/ash.c index b71fc0299..97f8d9377 100644 --- a/shell/ash.c +++ b/shell/ash.c @@ -11437,7 +11437,7 @@ readtoken1(int c, int syntax, char *eofmark, int striptabs) if (parenlevel > 0) { parenlevel--; } else { - if (pgetc() == ')') { + if (pgetc_eatbnl() == ')') { c = CTLENDARI; if (--arinest == 0) { syntax = prevsyntax; @@ -11464,6 +11464,7 @@ readtoken1(int c, int syntax, char *eofmark, int striptabs) if (varnest == 0) { #if ENABLE_ASH_BASH_COMPAT if (c == '&') { +//Can't call pgetc_eatbnl() here, this requires three-deep pungetc() if (pgetc() == '>') c = 0x100 + '>'; /* flag &> */ pungetc(); diff --git a/shell/ash_test/ash-vars/var_unbackslash1.right b/shell/ash_test/ash-vars/var_unbackslash1.right index 8d4eca34e..3e0c0e2af 100644 --- a/shell/ash_test/ash-vars/var_unbackslash1.right +++ b/shell/ash_test/ash-vars/var_unbackslash1.right @@ -1,3 +1,7 @@ Ok Ba d Ok +Ok +Ok +Forty two:42 +Forty two:42 diff --git a/shell/ash_test/ash-vars/var_unbackslash1.tests b/shell/ash_test/ash-vars/var_unbackslash1.tests index 8a9f2e249..cddd8ae5e 100755 --- a/shell/ash_test/ash-vars/var_unbackslash1.tests +++ b/shell/ash_test/ash-vars/var_unbackslash1.tests @@ -13,3 +13,23 @@ d' eval $e # "Ok" eval "$e" + +echo $\ +(echo Ok\ +) +echo "$\ +(echo Ok\ +)" + +echo Forty two:$\ +(\ +(\ +42\ +)\ +) +echo "Forty two:$\ +(\ +(\ +42\ +)\ +)" \ No newline at end of file diff --git a/shell/hush_test/hush-vars/var_unbackslash1.right b/shell/hush_test/hush-vars/var_unbackslash1.right index 8d4eca34e..3e0c0e2af 100644 --- a/shell/hush_test/hush-vars/var_unbackslash1.right +++ b/shell/hush_test/hush-vars/var_unbackslash1.right @@ -1,3 +1,7 @@ Ok Ba d Ok +Ok +Ok +Forty two:42 +Forty two:42 diff --git a/shell/hush_test/hush-vars/var_unbackslash1.tests b/shell/hush_test/hush-vars/var_unbackslash1.tests index 8a9f2e249..cddd8ae5e 100755 --- a/shell/hush_test/hush-vars/var_unbackslash1.tests +++ b/shell/hush_test/hush-vars/var_unbackslash1.tests @@ -13,3 +13,23 @@ d' eval $e # "Ok" eval "$e" + +echo $\ +(echo Ok\ +) +echo "$\ +(echo Ok\ +)" + +echo Forty two:$\ +(\ +(\ +42\ +)\ +) +echo "Forty two:$\ +(\ +(\ +42\ +)\ +)" \ No newline at end of file