hush: fix segfault in "echo $@" when we have no arguments

diff --git a/shell/hush.c b/shell/hush.c
index b3c77aa..a9c1fe7 100644
--- a/shell/hush.c
+++ b/shell/hush.c
@@ -2468,7 +2468,7 @@
 			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 @@
 		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 @@
 					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])