mirror of
https://github.com/sheumann/hush.git
synced 2024-08-26 12:29:04 +00:00
hush: fix segfault in "echo $@" when we have no arguments
This commit is contained in:
parent
d2023283ac
commit
c3c6659f12
10
shell/hush.c
10
shell/hush.c
@ -2468,7 +2468,7 @@ static void count_var_expansion_space(int *countp, int *lenp, char *arg)
|
||||
break;
|
||||
case '*':
|
||||
case '@':
|
||||
for (i = 1; i < global_argc; i++) {
|
||||
for (i = 1; global_argv[i]; i++) {
|
||||
len += strlen(global_argv[i]) + 1;
|
||||
count++;
|
||||
if (!(first_ch & 0x80))
|
||||
@ -2581,11 +2581,13 @@ static int expand_vars_to_list(char **list, int n, char **posp, char *arg, char
|
||||
case '*':
|
||||
case '@':
|
||||
i = 1;
|
||||
if (!global_argv[i])
|
||||
break;
|
||||
if (!(first_ch & 0x80)) { /* unquoted $* or $@ */
|
||||
while (i < global_argc) {
|
||||
while (global_argv[i]) {
|
||||
n = expand_on_ifs(list, n, &pos, global_argv[i]);
|
||||
debug_printf_expand("expand_vars_to_list: argv %d (last %d)\n", i, global_argc-1);
|
||||
if (global_argv[i++][0] && i < global_argc) {
|
||||
if (global_argv[i++][0] && global_argv[i]) {
|
||||
/* this argv[] is not empty and not last:
|
||||
* put terminating NUL, start new word */
|
||||
*pos++ = '\0';
|
||||
@ -2611,7 +2613,7 @@ static int expand_vars_to_list(char **list, int n, char **posp, char *arg, char
|
||||
list[n++] = pos;
|
||||
}
|
||||
} else { /* quoted $*: add as one word */
|
||||
if (global_argv[i]) while (1) {
|
||||
while (1) {
|
||||
strcpy(pos, global_argv[i]);
|
||||
pos += strlen(global_argv[i]);
|
||||
if (!global_argv[++i])
|
||||
|
Loading…
Reference in New Issue
Block a user