commit cf868c8eeb45f47063cc5d30b04b552e7dd5a7c4
parent 0b117ab6c0d9771c0556180bc47c1988576ae740
Author: Roberto E. Vargas Caballero <k0ga@shike2.com>
Date: Thu, 7 Jan 2016 12:34:40 +0100
Stop matching when lastmatch points to '\n'
This situation happens with something like s/$/test/,
where rm_so == rm_eo == 0. Without this check, ed
keeps looping forever.
Diffstat:
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/ed.c b/ed.c
@@ -1005,7 +1005,7 @@ subline(int num, int nth)
static size_t siz, cap;
i = changed = siz = 0;
- for (m = match(num); m; m = rematch(num)) {
+ for (m = match(num); m && *lastmatch != '\n'; m = rematch(num)) {
addpre(&s, &cap, &siz);
changed |= addsub(&s, &cap, &siz, nth, ++i);
}