aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--editors/sed.c14
-rwxr-xr-xtestsuite/sed.tests6
2 files changed, 16 insertions, 4 deletions
diff --git a/editors/sed.c b/editors/sed.c
index 3fc40ceef..7ed9937d2 100644
--- a/editors/sed.c
+++ b/editors/sed.c
@@ -350,10 +350,16 @@ static int get_address(const char *my_str, int *linenum, regex_t ** regex)
if (*my_str == '\\')
delimiter = *++pos;
next = index_of_next_unescaped_regexp_delim(delimiter, ++pos);
- temp = copy_parsing_escapes(pos, next);
- *regex = xzalloc(sizeof(regex_t));
- xregcomp(*regex, temp, G.regex_type);
- free(temp);
+ if (next != 0) {
+ temp = copy_parsing_escapes(pos, next);
+ G.previous_regex_ptr = *regex = xzalloc(sizeof(regex_t));
+ xregcomp(*regex, temp, G.regex_type);
+ free(temp);
+ } else {
+ *regex = G.previous_regex_ptr;
+ if (!G.previous_regex_ptr)
+ bb_error_msg_and_die("no previous regexp");
+ }
/* Move position to next character after last delimiter */
pos += (next+1);
}
diff --git a/testsuite/sed.tests b/testsuite/sed.tests
index 05c00a99b..675cb4f10 100755
--- a/testsuite/sed.tests
+++ b/testsuite/sed.tests
@@ -387,6 +387,12 @@ testing "sed 's///w FILE'" \
"" \
"123\nqwe\nasd\n"
+testing "sed uses previous regexp" \
+ "sed '/w/p;//q'" \
+ "q\nw\nw\n" \
+ "" \
+ "q\nw\ne\nr\n"
+
# testing "description" "commands" "result" "infile" "stdin"
exit $FAILCOUNT