[git commit] hush: fix quoted "${notexist-}" expansion to not disappear

Denys Vlasenko vda.linux at googlemail.com
Wed May 15 11:39:19 UTC 2019


commit: https://git.busybox.net/busybox/commit/?id=9e0adb9b09ec14afe2e5a222dda1c447f336ea06
branch: https://git.busybox.net/busybox/commit/?id=refs/heads/master

function                                             old     new   delta
expand_one_var                                      2296    2311     +15

Signed-off-by: Denys Vlasenko <vda.linux at googlemail.com>
---
 shell/ash_test/ash-vars/param_expand_default.right   | 2 ++
 shell/ash_test/ash-vars/param_expand_default.tests   | 5 +++++
 shell/hush.c                                         | 6 ++++++
 shell/hush_test/hush-vars/param_expand_default.right | 2 ++
 shell/hush_test/hush-vars/param_expand_default.tests | 5 +++++
 5 files changed, 20 insertions(+)

diff --git a/shell/ash_test/ash-vars/param_expand_default.right b/shell/ash_test/ash-vars/param_expand_default.right
index 3eecd1375..7a42f67e8 100644
--- a/shell/ash_test/ash-vars/param_expand_default.right
+++ b/shell/ash_test/ash-vars/param_expand_default.right
@@ -5,3 +5,5 @@ _aaaa _aaaa _aaaa _aaaa _aaaa
 _ _ _ _word _word
 _ _ _ _ _word
 _fff _fff _fff _fff _fff
+1:1
+0:0
diff --git a/shell/ash_test/ash-vars/param_expand_default.tests b/shell/ash_test/ash-vars/param_expand_default.tests
index 5e42d30e3..b5edfe1c5 100755
--- a/shell/ash_test/ash-vars/param_expand_default.tests
+++ b/shell/ash_test/ash-vars/param_expand_default.tests
@@ -21,3 +21,8 @@ echo _$f _${f-} _${f:-} _${f-word} _${f:-word}
 
 f=fff
 echo _$f _${f-} _${f:-} _${f-word} _${f:-word}
+
+set --
+set -- "${1-}"; echo 1:$#
+set --
+set -- ${1-}; echo 0:$#
diff --git a/shell/hush.c b/shell/hush.c
index b612c80da..a103e8169 100644
--- a/shell/hush.c
+++ b/shell/hush.c
@@ -6132,6 +6132,12 @@ static int encode_then_append_var_plusminus(o_string *output, int n,
 		/* string has no special chars
 		 * && string has no $IFS chars
 		 */
+		if (dquoted) {
+			/* Prints 1 (quoted expansion is a "" word, not nothing):
+			 * set -- "${notexist-}"; echo $#
+			 */
+			output->has_quoted_part = 1;
+		}
 		return expand_vars_to_list(output, n, str);
 	}
 
diff --git a/shell/hush_test/hush-vars/param_expand_default.right b/shell/hush_test/hush-vars/param_expand_default.right
index acc717205..dbade3003 100644
--- a/shell/hush_test/hush-vars/param_expand_default.right
+++ b/shell/hush_test/hush-vars/param_expand_default.right
@@ -6,3 +6,5 @@ _aaaa _aaaa _aaaa _aaaa _aaaa
 _ _ _ _word _word
 _ _ _ _ _word
 _fff _fff _fff _fff _fff
+1:1
+0:0
diff --git a/shell/hush_test/hush-vars/param_expand_default.tests b/shell/hush_test/hush-vars/param_expand_default.tests
index 16e5f8efe..754827ab3 100755
--- a/shell/hush_test/hush-vars/param_expand_default.tests
+++ b/shell/hush_test/hush-vars/param_expand_default.tests
@@ -22,3 +22,8 @@ echo _$f _${f-} _${f:-} _${f-word} _${f:-word}
 
 f=fff
 echo _$f _${f-} _${f:-} _${f-word} _${f:-word}
+
+set --
+set -- "${1-}"; echo 1:$#
+set --
+set -- ${1-}; echo 0:$#


More information about the busybox-cvs mailing list