diff options
author | Paul Eggert <eggert@cs.ucla.edu> | 2014-10-15 11:49:49 -0700 |
---|---|---|
committer | Paul Eggert <eggert@cs.ucla.edu> | 2014-10-15 11:50:19 -0700 |
commit | 2a45f93f4e952f5f27a6eb710854b98a548277b8 (patch) | |
tree | ca6e7d2257085f7335c45bc8fbed482cd46bc4ed | |
parent | e9a7702427a897bc4ac0e5b78c91a954c0a6fe4a (diff) | |
download | grep-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.c | 2 | ||||
-rw-r--r-- | tests/init.cfg | 6 |
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. } |