summaryrefslogtreecommitdiff
path: root/tests/null-byte
diff options
context:
space:
mode:
authorPaul Eggert <eggert@cs.ucla.edu>2014-04-20 23:18:56 -0700
committerPaul Eggert <eggert@cs.ucla.edu>2014-04-20 23:19:23 -0700
commit9276ef47ee5aa4a90908c89b9b1caf46415a8b53 (patch)
tree42cfae4dca562943311c935945838443ced78173 /tests/null-byte
parentd65dcf39f3d587027cccb6c7de6d7d70fb336e56 (diff)
downloadgrep-9276ef47ee5aa4a90908c89b9b1caf46415a8b53.tar.gz
dfa: fix bug that caused NUL to be mishandled in patterns
This bug was introduced in the early-2012 patches that fixed some context-handling bugs. Bisecting found commit d8951d3f4e1bbd564809aa8e713d8333bda2f802 (2012-02-05 18:00:43 +0100), but it apears the underlying problem was introduced in commit 8b47c4cf6556933f59226c234b0fe984f6c77dc7 (2012-01-03 11:22:09 +0100). * NEWS: Mention bug fix. * src/dfa.c (char_context): Consider NUL to be a newline only if -z. * tests/Makefile.am (TESTS): Add null-byte. * tests/null-byte: New file.
Diffstat (limited to 'tests/null-byte')
-rwxr-xr-xtests/null-byte52
1 files changed, 52 insertions, 0 deletions
diff --git a/tests/null-byte b/tests/null-byte
new file mode 100755
index 00000000..c967dbc9
--- /dev/null
+++ b/tests/null-byte
@@ -0,0 +1,52 @@
+#!/bin/sh
+# Test NUL bytes in patterns and data.
+
+# Copyright 2014 Free Software Foundation, Inc.
+
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+. "${srcdir=.}/init.sh"; path_prepend_ ../src
+
+# Add "." to PATH for the use of get-mb-cur-max.
+path_prepend_ .
+
+locales=C
+for locale in en_US.iso885915 en_US.UTF-8; do
+ get-mb-cur-max en_US.UTF-8 >/dev/null 2>&1 && locales="$locales $locale"
+done
+
+fail=0
+
+for left in '' a '#' '\0'; do
+ for right in '' b '#' '\0'; do
+ data="$left\\0$right"
+ printf "$data\\n" >in || framework_failure_
+ for hat in '' '^'; do
+ for dollar in '' '$'; do
+ for force_regex in '' '\\(\\)\\1'; do
+ pat="$hat$force_regex$data$dollar"
+ printf "$pat\\n" >pat || framework_failure_
+ for locale in $locales; do
+ LC_ALL=$locale grep -f pat in ||
+ fail_ "'$pat' does not match '$data'"
+ LC_ALL=$locale grep -a -f pat in | cmp -s - in ||
+ fail_ "-a '$pat' does not match '$data'"
+ done
+ done
+ done
+ done
+ done
+done
+
+Exit $fail