Subject: Re: bug#18266: grep -P and invalid exits with error

From: Paul Eggert <[email-masked]>
Date: Wed, 10 Sep 2014 00:08:18 -0700

Paul Eggert wrote:
> perhaps there's a PCRE version dependency here?

I found a PCRE-version-dependent problem that may be relevant, and 
installed the attached further patch to fix it.
From dc7d532d16dec740d11b6817c9b558543aca0136 Mon Sep 17 00:00:00 2001
From: Paul Eggert <[email-masked]>
Date: Wed, 10 Sep 2014 00:04:58 -0700
Subject: [PATCH] grep: port recent fix to older pcre version

* src/pcresearch.c (Pexecute): Don't assume that a pcre_exec
that returns PCRE_ERROR_NOMATCH leaves its sub argument alone.
This assumption is false for libpcre-3 version 8.31-2ubuntu2.
---
 src/pcresearch.c | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/src/pcresearch.c b/src/pcresearch.c
index 2a01e6d..4e2ccf8 100644
--- a/src/pcresearch.c
+++ b/src/pcresearch.c
@@ -157,14 +157,16 @@ Pexecute (char const *buf, size_t size, size_t *match_size,
       /* Treat encoding-error bytes as data that cannot match.  */
       for (;;)
         {
+          int valid_bytes;
           e = pcre_exec (cre, extra, p, line_end - p, 0, options, sub, nsub);
           if (e != PCRE_ERROR_BADUTF8)
             break;
-          e = pcre_exec (cre, extra, p, sub[0], 0,
+          valid_bytes = sub[0];
+          e = pcre_exec (cre, extra, p, valid_bytes, 0,
                          options | PCRE_NO_UTF8_CHECK, sub, nsub);
           if (e != PCRE_ERROR_NOMATCH)
             break;
-          p += sub[0] + 1;
+          p += valid_bytes + 1;
           options = PCRE_NOTBOL;
         }
 
-- 
1.9.3