diff options
author | Peter Korsgaard <jacmet@sunsite.dk> | 2010-09-05 22:52:22 +0200 |
---|---|---|
committer | Peter Korsgaard <jacmet@sunsite.dk> | 2010-09-05 22:52:22 +0200 |
commit | 45b776f2017550d4c4740a595345a9ac34a2040e (patch) | |
tree | 162886253761f8decfe17bf8cfb36bd6dd0bca96 /package/busybox/busybox-1.17.2/busybox-1.17.2-hush.patch | |
parent | f661b023ab0bff19575992126d4646c8c8de7d6c (diff) |
busybox: additional 1.17.2 fixes
Signed-off-by: Peter Korsgaard <jacmet@sunsite.dk>
Diffstat (limited to 'package/busybox/busybox-1.17.2/busybox-1.17.2-hush.patch')
-rw-r--r-- | package/busybox/busybox-1.17.2/busybox-1.17.2-hush.patch | 122 |
1 files changed, 122 insertions, 0 deletions
diff --git a/package/busybox/busybox-1.17.2/busybox-1.17.2-hush.patch b/package/busybox/busybox-1.17.2/busybox-1.17.2-hush.patch new file mode 100644 index 000000000..3bcb5f31f --- /dev/null +++ b/package/busybox/busybox-1.17.2/busybox-1.17.2-hush.patch @@ -0,0 +1,122 @@ +diff -urpN busybox-1.17.2/shell/hush.c busybox-1.17.2-hush/shell/hush.c +--- busybox-1.17.2/shell/hush.c 2010-08-23 02:45:15.000000000 +0200 ++++ busybox-1.17.2-hush/shell/hush.c 2010-09-04 19:44:57.381391123 +0200 +@@ -1853,7 +1853,7 @@ static void o_addblock_duplicate_backsla + while (len) { + o_addchr(o, *str); + if (*str++ == '\\' +- && (*str != '*' && *str != '?' && *str != '[') ++// && (*str != '*' && *str != '?' && *str != '[') + ) { + o_addchr(o, '\\'); + } +@@ -2834,18 +2834,22 @@ static NOINLINE int expand_vars_to_list( + return n; + } + +-static char **expand_variables(char **argv, int or_mask) ++enum { ++ EXPVAR_FLAG_GLOB = 0x200, ++ EXPVAR_FLAG_ESCAPE_VARS = 0x100, ++ EXPVAR_FLAG_SINGLEWORD = 0x80, /* must be 0x80 */ ++}; ++static char **expand_variables(char **argv, unsigned or_mask) + { + int n; + char **list; + char **v; + o_string output = NULL_O_STRING; + +- if (or_mask & 0x100) { +- output.o_escape = 1; /* protect against globbing for "$var" */ +- /* (unquoted $var will temporarily switch it off) */ +- output.o_glob = 1; +- } ++ /* protect against globbing for "$var"? */ ++ /* (unquoted $var will temporarily switch it off) */ ++ output.o_escape = 1 & (or_mask / EXPVAR_FLAG_ESCAPE_VARS); ++ output.o_glob = 1 & (or_mask / EXPVAR_FLAG_GLOB); + + n = 0; + v = argv; +@@ -2863,13 +2867,13 @@ static char **expand_variables(char **ar + + static char **expand_strvec_to_strvec(char **argv) + { +- return expand_variables(argv, 0x100); ++ return expand_variables(argv, EXPVAR_FLAG_GLOB | EXPVAR_FLAG_ESCAPE_VARS); + } + + #if ENABLE_HUSH_BASH_COMPAT + static char **expand_strvec_to_strvec_singleword_noglob(char **argv) + { +- return expand_variables(argv, 0x80); ++ return expand_variables(argv, EXPVAR_FLAG_SINGLEWORD); + } + #endif + +@@ -2909,15 +2913,15 @@ static char **expand_strvec_to_strvec_si + #endif + + /* Used for expansion of right hand of assignments */ +-/* NB: should NOT do globbing! "export v=/bin/c*; env | grep ^v=" outputs +- * "v=/bin/c*" */ ++/* NB: should NOT do globbing! ++ * "export v=/bin/c*; env | grep ^v=" outputs "v=/bin/c*" */ + static char *expand_string_to_string(const char *str) + { + char *argv[2], **list; + + argv[0] = (char*)str; + argv[1] = NULL; +- list = expand_variables(argv, 0x80); /* 0x80: singleword expansion */ ++ list = expand_variables(argv, EXPVAR_FLAG_ESCAPE_VARS | EXPVAR_FLAG_SINGLEWORD); + if (HUSH_DEBUG) + if (!list[0] || list[1]) + bb_error_msg_and_die("BUG in varexp2"); +@@ -2933,7 +2937,7 @@ static char* expand_strvec_to_string(cha + { + char **list; + +- list = expand_variables(argv, 0x80); ++ list = expand_variables(argv, EXPVAR_FLAG_SINGLEWORD); + /* Convert all NULs to spaces */ + if (list[0]) { + int n = 1; +diff -urpN busybox-1.17.2/shell/hush_test/hush-vars/var_unbackslash.right busybox-1.17.2-hush/shell/hush_test/hush-vars/var_unbackslash.right +--- busybox-1.17.2/shell/hush_test/hush-vars/var_unbackslash.right 1970-01-01 01:00:00.000000000 +0100 ++++ busybox-1.17.2-hush/shell/hush_test/hush-vars/var_unbackslash.right 2010-09-04 19:44:57.382391186 +0200 +@@ -0,0 +1,9 @@ ++b1=-qwerty-t-\-"---z-*-?- ++b1=-qwerty-t-\-"---z-*-?- ++b2=-$a-\t-\\-\"-\--\z-\*-\?- ++b2=-$a-\t-\\-\"-\--\z-\*-\?- ++c=-$a-\t-\\-\"-\--\z-\*-\?- ++c=-$a-\t-\\-\"-\--\z-\*-\?- ++c=-$a-\t-\\-\"-\--\z-\*-\?- ++c=-$a-\t-\\-\"-\--\z-\*-\?- ++Done: 0 +diff -urpN busybox-1.17.2/shell/hush_test/hush-vars/var_unbackslash.tests busybox-1.17.2-hush/shell/hush_test/hush-vars/var_unbackslash.tests +--- busybox-1.17.2/shell/hush_test/hush-vars/var_unbackslash.tests 1970-01-01 01:00:00.000000000 +0100 ++++ busybox-1.17.2-hush/shell/hush_test/hush-vars/var_unbackslash.tests 2010-09-04 19:44:57.382391186 +0200 +@@ -0,0 +1,20 @@ ++# Test for correct handling of backslashes ++a=qwerty ++ ++b=-$a-\t-\\-\"-\--\z-\*-\?- ++echo b1=$b ++echo "b1=$b" ++b='-$a-\t-\\-\"-\--\z-\*-\?-' ++echo b2=$b ++echo "b2=$b" ++ ++c=$b ++echo "c=$c" ++c=${b} ++echo "c=$c" ++c="$b" ++echo "c=$c" ++c="${b}" ++echo "c=$c" ++ ++echo "Done: $?" |