Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.busybox.net/busybox.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDenys Vlasenko <vda.linux@googlemail.com>2022-01-23 21:04:27 +0300
committerDenys Vlasenko <vda.linux@googlemail.com>2022-01-23 21:04:27 +0300
commitf12fb1e4092900f26f7f8c71cde44b1cd7d26439 (patch)
treeb5dec7c96074267b6d299928481e649e75c00885 /editors
parente998c7c032458a05a7afcc13ce0dc980b99ecc6c (diff)
sed: fix handling of escaped delimiters in s/// replacement
function old new delta parse_regex_delim 111 140 +29 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
Diffstat (limited to 'editors')
-rw-r--r--editors/sed.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/editors/sed.c b/editors/sed.c
index 02a527b4a..32a4b61f6 100644
--- a/editors/sed.c
+++ b/editors/sed.c
@@ -355,7 +355,10 @@ static int parse_regex_delim(const char *cmdstr, char **match, char **replace)
/* save the replacement string */
cmdstr_ptr += idx + 1;
idx = index_of_next_unescaped_regexp_delim(- (int)delimiter, cmdstr_ptr);
- *replace = copy_parsing_escapes(cmdstr_ptr, idx, 0);
+//GNU sed 4.8:
+// echo 789 | sed 's&8&\&&' - 7&9 ("\&" remained "\&")
+// echo 789 | sed 's1\(8\)1\1\11' - 7119 ("\1\1" become "11")
+ *replace = copy_parsing_escapes(cmdstr_ptr, idx, delimiter != '&' ? delimiter : 0);
return ((cmdstr_ptr - cmdstr) + idx);
}