From: Denys Vlasenko Date: Tue, 24 Apr 2012 17:21:16 +0000 (+0200) Subject: sed: fix handling of s/// which has empty matches X-Git-Tag: 1_21_0~190 X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=e39afe1fbd6d9f1ad1eea0052a5163572e11a98f;p=oweals%2Fbusybox.git sed: fix handling of s/// which has empty matches Signed-off-by: Denys Vlasenko --- diff --git a/editors/sed.c b/editors/sed.c index 4e9babb9d..429c1ed58 100644 --- a/editors/sed.c +++ b/editors/sed.c @@ -741,7 +741,7 @@ static int do_subst_command(sed_cmd_t *sed_cmd, char **line_p) * The match_count check is so not to break * echo "hi" | busybox sed 's/^/!/g' */ - if (!G.regmatch[0].rm_so && !G.regmatch[0].rm_eo && match_count) { + if (!G.regmatch[0].rm_so && !G.regmatch[0].rm_eo && match_count && *line) { pipe_putc(*line++); continue; } diff --git a/testsuite/sed.tests b/testsuite/sed.tests index ba163e9e9..9fa8e190c 100755 --- a/testsuite/sed.tests +++ b/testsuite/sed.tests @@ -48,6 +48,7 @@ testing "sed accepts multiple -e" "sed -e 'i\' -e '1' -e 'a\' -e '3'" \ # substitutions testing "sed -n" "sed -n -e s/foo/bar/ -e s/bar/baz/" "" "" "foo\n" +testing "sed with empty match" "sed 's/z*//g'" "string\n" "" "string\n" testing "sed s//p" "sed -e s/foo/bar/p -e s/bar/baz/p" "bar\nbaz\nbaz\n" \ "" "foo\n" testing "sed -n s//p" "sed -ne s/abc/def/p" "def\n" "" "abc\n"