René Scharfe <rene.scharfe@xxxxxxxxxxxxxx> writes: > The first hunk fixes match colouring if the patterns is the empty string. > Such a pattern matches the whole line,... Hmmm... An empty pattern may have to produce a match with any line, but I do not think it should match the whole line. GNU seems to agree with me. echo foo | grep --color -e '' echo foo | grep --color -F -e '' echo foo | grep --color -e '.*' echo foo | grep --color -F -e 'foo' The first two are uncoloured (but still show matches). > The second hunk of the patch makes sure that grep match colouring doesn't > get stuck in an infinite loop if the length of a match is zero. Certainly we need to advance the match pointer, and this issue needs to be addressed. I think it is a good change. > of the line is simply printed without colouring. Even though the empty > pattern string doesn't result in empty matches any more, this defensive > measure catches unknown cases. > > Signed-off-by: Rene Scharfe <rene.scharfe@xxxxxxxxxxxxxx> > --- > grep.c | 8 +++++++- > 1 files changed, 7 insertions(+), 1 deletions(-) > > diff --git a/grep.c b/grep.c > index cc6d5b0..745b3c0 100644 > --- a/grep.c > +++ b/grep.c > @@ -324,7 +324,11 @@ static int match_one_pattern(struct grep_pat *p, char *bol, char *eol, > } > > again: > - if (p->fixed) > + if (p->pattern[0] == '\0') { > + hit = 1; > + pmatch[0].rm_so = 0; > + pmatch[0].rm_eo = eol - bol; > + } else if (p->fixed) > hit = !fixmatch(p->pattern, bol, pmatch); > else > hit = !regexec(&p->regexp, bol, 1, pmatch, eflags); > @@ -500,6 +504,8 @@ static void show_line(struct grep_opt *opt, char *bol, char *eol, > > *eol = '\0'; > while (next_match(opt, bol, eol, ctx, &match, eflags)) { > + if (match.rm_so == match.rm_eo) > + break; > printf("%.*s%s%.*s%s", > (int)match.rm_so, bol, > opt->color_match, > -- > 1.6.3.1 -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html