diff options
author | Denys Vlasenko | 2023-06-12 16:37:19 +0200 |
---|---|---|
committer | Denys Vlasenko | 2023-06-12 16:39:32 +0200 |
commit | bab8828b0dad1d51d6b34e38249f0641ca64b1e9 (patch) | |
tree | e8726c89265aaad6f80581ad9059a0e74ea2de78 | |
parent | 8f0e4c42c630126daafd834175b86d2b28f5b798 (diff) | |
download | busybox-bab8828b0dad1d51d6b34e38249f0641ca64b1e9.zip busybox-bab8828b0dad1d51d6b34e38249f0641ca64b1e9.tar.gz |
hush: fix expansion of space in "a=${a:+$a }c" construct
function old new delta
encode_then_append_var_plusminus 554 552 -2
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
-rw-r--r-- | shell/ash_test/ash-quoting/space_in_varexp1.right | 2 | ||||
-rwxr-xr-x | shell/ash_test/ash-quoting/space_in_varexp1.tests | 6 | ||||
-rw-r--r-- | shell/hush.c | 2 | ||||
-rw-r--r-- | shell/hush_test/hush-quoting/space_in_varexp1.right | 2 | ||||
-rwxr-xr-x | shell/hush_test/hush-quoting/space_in_varexp1.tests | 6 |
5 files changed, 17 insertions, 1 deletions
diff --git a/shell/ash_test/ash-quoting/space_in_varexp1.right b/shell/ash_test/ash-quoting/space_in_varexp1.right new file mode 100644 index 0000000..a617a91 --- /dev/null +++ b/shell/ash_test/ash-quoting/space_in_varexp1.right @@ -0,0 +1,2 @@ +1:'b c' +2:'b c' diff --git a/shell/ash_test/ash-quoting/space_in_varexp1.tests b/shell/ash_test/ash-quoting/space_in_varexp1.tests new file mode 100755 index 0000000..1589587 --- /dev/null +++ b/shell/ash_test/ash-quoting/space_in_varexp1.tests @@ -0,0 +1,6 @@ +a=b +a=${a:+$a }c +echo "1:'$a'" +a=b +a="${a:+$a }c" +echo "2:'$a'" diff --git a/shell/hush.c b/shell/hush.c index cdaa67a..dbc4aec 100644 --- a/shell/hush.c +++ b/shell/hush.c @@ -6398,7 +6398,7 @@ static NOINLINE int encode_then_append_var_plusminus(o_string *output, int n, if (!dest.o_expflags) { if (ch == EOF) break; - if (!dquoted && strchr(G.ifs, ch)) { + if (!dquoted && !(output->o_expflags & EXP_FLAG_SINGLEWORD) && strchr(G.ifs, ch)) { /* PREFIX${x:d${e}f ...} and we met space: expand "d${e}f" and start new word. * do not assume we are at the start of the word (PREFIX above). */ diff --git a/shell/hush_test/hush-quoting/space_in_varexp1.right b/shell/hush_test/hush-quoting/space_in_varexp1.right new file mode 100644 index 0000000..a617a91 --- /dev/null +++ b/shell/hush_test/hush-quoting/space_in_varexp1.right @@ -0,0 +1,2 @@ +1:'b c' +2:'b c' diff --git a/shell/hush_test/hush-quoting/space_in_varexp1.tests b/shell/hush_test/hush-quoting/space_in_varexp1.tests new file mode 100755 index 0000000..1589587 --- /dev/null +++ b/shell/hush_test/hush-quoting/space_in_varexp1.tests @@ -0,0 +1,6 @@ +a=b +a=${a:+$a }c +echo "1:'$a'" +a=b +a="${a:+$a }c" +echo "2:'$a'" |