summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorPaul Eggert <eggert@cs.ucla.edu>2022-12-05 14:16:45 -0800
committerPaul Eggert <eggert@cs.ucla.edu>2022-12-05 14:17:29 -0800
commitb061d24916fb9a14da37a3f2a05cb80dc65cfd38 (patch)
tree6e1d5e20d8fecc71212dd069fd5f0a0eb2ef7f56 /src
parent429b3497d18814557195b83008700d0893a3b342 (diff)
downloadgrep-b061d24916fb9a14da37a3f2a05cb80dc65cfd38.tar.gz
grep: bug: backref in last of multiple patterns
* NEWS: Mention this. * src/dfasearch.c (GEAcompile): Trim trailing newline from the last pattern, even if it has back-references and follows a pattern that lacks back-references. * tests/backref: Add test for this bug.
Diffstat (limited to 'src')
-rw-r--r--src/dfasearch.c25
1 files changed, 12 insertions, 13 deletions
diff --git a/src/dfasearch.c b/src/dfasearch.c
index a71902a8..a5b0d909 100644
--- a/src/dfasearch.c
+++ b/src/dfasearch.c
@@ -281,20 +281,19 @@ GEAcompile (char *pattern, idx_t size, reg_syntax_t syntax_bits,
if (compilation_failed)
exit (EXIT_TROUBLE);
- if (prev <= patlim)
+ if (patlim < prev)
+ buflen--;
+ else if (pattern < prev)
{
- if (pattern < prev)
- {
- idx_t prevlen = patlim - prev;
- buf = xirealloc (buf, buflen + prevlen);
- memcpy (buf + buflen, prev, prevlen);
- buflen += prevlen;
- }
- else
- {
- buf = pattern;
- buflen = size;
- }
+ idx_t prevlen = patlim - prev;
+ buf = xirealloc (buf, buflen + prevlen);
+ memcpy (buf + buflen, prev, prevlen);
+ buflen += prevlen;
+ }
+ else
+ {
+ buf = pattern;
+ buflen = size;
}
/* In the match_words and match_lines cases, we use a different pattern