grep: fix -x -v with certain pattern orders
authorAri Sundholm <ari@tuxera.com>
Tue, 29 Jan 2019 13:42:57 +0000 (14:42 +0100)
committerDenys Vlasenko <vda.linux@googlemail.com>
Tue, 29 Jan 2019 13:42:57 +0000 (14:42 +0100)
commit9a9c6e39ba4c8f4f2cecb147c7e6464bec2d8b55
treeffd9a73b098670937ef0a2d33966a6669ec59d96
parent53799506acf69e7f7137d91fa5a4451211621469
grep: fix -x -v with certain pattern orders

We found out that busybox -x -v is a bit broken:

ari@ari-thinkpad:~/busybox$ echo '  aa bb cc' | ./busybox grep -x -e 'aa.*' -e '.*bb.*'
  aa bb cc
ari@ari-thinkpad:~/busybox$ echo '  aa bb cc' | ./busybox grep -x -v -e 'aa.*' -e '.*bb.*'
ari@ari-thinkpad:~/busybox$ echo '  aa bb cc' | ./busybox grep -x -e '.*aa.*' -e 'bb.*'
  aa bb cc
ari@ari-thinkpad:~/busybox$ echo '  aa bb cc' | ./busybox grep -x -v -e '.*aa.*' -e 'bb.*'
  aa bb cc

Last one is wrong.

This patch fixes the issue by making sure that the variable 'found'
never makes a transition from 1 to 0, as this would mean that
grep previously found a match on this input line.

Signed-off-by: Ari Sundholm <ari@tuxera.com>
Signed-off-by: Niko Vähäsarja <niko@tuxera.com>
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
findutils/grep.c
testsuite/grep.tests