diff options
author | Denys Vlasenko | 2018-03-31 00:46:07 +0200 |
---|---|---|
committer | Denys Vlasenko | 2018-04-01 13:04:11 +0200 |
commit | e04a38c0c91c17ce27fb11d83f6767614b7d6b59 (patch) | |
tree | fe0dae49077e82b1c34b44894854b23207b69d34 | |
parent | 78ee8fc3e457452a6cdd25802b85f45b064bb845 (diff) | |
download | busybox-e04a38c0c91c17ce27fb11d83f6767614b7d6b59.zip busybox-e04a38c0c91c17ce27fb11d83f6767614b7d6b59.tar.gz |
hush: fix a signedness bug
Testcase:
set -- a ""; space=" "; printf "<%s>\n" "$@"$space
Before:
<a >
After:
<a>
<>
It usually does not bite since bbox forces -funsigned-char build.
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
-rw-r--r-- | shell/hush.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/shell/hush.c b/shell/hush.c index b76b8fd..e69903d 100644 --- a/shell/hush.c +++ b/shell/hush.c @@ -6015,7 +6015,7 @@ static NOINLINE int expand_vars_to_list(o_string *output, int n, char *arg) } else /* If EXP_FLAG_SINGLEWORD, we handle assignment 'a=....$@.....' * and in this case should treat it like '$*' - see 'else...' below */ - if (first_ch == ('@'|0x80) /* quoted $@ */ + if (first_ch == (char)('@'|0x80) /* quoted $@ */ && !(output->o_expflags & EXP_FLAG_SINGLEWORD) /* not v="$@" case */ ) { while (1) { |