hush: fix a signedness bug
authorDenys Vlasenko <vda.linux@googlemail.com>
Fri, 30 Mar 2018 22:46:07 +0000 (00:46 +0200)
committerDenys Vlasenko <vda.linux@googlemail.com>
Sun, 1 Apr 2018 11:04:11 +0000 (13:04 +0200)
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>
shell/hush.c

index b76b8fda4a83a74d8d34cafb1aaea7dfc2d4c20c..e69903d10b5cd6894e645e11225e444c4ac6e40a 100644 (file)
@@ -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) {