summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorStephane Chazelas <stephane.chazelas@gmail.com>2014-02-24 11:54:09 -0800
committerJim Meyering <meyering@fb.com>2014-02-24 20:47:50 -0800
commitbc4e0307da6fc43b897e7a16c56b36e7f5990832 (patch)
tree34d92223b6e90cab777f83623ad2e6d673e3b677 /tests
parentedcd281c532d61e5f4cb36f34d6c866c9aec7766 (diff)
downloadgrep-bc4e0307da6fc43b897e7a16c56b36e7f5990832.tar.gz
grep -P: fix it so backreferences now work with -w and -x
To implement -w and -x, we bracket the search term with parentheses. However, that set of parentheses had the default semantics of "capturing", i.e., creating a backreferenceable matched quantity. Instead, use (?:...), to create a non-capturing group. * src/pcresearch.c (Pcompile): Use (?:...) rather than (...). * NEWS (Bug fixes): Mention it. * tests/pcre-wx-backref: New file. * tests/Makefile.am (TESTS): Add it. This addresses http://debbugs.gnu.org/16865
Diffstat (limited to 'tests')
-rw-r--r--tests/Makefile.am1
-rwxr-xr-xtests/pcre-wx-backref28
2 files changed, 29 insertions, 0 deletions
diff --git a/tests/Makefile.am b/tests/Makefile.am
index 4ffea850..ecbe0e68 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -83,6 +83,7 @@ TESTS = \
pcre-abort \
pcre-invalid-utf8-input \
pcre-utf8 \
+ pcre-wx-backref \
pcre-z \
prefix-of-multibyte \
r-dot \
diff --git a/tests/pcre-wx-backref b/tests/pcre-wx-backref
new file mode 100755
index 00000000..643aa9b3
--- /dev/null
+++ b/tests/pcre-wx-backref
@@ -0,0 +1,28 @@
+#! /bin/sh
+# Before grep-2.19, grep -P and -w/-x would not with a backreference.
+#
+# Copyright (C) 2014 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
+require_pcre_
+
+echo aa > in || framework_failure_
+echo 'grep: reference to non-existent subpattern' > exp-err \
+ || framework_failure_
+
+fail=0
+
+for xw in x w; do
+ grep -P$xw '(.)\1' in > out 2>&1 || fail=1
+ compare out in || fail=1
+
+ grep -P$xw '(.)\2' in > out 2> err && fail=1
+ compare /dev/null out || fail=1
+ compare exp-err err || fail=1
+done
+
+Exit $fail