summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDenys Vlasenko2016-09-29 17:58:58 +0200
committerDenys Vlasenko2016-09-29 17:58:58 +0200
commit459293b1c536515fbe7fafbae9932aefadb2fbaf (patch)
tree949cfa9001df3b0bea827200565eb8f36f028939
parent73c3e074df4de03ba1bebce09c130c8950ea5fe4 (diff)
downloadbusybox-459293b1c536515fbe7fafbae9932aefadb2fbaf.zip
busybox-459293b1c536515fbe7fafbae9932aefadb2fbaf.tar.gz
ash: fix arithmetic closing )) split by backslash-newline
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
-rw-r--r--shell/ash.c3
-rw-r--r--shell/ash_test/ash-vars/var_unbackslash1.right4
-rwxr-xr-xshell/ash_test/ash-vars/var_unbackslash1.tests20
-rw-r--r--shell/hush_test/hush-vars/var_unbackslash1.right4
-rwxr-xr-xshell/hush_test/hush-vars/var_unbackslash1.tests20
5 files changed, 50 insertions, 1 deletions
diff --git a/shell/ash.c b/shell/ash.c
index b71fc02..97f8d93 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 8d4eca3..3e0c0e2 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 8a9f2e2..cddd8ae 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 8d4eca3..3e0c0e2 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 8a9f2e2..cddd8ae 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