mirror of
https://gitlab.alpinelinux.org/alpine/aports.git
synced 2025-08-06 05:47:13 +02:00
91 lines
3.1 KiB
Diff
91 lines
3.1 KiB
Diff
From c5a1be25ba6dd705382ce6c25d96a32f79974c04 Mon Sep 17 00:00:00 2001
|
|
From: Denys Vlasenko <vda.linux@googlemail.com>
|
|
Date: Mon, 26 Feb 2024 16:26:15 +0100
|
|
Subject: [PATCH] ash: fix handling of single-quoted strings in pattern
|
|
substitution
|
|
MIME-Version: 1.0
|
|
Content-Type: text/plain; charset=UTF-8
|
|
Content-Transfer-Encoding: 8bit
|
|
|
|
function old new delta
|
|
subevalvar 1576 1588 +12
|
|
|
|
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
|
|
Signed-off-by: Sören Tempel <soeren+git@soeren-tempel.net>
|
|
---
|
|
shell/ash.c | 5 +++++
|
|
shell/ash_test/ash-quoting/dollar_repl_bash2.right | 4 ++++
|
|
shell/ash_test/ash-quoting/dollar_repl_bash2.tests | 8 ++++++++
|
|
shell/hush_test/hush-quoting/dollar_repl_bash2.right | 4 ++++
|
|
shell/hush_test/hush-quoting/dollar_repl_bash2.tests | 8 ++++++++
|
|
5 files changed, 29 insertions(+)
|
|
create mode 100644 shell/ash_test/ash-quoting/dollar_repl_bash2.right
|
|
create mode 100755 shell/ash_test/ash-quoting/dollar_repl_bash2.tests
|
|
create mode 100644 shell/hush_test/hush-quoting/dollar_repl_bash2.right
|
|
create mode 100755 shell/hush_test/hush-quoting/dollar_repl_bash2.tests
|
|
|
|
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,
|
|
repl = NULL;
|
|
break;
|
|
}
|
|
+ /* Skip over quoted 'str'. Example: ${var/'/'} - second / is not a separator */
|
|
+ if ((unsigned char)*repl == CTLQUOTEMARK) {
|
|
+ while ((unsigned char)*++repl != CTLQUOTEMARK)
|
|
+ continue;
|
|
+ }
|
|
if (*repl == '/') {
|
|
*repl = '\0';
|
|
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 @@
|
|
+axxb
|
|
+axxb
|
|
+axxb
|
|
+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 @@
|
|
+v="x/x"
|
|
+# The second / is quoted, should not be treated as separator
|
|
+echo a${v/'/'}b
|
|
+# The second / is escaped, should not be treated as separator
|
|
+echo a${v/\/}b
|
|
+
|
|
+echo "a${v/'/'}b"
|
|
+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 @@
|
|
+axxb
|
|
+axxb
|
|
+axxb
|
|
+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 @@
|
|
+v="x/x"
|
|
+# The second / is quoted, should not be treated as separator
|
|
+echo a${v/'/'}b
|
|
+# The second / is escaped, should not be treated as separator
|
|
+echo a${v/\/}b
|
|
+
|
|
+echo "a${v/'/'}b"
|
|
+echo "a${v/\/}b"
|