From db5ce1f052c354faff0b74832934659753dfaae7 Mon Sep 17 00:00:00 2001 From: ph10 Date: Wed, 19 Nov 2014 20:57:13 +0000 Subject: [PATCH] Fix zero-repeat assertion condition bug. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: svn://vcs.exim.org/pcre/code/trunk@1513 2f5784b3-3f2a-0410-8824-cb99058d5e15 Signed-off-by: Petr Písař Petr Pisar: Ported to 8.33. Signed-off-by: Petr Písař --- pcre_exec.c | 4 +++- testdata/testinput2 | 6 ++++++ testdata/testoutput2 | 10 ++++++++++ 3 files changed, 19 insertions(+), 1 deletion(-) diff --git a/pcre_exec.c b/pcre_exec.c index 970ed3e..a8fe12b 100644 --- a/pcre_exec.c +++ b/pcre_exec.c @@ -1488,7 +1488,9 @@ for (;;) if (md->end_offset_top > offset_top) offset_top = md->end_offset_top; /* Captures may have happened */ condition = TRUE; - ecode += 1 + LINK_SIZE + GET(ecode, LINK_SIZE + 2); + ecode += 1 + LINK_SIZE; + if (*ecode == OP_BRAZERO) ecode++; + ecode += GET(ecode, 1); while (*ecode == OP_ALT) ecode += GET(ecode, 1); } diff --git a/testdata/testinput2 b/testdata/testinput2 index 3b26f4b..aba73af 100644 --- a/testdata/testinput2 +++ b/testdata/testinput2 @@ -3839,4 +3839,10 @@ backtracking verbs. --/ /(((a\2)|(a*)\g<-1>))*a?/BZ +"((?=(?(?=(?(?=(?(?=())))*)))))" + a + +"(?(?=)?==)(((((((((?=)))))))))" + a + /-- End of testinput2 --/ diff --git a/testdata/testoutput2 b/testdata/testoutput2 index e884638..0dcc5f9 100644 --- a/testdata/testoutput2 +++ b/testdata/testoutput2 @@ -12689,4 +12689,14 @@ Error -21 (recursion limit exceeded) End ------------------------------------------------------------------ +"((?=(?(?=(?(?=(?(?=())))*)))))" + a + 0: + 1: + 2: + +"(?(?=)?==)(((((((((?=)))))))))" + a +No match + /-- End of testinput2 --/ -- 1.9.3