summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Eggert <eggert@cs.ucla.edu>2014-10-15 11:49:49 -0700
committerPaul Eggert <eggert@cs.ucla.edu>2014-10-15 11:50:19 -0700
commit2a45f93f4e952f5f27a6eb710854b98a548277b8 (patch)
treeca6e7d2257085f7335c45bc8fbed482cd46bc4ed
parente9a7702427a897bc4ac0e5b78c91a954c0a6fe4a (diff)
downloadgrep-2a45f93f4e952f5f27a6eb710854b98a548277b8.tar.gz
grep: fix off-by-one bug in -P optimization
Reported by Norihiro Tanaka in: http://bugs.gnu.org/18738 * src/pcresearch.c (Pexecute): Fix off-by-one bug with validation_boundary. * tests/init.cfg (envvar_check_fail): Catch off-by-one bug.
-rw-r--r--src/pcresearch.c2
-rw-r--r--tests/init.cfg6
2 files changed, 6 insertions, 2 deletions
diff --git a/src/pcresearch.c b/src/pcresearch.c
index 6f016b68..1fd5bdec 100644
--- a/src/pcresearch.c
+++ b/src/pcresearch.c
@@ -214,7 +214,7 @@ Pexecute (char const *buf, size_t size, size_t *match_size,
options |= PCRE_NO_UTF8_CHECK;
int valid_bytes = validated - p;
- if (valid_bytes < 0)
+ if (valid_bytes <= 0)
{
e = pcre_exec (cre, extra, p, search_bytes, 0,
options, sub, NSUB);
diff --git a/tests/init.cfg b/tests/init.cfg
index 3e9ab038..882feb1c 100644
--- a/tests/init.cfg
+++ b/tests/init.cfg
@@ -47,7 +47,11 @@ require_timeout_()
require_pcre_()
{
- echo . | grep -P . 2>err || skip_ no PCRE support
+ echo . | grep -P . 2>err
+ echo . | grep -P . 2>err || {
+ test $? -eq 1 && fail_ PCRE available, but does not work.
+ skip_ no PCRE support
+ }
compare /dev/null err || fail_ PCRE available, but stderr not empty.
}