svn commit: r317052 - in head: contrib/netbsd-tests/usr.bin/grep usr.bin/grep
Ed Maste
emaste at FreeBSD.org
Mon Apr 17 14:59:56 UTC 2017
Author: emaste
Date: Mon Apr 17 14:59:55 2017
New Revision: 317052
URL: https://svnweb.freebsd.org/changeset/base/317052
Log:
bsdgrep: fix zero-length matches without the -o flag
r316477 broke zero-length matches when not using the -o flag, by
skipping over them entirely.
Add a regression test so that it doesn't break again in the future.
Submitted by: Kyle Evans <kevans91 at ksu.edu>
Reviewed by: cem emaste ngie
Differential Revision: https://reviews.freebsd.org/D10333
Modified:
head/contrib/netbsd-tests/usr.bin/grep/t_grep.sh
head/usr.bin/grep/util.c
Modified: head/contrib/netbsd-tests/usr.bin/grep/t_grep.sh
==============================================================================
--- head/contrib/netbsd-tests/usr.bin/grep/t_grep.sh Mon Apr 17 13:36:30 2017 (r317051)
+++ head/contrib/netbsd-tests/usr.bin/grep/t_grep.sh Mon Apr 17 14:59:55 2017 (r317052)
@@ -377,6 +377,20 @@ egrep_empty_invalid_body()
{
atf_check -s exit:1 egrep '{' /dev/null
}
+
+atf_test_case zerolen
+zerolen_head()
+{
+ atf_set "descr" "Check for successful zero-length matches with ^$"
+}
+zerolen_body()
+{
+ printf "Eggs\n\nCheese" > test1
+
+ atf_check -o inline:"\n" grep -e "^$" test1
+
+ atf_check -o inline:"Eggs\nCheese\n" grep -v -e "^$" test1
+}
# End FreeBSD
atf_init_test_cases()
@@ -404,5 +418,6 @@ atf_init_test_cases()
atf_add_test_case f_file_empty
atf_add_test_case escmap
atf_add_test_case egrep_empty_invalid
+ atf_add_test_case zerolen
# End FreeBSD
}
Modified: head/usr.bin/grep/util.c
==============================================================================
--- head/usr.bin/grep/util.c Mon Apr 17 13:36:30 2017 (r317051)
+++ head/usr.bin/grep/util.c Mon Apr 17 14:59:55 2017 (r317052)
@@ -352,9 +352,6 @@ procline(struct str *l, int nottext)
if (r == 0) {
lastmatches++;
lastmatch = pmatch;
- /* Skip over zero-length matches */
- if (pmatch.rm_so == pmatch.rm_eo)
- continue;
if (m == 0)
c++;
@@ -532,6 +529,9 @@ printline(struct str *line, int sep, reg
/* --color and -o */
if ((oflag || color) && m > 0) {
for (i = 0; i < m; i++) {
+ /* Don't output zero length matches */
+ if (matches[i].rm_so == matches[i].rm_eo)
+ continue;
if (!oflag)
fwrite(line->dat + a, matches[i].rm_so - a, 1,
stdout);
More information about the svn-src-all
mailing list