Blob Blame History Raw
From e2d6b400b13cde3cffc1933208399c223459b3ba Mon Sep 17 00:00:00 2001
From: ph10 <ph10@2f5784b3-3f2a-0410-8824-cb99058d5e15>
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ř <ppisar@redhat.com>

Petr Pisar: Ported to 8.32.

Signed-off-by: Petr Písař <ppisar@redhat.com>
---
 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 05d0e52..a5326dc 100644
--- a/pcre_exec.c
+++ b/pcre_exec.c
@@ -1459,7 +1459,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 9670104..0835a98 100644
--- a/testdata/testinput2
+++ b/testdata/testinput2
@@ -3810,4 +3810,10 @@ settings of the anchored and startline bits. --/
 
 /.?/S!I
 
+"((?=(?(?=(?(?=(?(?=())))*)))))"
+    a
+
+"(?(?=)?==)(((((((((?=)))))))))"
+    a
+
 /-- End of testinput2 --/
diff --git a/testdata/testoutput2 b/testdata/testoutput2
index e9cddf8..66c914f 100644
--- a/testdata/testoutput2
+++ b/testdata/testoutput2
@@ -12481,4 +12481,14 @@ No need char
 Subject length lower bound = -1
 No set of starting bytes
 
+"((?=(?(?=(?(?=(?(?=())))*)))))"
+    a
+ 0: 
+ 1: 
+ 2: 
+
+"(?(?=)?==)(((((((((?=)))))))))"
+    a
+No match
+
 /-- End of testinput2 --/
-- 
1.9.3