From 773d404ee2b99797763012a32b317422ac18d64e Mon Sep 17 00:00:00 2001 From: Rob Landley Date: Mon, 26 Apr 2021 05:09:57 -0500 Subject: Bugfix: sed s command couldn't skip initial match. --- tests/sed.test | 1 + toys/posix/sed.c | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/tests/sed.test b/tests/sed.test index c3928e58..fd3b2057 100755 --- a/tests/sed.test +++ b/tests/sed.test @@ -115,6 +115,7 @@ testing 'empty match after nonempty match' "sed -e 's/a*/c/g'" 'cbcncgc' \ testing 'empty match' "sed -e 's/[^ac]*/A/g'" 'AaAcA' '' 'abcde' testing 's///#comment' "sed -e 's/TWO/four/i#comment'" "one\nfour\nthree" \ "" "one\ntwo\nthree" +testing 's///num off end' 'sed -e s/e//2' 'e\n' '' 'e\n' testing 'N flushes pending a and advances match counter' \ "sed -e 'a woo' -e 'N;\$p'" 'woo\none\ntwo\none\ntwo' "" 'one\ntwo' diff --git a/toys/posix/sed.c b/toys/posix/sed.c index 9bd05034..d5a4a833 100644 --- a/toys/posix/sed.c +++ b/toys/posix/sed.c @@ -443,7 +443,7 @@ static void sed_line(char **pline, long plen) // If we're replacing only a specific match, skip if this isn't it off = command->sflags>>4; if (off && off != ++count) { - memcpy(l2+l2used, rline, match[0].rm_eo); + if (l2) memcpy(l2+l2used, rline, match[0].rm_eo); l2used += match[0].rm_eo; rline += match[0].rm_eo; -- cgit v1.2.3