diff options
-rw-r--r-- | shell/ash.c | 5 | ||||
-rw-r--r-- | shell/ash_test/ash-quoting/dollar_repl_bash2.right | 4 | ||||
-rwxr-xr-x | shell/ash_test/ash-quoting/dollar_repl_bash2.tests | 8 | ||||
-rw-r--r-- | shell/hush_test/hush-quoting/dollar_repl_bash2.right | 4 | ||||
-rwxr-xr-x | shell/hush_test/hush-quoting/dollar_repl_bash2.tests | 8 |
5 files changed, 29 insertions, 0 deletions
diff --git a/shell/ash.c b/shell/ash.c index 771fc8bf9..4ca4c6c56 100644 --- a/shell/ash.c +++ b/shell/ash.c | |||
@@ -7073,6 +7073,11 @@ subevalvar(char *start, char *str, int strloc, | |||
7073 | repl = NULL; | 7073 | repl = NULL; |
7074 | break; | 7074 | break; |
7075 | } | 7075 | } |
7076 | /* Skip over quoted 'str'. Example: ${var/'/'} - second / is not a separator */ | ||
7077 | if ((unsigned char)*repl == CTLQUOTEMARK) { | ||
7078 | while ((unsigned char)*++repl != CTLQUOTEMARK) | ||
7079 | continue; | ||
7080 | } | ||
7076 | if (*repl == '/') { | 7081 | if (*repl == '/') { |
7077 | *repl = '\0'; | 7082 | *repl = '\0'; |
7078 | break; | 7083 | break; |
diff --git a/shell/ash_test/ash-quoting/dollar_repl_bash2.right b/shell/ash_test/ash-quoting/dollar_repl_bash2.right new file mode 100644 index 000000000..e3fcd5807 --- /dev/null +++ b/shell/ash_test/ash-quoting/dollar_repl_bash2.right | |||
@@ -0,0 +1,4 @@ | |||
1 | axxb | ||
2 | axxb | ||
3 | axxb | ||
4 | axxb | ||
diff --git a/shell/ash_test/ash-quoting/dollar_repl_bash2.tests b/shell/ash_test/ash-quoting/dollar_repl_bash2.tests new file mode 100755 index 000000000..45c7a10e2 --- /dev/null +++ b/shell/ash_test/ash-quoting/dollar_repl_bash2.tests | |||
@@ -0,0 +1,8 @@ | |||
1 | v="x/x" | ||
2 | # The second / is quoted, should not be treated as separator | ||
3 | echo a${v/'/'}b | ||
4 | # The second / is escaped, should not be treated as separator | ||
5 | echo a${v/\/}b | ||
6 | |||
7 | echo "a${v/'/'}b" | ||
8 | echo "a${v/\/}b" | ||
diff --git a/shell/hush_test/hush-quoting/dollar_repl_bash2.right b/shell/hush_test/hush-quoting/dollar_repl_bash2.right new file mode 100644 index 000000000..e3fcd5807 --- /dev/null +++ b/shell/hush_test/hush-quoting/dollar_repl_bash2.right | |||
@@ -0,0 +1,4 @@ | |||
1 | axxb | ||
2 | axxb | ||
3 | axxb | ||
4 | axxb | ||
diff --git a/shell/hush_test/hush-quoting/dollar_repl_bash2.tests b/shell/hush_test/hush-quoting/dollar_repl_bash2.tests new file mode 100755 index 000000000..45c7a10e2 --- /dev/null +++ b/shell/hush_test/hush-quoting/dollar_repl_bash2.tests | |||
@@ -0,0 +1,8 @@ | |||
1 | v="x/x" | ||
2 | # The second / is quoted, should not be treated as separator | ||
3 | echo a${v/'/'}b | ||
4 | # The second / is escaped, should not be treated as separator | ||
5 | echo a${v/\/}b | ||
6 | |||
7 | echo "a${v/'/'}b" | ||
8 | echo "a${v/\/}b" | ||