diff options
-rw-r--r-- | shell/ash.c | 10 | ||||
-rw-r--r-- | shell/ash_test/ash-glob/glob_bkslash_in_var.right | 4 | ||||
-rwxr-xr-x | shell/ash_test/ash-glob/glob_bkslash_in_var.tests | 10 | ||||
-rw-r--r-- | shell/hush_test/hush-glob/glob_bkslash_in_var.right | 4 | ||||
-rwxr-xr-x | shell/hush_test/hush-glob/glob_bkslash_in_var.tests | 10 |
5 files changed, 32 insertions, 6 deletions
diff --git a/shell/ash.c b/shell/ash.c index ad50537a1..dc1a55a6b 100644 --- a/shell/ash.c +++ b/shell/ash.c @@ -6236,9 +6236,7 @@ memtodest(const char *p, size_t len, int syntax, int quotes) if (quotes & QUOTES_ESC) { int n = SIT(c, syntax); if (n == CCTL - || (((quotes & EXP_FULL) || syntax != BASESYNTAX) - && n == CBACK - ) + || (syntax != BASESYNTAX && n == CBACK) ) { USTPUTC(CTLESC, q); } @@ -7639,7 +7637,7 @@ expmeta(exp_t *exp, char *name, unsigned name_len, unsigned expdir_len) } } } else { - if (*p == '\\') + if (*p == '\\' && p[1]) esc++; if (p[esc] == '/') { if (metaflag) @@ -7653,7 +7651,7 @@ expmeta(exp_t *exp, char *name, unsigned name_len, unsigned expdir_len) return; p = name; do { - if (*p == '\\') + if (*p == '\\' && p[1]) p++; *enddir++ = *p; } while (*p++); @@ -7665,7 +7663,7 @@ expmeta(exp_t *exp, char *name, unsigned name_len, unsigned expdir_len) if (name < start) { p = name; do { - if (*p == '\\') + if (*p == '\\' && p[1]) p++; *enddir++ = *p++; } while (p < start); diff --git a/shell/ash_test/ash-glob/glob_bkslash_in_var.right b/shell/ash_test/ash-glob/glob_bkslash_in_var.right new file mode 100644 index 000000000..f1484b9e4 --- /dev/null +++ b/shell/ash_test/ash-glob/glob_bkslash_in_var.right @@ -0,0 +1,4 @@ +Unquoted non-matching glob in var:'test*.TMP/\name_doesnt_exist' +Unquoted matching glob in var: 'testdir.TMP/name' +Quoted non-matching glob in var: 'test*.TMP/\name_doesnt_exist' +Quoted matching glob in var: 'test*.TMP/\name' diff --git a/shell/ash_test/ash-glob/glob_bkslash_in_var.tests b/shell/ash_test/ash-glob/glob_bkslash_in_var.tests new file mode 100755 index 000000000..e3dedc4ac --- /dev/null +++ b/shell/ash_test/ash-glob/glob_bkslash_in_var.tests @@ -0,0 +1,10 @@ +mkdir testdir.TMP +>testdir.TMP/name +a="test*.TMP/\name_doesnt_exist" +b="test*.TMP/\name" +printf "Unquoted non-matching glob in var:'%s'\n" $a +printf "Unquoted matching glob in var: '%s'\n" $b +printf "Quoted non-matching glob in var: '%s'\n" "$a" +printf "Quoted matching glob in var: '%s'\n" "$b" +rm -f testdir.TMP/name +rmdir testdir.TMP diff --git a/shell/hush_test/hush-glob/glob_bkslash_in_var.right b/shell/hush_test/hush-glob/glob_bkslash_in_var.right new file mode 100644 index 000000000..f1484b9e4 --- /dev/null +++ b/shell/hush_test/hush-glob/glob_bkslash_in_var.right @@ -0,0 +1,4 @@ +Unquoted non-matching glob in var:'test*.TMP/\name_doesnt_exist' +Unquoted matching glob in var: 'testdir.TMP/name' +Quoted non-matching glob in var: 'test*.TMP/\name_doesnt_exist' +Quoted matching glob in var: 'test*.TMP/\name' diff --git a/shell/hush_test/hush-glob/glob_bkslash_in_var.tests b/shell/hush_test/hush-glob/glob_bkslash_in_var.tests new file mode 100755 index 000000000..e3dedc4ac --- /dev/null +++ b/shell/hush_test/hush-glob/glob_bkslash_in_var.tests @@ -0,0 +1,10 @@ +mkdir testdir.TMP +>testdir.TMP/name +a="test*.TMP/\name_doesnt_exist" +b="test*.TMP/\name" +printf "Unquoted non-matching glob in var:'%s'\n" $a +printf "Unquoted matching glob in var: '%s'\n" $b +printf "Quoted non-matching glob in var: '%s'\n" "$a" +printf "Quoted matching glob in var: '%s'\n" "$b" +rm -f testdir.TMP/name +rmdir testdir.TMP |