diff options
author | Paul Eggert <eggert@cs.ucla.edu> | 2022-12-05 14:16:45 -0800 |
---|---|---|
committer | Paul Eggert <eggert@cs.ucla.edu> | 2022-12-05 14:17:29 -0800 |
commit | b061d24916fb9a14da37a3f2a05cb80dc65cfd38 (patch) | |
tree | 6e1d5e20d8fecc71212dd069fd5f0a0eb2ef7f56 /src | |
parent | 429b3497d18814557195b83008700d0893a3b342 (diff) | |
download | grep-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.c | 25 |
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 |