Date: Sat, 28 Jan 2023 15:45:22 GMT From: Kyle Evans <kevans@FreeBSD.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org Subject: git: a1362d625340 - stable/13 - grep: properly switch EOL indicator with -z Message-ID: <202301281545.30SFjMwA065799@gitrepo.freebsd.org>
next in thread | raw e-mail | index | archive | help
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 }
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202301281545.30SFjMwA065799>