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) | |||
6236 | if (quotes & QUOTES_ESC) { | 6236 | if (quotes & QUOTES_ESC) { |
6237 | int n = SIT(c, syntax); | 6237 | int n = SIT(c, syntax); |
6238 | if (n == CCTL | 6238 | if (n == CCTL |
6239 | || (((quotes & EXP_FULL) || syntax != BASESYNTAX) | 6239 | || (syntax != BASESYNTAX && n == CBACK) |
6240 | && n == CBACK | ||
6241 | ) | ||
6242 | ) { | 6240 | ) { |
6243 | USTPUTC(CTLESC, q); | 6241 | USTPUTC(CTLESC, q); |
6244 | } | 6242 | } |
@@ -7639,7 +7637,7 @@ expmeta(exp_t *exp, char *name, unsigned name_len, unsigned expdir_len) | |||
7639 | } | 7637 | } |
7640 | } | 7638 | } |
7641 | } else { | 7639 | } else { |
7642 | if (*p == '\\') | 7640 | if (*p == '\\' && p[1]) |
7643 | esc++; | 7641 | esc++; |
7644 | if (p[esc] == '/') { | 7642 | if (p[esc] == '/') { |
7645 | if (metaflag) | 7643 | if (metaflag) |
@@ -7653,7 +7651,7 @@ expmeta(exp_t *exp, char *name, unsigned name_len, unsigned expdir_len) | |||
7653 | return; | 7651 | return; |
7654 | p = name; | 7652 | p = name; |
7655 | do { | 7653 | do { |
7656 | if (*p == '\\') | 7654 | if (*p == '\\' && p[1]) |
7657 | p++; | 7655 | p++; |
7658 | *enddir++ = *p; | 7656 | *enddir++ = *p; |
7659 | } while (*p++); | 7657 | } while (*p++); |
@@ -7665,7 +7663,7 @@ expmeta(exp_t *exp, char *name, unsigned name_len, unsigned expdir_len) | |||
7665 | if (name < start) { | 7663 | if (name < start) { |
7666 | p = name; | 7664 | p = name; |
7667 | do { | 7665 | do { |
7668 | if (*p == '\\') | 7666 | if (*p == '\\' && p[1]) |
7669 | p++; | 7667 | p++; |
7670 | *enddir++ = *p++; | 7668 | *enddir++ = *p++; |
7671 | } while (p < start); | 7669 | } 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 @@ | |||
1 | Unquoted non-matching glob in var:'test*.TMP/\name_doesnt_exist' | ||
2 | Unquoted matching glob in var: 'testdir.TMP/name' | ||
3 | Quoted non-matching glob in var: 'test*.TMP/\name_doesnt_exist' | ||
4 | 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 @@ | |||
1 | mkdir testdir.TMP | ||
2 | >testdir.TMP/name | ||
3 | a="test*.TMP/\name_doesnt_exist" | ||
4 | b="test*.TMP/\name" | ||
5 | printf "Unquoted non-matching glob in var:'%s'\n" $a | ||
6 | printf "Unquoted matching glob in var: '%s'\n" $b | ||
7 | printf "Quoted non-matching glob in var: '%s'\n" "$a" | ||
8 | printf "Quoted matching glob in var: '%s'\n" "$b" | ||
9 | rm -f testdir.TMP/name | ||
10 | 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 @@ | |||
1 | Unquoted non-matching glob in var:'test*.TMP/\name_doesnt_exist' | ||
2 | Unquoted matching glob in var: 'testdir.TMP/name' | ||
3 | Quoted non-matching glob in var: 'test*.TMP/\name_doesnt_exist' | ||
4 | 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 @@ | |||
1 | mkdir testdir.TMP | ||
2 | >testdir.TMP/name | ||
3 | a="test*.TMP/\name_doesnt_exist" | ||
4 | b="test*.TMP/\name" | ||
5 | printf "Unquoted non-matching glob in var:'%s'\n" $a | ||
6 | printf "Unquoted matching glob in var: '%s'\n" $b | ||
7 | printf "Quoted non-matching glob in var: '%s'\n" "$a" | ||
8 | printf "Quoted matching glob in var: '%s'\n" "$b" | ||
9 | rm -f testdir.TMP/name | ||
10 | rmdir testdir.TMP | ||