git: a1362d625340 - stable/13 - grep: properly switch EOL indicator with -z
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Sat, 28 Jan 2023 15:45:22 UTC
The branch stable/13 has been updated by kevans:
URL: https://cgit.FreeBSD.org/src/commit/?id=a1362d625340c96c3e95f470efec64c00cea3f6f
commit a1362d625340c96c3e95f470efec64c00cea3f6f
Author: Kyle Evans <kevans@FreeBSD.org>
AuthorDate: 2023-01-04 05:21:10 +0000
Commit: Kyle Evans <kevans@FreeBSD.org>
CommitDate: 2023-01-28 15:45:05 +0000
grep: properly switch EOL indicator with -z
-z is supposed to use only the NUL byte as EOL, but we were
inadvertently using both newline and NUL due to REG_NEWLINE in cflags.
The odds of anyone relying on this bsdgrep-specific bug are quite low,
so let's just fix it. At least one port in the wild has been reported
to expect the intended behavior.
Reported by: Hill Ma <maahiuzeon@gmail.com>
Triaged by: the self-proclaimed peanut gallery on Discord
(cherry picked from commit e898a3af97f97f74c0fb22032bbd163f7cc92a05)
---
usr.bin/grep/grep.c | 1 +
usr.bin/grep/tests/grep_freebsd_test.sh | 13 +++++++++++++
2 files changed, 14 insertions(+)
diff --git a/usr.bin/grep/grep.c b/usr.bin/grep/grep.c
index 6fbd6bee8ace..f8c38e70e6b3 100644
--- a/usr.bin/grep/grep.c
+++ b/usr.bin/grep/grep.c
@@ -562,6 +562,7 @@ main(int argc, char *argv[])
break;
case 'z':
fileeol = '\0';
+ cflags &= ~REG_NEWLINE;
break;
case BIN_OPT:
if (strcasecmp("binary", optarg) == 0)
diff --git a/usr.bin/grep/tests/grep_freebsd_test.sh b/usr.bin/grep/tests/grep_freebsd_test.sh
index 0d068d5d1c65..f6881791357c 100755
--- a/usr.bin/grep/tests/grep_freebsd_test.sh
+++ b/usr.bin/grep/tests/grep_freebsd_test.sh
@@ -92,9 +92,22 @@ gnuext_body()
}
+atf_test_case zflag
+zflag_body()
+{
+
+ # The -z flag should pick up 'foo' and 'bar' as on the same line with
+ # 'some kind of junk' in between; a bug was present that instead made
+ # it process this incorrectly.
+ printf "foo\nbar\0" > in
+
+ atf_check grep -qz "foo.*bar" in
+}
+
atf_init_test_cases()
{
atf_add_test_case grep_r_implied
atf_add_test_case rgrep
atf_add_test_case gnuext
+ atf_add_test_case zflag
}