svn commit: trunk/busybox/shell: hush_test/hush-vars

vda at busybox.net vda at busybox.net
Wed Jun 18 17:49:59 UTC 2008


Author: vda
Date: 2008-06-18 10:49:58 -0700 (Wed, 18 Jun 2008)
New Revision: 22439

Log:
fix globbing in unquoted $* and $@



Added:
   trunk/busybox/shell/hush_test/hush-vars/param_glob.right
   trunk/busybox/shell/hush_test/hush-vars/param_glob.tests

Modified:
   trunk/busybox/shell/hush.c


Changeset:
Modified: trunk/busybox/shell/hush.c
===================================================================
--- trunk/busybox/shell/hush.c	2008-06-18 17:16:06 UTC (rev 22438)
+++ trunk/busybox/shell/hush.c	2008-06-18 17:49:58 UTC (rev 22439)
@@ -342,6 +342,8 @@
 	char *data;
 	int length;
 	int maxlen;
+	/* Misnomer! it's not "quoting", it's "protection against globbing"!
+	 * (by prepending \ to *, ?, [ and to \ too) */
 	smallint o_quote;
 	smallint o_glob;
 	smallint nonnull;
@@ -2398,8 +2400,10 @@
 			if (!global_argv[i])
 				break;
 			if (!(first_ch & 0x80)) { /* unquoted $* or $@ */
+				smallint sv = output->o_quote;
+				/* unquoted var's contents should be globbed, so don't quote */
+				output->o_quote = 0;
 				while (global_argv[i]) {
-//see expand_on_ifs below - same??
 					n = expand_on_ifs(output, n, global_argv[i]);
 					debug_printf_expand("expand_vars_to_list: argv %d (last %d)\n", i, global_argc-1);
 					if (global_argv[i++][0] && global_argv[i]) {
@@ -2411,12 +2415,13 @@
 						debug_print_list("expand_vars_to_list[3]", output, n);
 					}
 				}
+				output->o_quote = sv;
 			} else
 			/* If or_mask is nonzero, we handle assignment 'a=....$@.....'
 			 * and in this case should treat it like '$*' - see 'else...' below */
 			if (first_ch == ('@'|0x80) && !or_mask) { /* quoted $@ */
 				while (1) {
-					o_addQstr(output, global_argv[i], strlen(global_argv[i])); ///really Q?
+					o_addQstr(output, global_argv[i], strlen(global_argv[i]));
 					if (++i >= global_argc)
 						break;
 					o_addchr(output, '\0');
@@ -2425,7 +2430,7 @@
 				}
 			} else { /* quoted $*: add as one word */
 				while (1) {
-					o_addQstr(output, global_argv[i], strlen(global_argv[i])); ///really Q?
+					o_addQstr(output, global_argv[i], strlen(global_argv[i]));
 					if (!global_argv[++i])
 						break;
 					if (ifs[0])
@@ -2482,7 +2487,7 @@
 			}
 		}
 		if (val) {
-			o_addQstr(output, val, strlen(val)); ///maybe q?
+			o_addQstr(output, val, strlen(val));
 		}
 
 #if ENABLE_HUSH_TICK
@@ -2517,8 +2522,8 @@
 	o_string output = NULL_O_STRING;
 
 	if (or_mask & 0x100) {
-		output.o_quote = 1;
-/* why? */
+		output.o_quote = 1; /* protect against globbing for "$var" */
+		/* (unquoted $var will temporarily switch it off) */
 		output.o_glob = 1;
 	}
 

Added: trunk/busybox/shell/hush_test/hush-vars/param_glob.right
===================================================================
--- trunk/busybox/shell/hush_test/hush-vars/param_glob.right	                        (rev 0)
+++ trunk/busybox/shell/hush_test/hush-vars/param_glob.right	2008-06-18 17:49:58 UTC (rev 22439)
@@ -0,0 +1,4 @@
+param_glob.tests
+param_glob.tests
+param_glob.t*
+param_glob.t*

Added: trunk/busybox/shell/hush_test/hush-vars/param_glob.tests
===================================================================
--- trunk/busybox/shell/hush_test/hush-vars/param_glob.tests	                        (rev 0)
+++ trunk/busybox/shell/hush_test/hush-vars/param_glob.tests	2008-06-18 17:49:58 UTC (rev 22439)
@@ -0,0 +1,10 @@
+if test $# = 0; then
+    #BUG in builtin_exec! will glob param!
+    #exec "$THIS_SH" "$0" 'param_glob.t*'
+    "$THIS_SH" "$0" 'param_glob.t*'
+    exit
+fi
+echo $*
+echo $@
+echo "$*"
+echo "$@"


Property changes on: trunk/busybox/shell/hush_test/hush-vars/param_glob.tests
___________________________________________________________________
Name: svn:executable
   + *




More information about the busybox-cvs mailing list