[git commit] ash: fix arithmetic closing )) split by backslash-newline

Denys Vlasenko vda.linux at googlemail.com
Thu Sep 29 15:58:58 UTC 2016


commit: https://git.busybox.net/busybox/commit/?id=459293b1c536515fbe7fafbae9932aefadb2fbaf
branch: https://git.busybox.net/busybox/commit/?id=refs/heads/master

Signed-off-by: Denys Vlasenko <vda.linux at googlemail.com>
---
 shell/ash.c                                      |  3 ++-
 shell/ash_test/ash-vars/var_unbackslash1.right   |  4 ++++
 shell/ash_test/ash-vars/var_unbackslash1.tests   | 20 ++++++++++++++++++++
 shell/hush_test/hush-vars/var_unbackslash1.right |  4 ++++
 shell/hush_test/hush-vars/var_unbackslash1.tests | 20 ++++++++++++++++++++
 5 files changed, 50 insertions(+), 1 deletion(-)

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


More information about the busybox-cvs mailing list