svn commit: trunk/busybox/shell

vda at busybox.net vda at busybox.net
Sat Nov 24 00:22:42 UTC 2007


Author: vda
Date: 2007-11-23 16:22:42 -0800 (Fri, 23 Nov 2007)
New Revision: 20519

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



Modified:
   trunk/busybox/shell/hush.c


Changeset:
Modified: trunk/busybox/shell/hush.c
===================================================================
--- trunk/busybox/shell/hush.c	2007-11-23 23:39:01 UTC (rev 20518)
+++ trunk/busybox/shell/hush.c	2007-11-24 00:22:42 UTC (rev 20519)
@@ -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])




More information about the busybox-cvs mailing list