From 203ad5b718ce349efa6bfa847b356d47dc5c584e Mon Sep 17 00:00:00 2001 From: Jim Meyering Date: Fri, 18 Sep 2020 12:37:17 -0700 Subject: grep: make echo .|grep '\.' match once again The same applied for many other backslash-escaped bytes, not just metacharacters. The switch to rawmemchr in v3.4-almost-10-g9393b97 made some parts of the code require the usually-guaranteed newline sentinel at the end of each pattern. Before, some consumers used a (correct) pattern length and did not care that try_fgrep_pattern could transform a pattern (with sentinel) like "\\.\n" to "..\n", thus violating that assumption. * src/grep.c (try_fgrep_pattern): Preserve the invariant that each regexp is newline-terminated. * tests/backslash-dot: New file. Test for this. * tests/Makefile.am (TESTS): Add it. --- tests/Makefile.am | 1 + tests/backslash-dot | 20 ++++++++++++++++++++ 2 files changed, 21 insertions(+) create mode 100755 tests/backslash-dot (limited to 'tests') diff --git a/tests/Makefile.am b/tests/Makefile.am index 3ee29154..b29f26a6 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -66,6 +66,7 @@ TESTS = \ backref-alt \ backref-multibyte-slow \ backref-word \ + backslash-dot \ backslash-s-and-repetition-operators \ backslash-s-vs-invalid-multibyte \ big-hole \ diff --git a/tests/backslash-dot b/tests/backslash-dot new file mode 100755 index 00000000..3fddda58 --- /dev/null +++ b/tests/backslash-dot @@ -0,0 +1,20 @@ +#! /bin/sh +# This once failed to match: echo . | grep '\.' +# +# Copyright (C) 2020 Free Software Foundation, Inc. +# +# Copying and distribution of this file, with or without modification, +# are permitted in any medium without royalty provided the copyright +# notice and this notice are preserved. + +. "${srcdir=.}/init.sh"; path_prepend_ ../src + +fail=0 + +echo . > in || framework_failure_ + +grep '\.' in > out 2> err || fail=1 +compare in out || fail=1 +compare /dev/null err || fail=1 + +Exit $fail -- cgit v1.2.1