diff options
author | Stephane Chazelas <stephane.chazelas@gmail.com> | 2014-02-24 11:54:09 -0800 |
---|---|---|
committer | Jim Meyering <meyering@fb.com> | 2014-02-24 20:47:50 -0800 |
commit | bc4e0307da6fc43b897e7a16c56b36e7f5990832 (patch) | |
tree | 34d92223b6e90cab777f83623ad2e6d673e3b677 /tests | |
parent | edcd281c532d61e5f4cb36f34d6c866c9aec7766 (diff) | |
download | grep-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.am | 1 | ||||
-rwxr-xr-x | tests/pcre-wx-backref | 28 |
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 |