ppisar pushed to pcre (master). "8.37 RC1 bump"

notifications at fedoraproject.org notifications at fedoraproject.org
Wed Apr 22 12:08:48 UTC 2015


>From 9b5961069918efd9b979249131540a73c717877b Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Petr=20P=C3=ADsa=C5=99?= <ppisar at redhat.com>
Date: Wed, 22 Apr 2015 13:57:42 +0200
Subject: 8.37 RC1 bump


diff --git a/.gitignore b/.gitignore
index 8bc3088..1b28bae 100644
--- a/.gitignore
+++ b/.gitignore
@@ -20,3 +20,4 @@ pcre-8.10.tar.bz2
 /pcre-8.35.tar.bz2
 /pcre-8.36-RC1.tar.bz2
 /pcre-8.36.tar.bz2
+/pcre-8.37-RC1.tar.bz2
diff --git a/pcre-8.36-Fix-backtracking-bug-for-C-X-in-UTF-mode.patch b/pcre-8.36-Fix-backtracking-bug-for-C-X-in-UTF-mode.patch
deleted file mode 100644
index 1141d75..0000000
--- a/pcre-8.36-Fix-backtracking-bug-for-C-X-in-UTF-mode.patch
+++ /dev/null
@@ -1,146 +0,0 @@
-From 9d8c223a96fde36fc21307abad702ed747135809 Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Petr=20P=C3=ADsa=C5=99?= <ppisar at redhat.com>
-Date: Fri, 10 Apr 2015 08:17:18 +0200
-Subject: [PATCH] Fix backtracking bug for \C\X* in UTF mode.
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Upstream commits ported to 8.36:
-
-commit 4a81b0ca19da65ea9a50c208017a74e55c3fd027
-Author: ph10 <ph10 at 2f5784b3-3f2a-0410-8824-cb99058d5e15>
-Date:   Wed Apr 8 16:34:24 2015 +0000
-
-    Fix backtracking bug for \C\X* in UTF mode.
-
-    git-svn-id: svn://vcs.exim.org/pcre/code/trunk@1545 2f5784b3-3f2a-0410-8824-cb99058d5e15
-
-commit 6719c2cdeb7670d4bf10f15a8511ca15af7ea595
-Author: ph10 <ph10 at 2f5784b3-3f2a-0410-8824-cb99058d5e15>
-Date:   Wed Apr 8 16:56:28 2015 +0000
-
-    Fix other cases of backtracking crashes after \C in UTF mode.
-
-    git-svn-id: svn://vcs.exim.org/pcre/code/trunk@1546 2f5784b3-3f2a-0410-8824-
-cb99058d5e15
-
-Signed-off-by: Petr Písař <ppisar at redhat.com>
----
- pcre_exec.c          | 19 ++++++++++++-------
- testdata/testinput4  |  6 ++++++
- testdata/testoutput4 |  8 ++++++++
- 3 files changed, 26 insertions(+), 7 deletions(-)
-
-diff --git a/pcre_exec.c b/pcre_exec.c
-index bb5620d..6c9f4d7 100644
---- a/pcre_exec.c
-+++ b/pcre_exec.c
-@@ -3490,7 +3490,7 @@ for (;;)
-           if (possessive) continue;    /* No backtracking */
-           for(;;)
-             {
--            if (eptr == pp) goto TAIL_RECURSE;
-+            if (eptr <= pp) goto TAIL_RECURSE;
-             RMATCH(eptr, ecode, offset_top, md, eptrb, RM23);
-             if (rrc != MATCH_NOMATCH) RRETURN(rrc);
- #ifdef SUPPORT_UCP
-@@ -3911,7 +3911,7 @@ for (;;)
-           if (possessive) continue;    /* No backtracking */
-           for(;;)
-             {
--            if (eptr == pp) goto TAIL_RECURSE;
-+            if (eptr <= pp) goto TAIL_RECURSE;
-             RMATCH(eptr, ecode, offset_top, md, eptrb, RM30);
-             if (rrc != MATCH_NOMATCH) RRETURN(rrc);
-             eptr--;
-@@ -4046,7 +4046,7 @@ for (;;)
-           if (possessive) continue;    /* No backtracking */
-           for(;;)
-             {
--            if (eptr == pp) goto TAIL_RECURSE;
-+            if (eptr <= pp) goto TAIL_RECURSE;
-             RMATCH(eptr, ecode, offset_top, md, eptrb, RM34);
-             if (rrc != MATCH_NOMATCH) RRETURN(rrc);
-             eptr--;
-@@ -5617,7 +5617,7 @@ for (;;)
-         if (possessive) continue;    /* No backtracking */
-         for(;;)
-           {
--          if (eptr == pp) goto TAIL_RECURSE;
-+          if (eptr <= pp) goto TAIL_RECURSE;
-           RMATCH(eptr, ecode, offset_top, md, eptrb, RM44);
-           if (rrc != MATCH_NOMATCH) RRETURN(rrc);
-           eptr--;
-@@ -5659,12 +5659,17 @@ for (;;)
- 
-         if (possessive) continue;    /* No backtracking */
- 
-+        /* We use <= pp rather than == pp to detect the start of the run while
-+        backtracking because the use of \C in UTF mode can cause BACKCHAR to
-+        move back past pp. This is just palliative; the use of \C in UTF mode
-+        is fraught with danger. */
-+
-         for(;;)
-           {
-           int lgb, rgb;
-           PCRE_PUCHAR fptr;
- 
--          if (eptr == pp) goto TAIL_RECURSE;   /* At start of char run */
-+          if (eptr <= pp) goto TAIL_RECURSE;   /* At start of char run */
-           RMATCH(eptr, ecode, offset_top, md, eptrb, RM45);
-           if (rrc != MATCH_NOMATCH) RRETURN(rrc);
- 
-@@ -5682,7 +5687,7 @@ for (;;)
- 
-           for (;;)
-             {
--            if (eptr == pp) goto TAIL_RECURSE;   /* At start of char run */
-+            if (eptr <= pp) goto TAIL_RECURSE;   /* At start of char run */
-             fptr = eptr - 1;
-             if (!utf) c = *fptr; else
-               {
-@@ -5932,7 +5937,7 @@ for (;;)
-         if (possessive) continue;    /* No backtracking */
-         for(;;)
-           {
--          if (eptr == pp) goto TAIL_RECURSE;
-+          if (eptr <= pp) goto TAIL_RECURSE;
-           RMATCH(eptr, ecode, offset_top, md, eptrb, RM46);
-           if (rrc != MATCH_NOMATCH) RRETURN(rrc);
-           eptr--;
-diff --git a/testdata/testinput4 b/testdata/testinput4
-index 04fca1a..f139c62 100644
---- a/testdata/testinput4
-+++ b/testdata/testinput4
-@@ -724,4 +724,10 @@
- 
- "[\S\V\H]"8
- 
-+/\C\X*QT/8
-+    Ӆ\x0aT
-+
-+/\C(\W?ſ)'?{{/8
-+    \\C(\\W?ſ)'?{{
-+
- /-- End of testinput4 --/
-diff --git a/testdata/testoutput4 b/testdata/testoutput4
-index 340a949..ffd02ea 100644
---- a/testdata/testoutput4
-+++ b/testdata/testoutput4
-@@ -1273,4 +1273,12 @@ No match
- 
- "[\S\V\H]"8
- 
-+/\C\X*QT/8
-+    Ӆ\x0aT
-+No match
-+
-+/\C(\W?ſ)'?{{/8
-+    \\C(\\W?ſ)'?{{
-+No match
-+
- /-- End of testinput4 --/
--- 
-2.1.0
-
diff --git a/pcre-8.36-Fix-bug-when-there-are-unset-groups-prior-to-ACCEPT-.patch b/pcre-8.36-Fix-bug-when-there-are-unset-groups-prior-to-ACCEPT-.patch
deleted file mode 100644
index 13eb08d..0000000
--- a/pcre-8.36-Fix-bug-when-there-are-unset-groups-prior-to-ACCEPT-.patch
+++ /dev/null
@@ -1,71 +0,0 @@
-From e2eeaf85f1b5d6c4669b621d309ff904cbf96f4b Mon Sep 17 00:00:00 2001
-From: ph10 <ph10 at 2f5784b3-3f2a-0410-8824-cb99058d5e15>
-Date: Wed, 5 Nov 2014 15:08:03 +0000
-Subject: [PATCH] Fix bug when there are unset groups prior to (*ACCEPT) within
- a capturing group.
-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@1510 2f5784b3-3f2a-0410-8824-cb99058d5e15
-Signed-off-by: Petr Písař <ppisar at redhat.com>
-
-Petr Pisar: Ported to 8.36
-
-diff --git a/pcre_exec.c b/pcre_exec.c
-index 654eb9e..fdf7067 100644
---- a/pcre_exec.c
-+++ b/pcre_exec.c
-@@ -1474,7 +1474,18 @@ for (;;)
-       md->offset_vector[offset] =
-         md->offset_vector[md->offset_end - number];
-       md->offset_vector[offset+1] = (int)(eptr - md->start_subject);
--      if (offset_top <= offset) offset_top = offset + 2;
-+
-+      /* If this group is at or above the current highwater mark, ensure that
-+      any groups between the current high water mark and this group are marked
-+      unset and then update the high water mark. */
-+
-+      if (offset >= offset_top)
-+        {
-+        register int *iptr = md->offset_vector + offset_top;
-+        register int *iend = md->offset_vector + offset;
-+        while (iptr < iend) *iptr++ = -1;
-+        offset_top = offset + 2;
-+        }
-       }
-     ecode += 1 + IMM2_SIZE;
-     break;
-diff --git a/testdata/testinput1 b/testdata/testinput1
-index 123e3d3..091e307 100644
---- a/testdata/testinput1
-+++ b/testdata/testinput1
-@@ -5720,4 +5720,7 @@ AbcdCBefgBhiBqz
- /[\Q]a\E]+/
-     aa]]
- 
-+/(?:((abcd))|(((?:(?:(?:(?:abc|(?:abcdef))))b)abcdefghi)abc)|((*ACCEPT)))/
-+    1234abcd
-+
- /-- End of testinput1 --/
-diff --git a/testdata/testoutput1 b/testdata/testoutput1
-index 5e71900..ba7ca37 100644
---- a/testdata/testoutput1
-+++ b/testdata/testoutput1
-@@ -9411,4 +9411,13 @@ No match
-     aa]]
-  0: aa]]
- 
-+/(?:((abcd))|(((?:(?:(?:(?:abc|(?:abcdef))))b)abcdefghi)abc)|((*ACCEPT)))/
-+    1234abcd
-+ 0: 
-+ 1: <unset>
-+ 2: <unset>
-+ 3: <unset>
-+ 4: <unset>
-+ 5: 
-+
- /-- End of testinput1 --/
--- 
-1.9.3
-
diff --git a/pcre-8.36-Fix-comment-between-subroutine-call-and-quantifier-b.patch b/pcre-8.36-Fix-comment-between-subroutine-call-and-quantifier-b.patch
deleted file mode 100644
index 1d68501..0000000
--- a/pcre-8.36-Fix-comment-between-subroutine-call-and-quantifier-b.patch
+++ /dev/null
@@ -1,125 +0,0 @@
-From 9b7e52d469c3c0016efb9e0a74895b187215cecb Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Petr=20P=C3=ADsa=C5=99?= <ppisar at redhat.com>
-Date: Thu, 9 Apr 2015 17:50:59 +0200
-Subject: [PATCH] Fix comment between subroutine call and quantifier bug.
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Upstream commit ported to 8.36:
-
-commit 0bff93ec6f942ad9703a33416c3ca2ddc060de73
-Author: ph10 <ph10 at 2f5784b3-3f2a-0410-8824-cb99058d5e15>
-Date:   Sun Mar 29 11:22:24 2015 +0000
-
-    Fix comment between subroutine call and quantifier bug.
-
-    git-svn-id: svn://vcs.exim.org/pcre/code/trunk@1538 2f5784b3-3f2a-0410-8824-
-cb99058d5e15
-
-Signed-off-by: Petr Písař <ppisar at redhat.com>
-
-diff --git a/pcre_compile.c b/pcre_compile.c
-index ce187cd..603e50a 100644
---- a/pcre_compile.c
-+++ b/pcre_compile.c
-@@ -6426,15 +6426,25 @@ for (;; ptr++)
-     parenthesis forms.  */
- 
-     case CHAR_LEFT_PARENTHESIS:
--    newoptions = options;
--    skipbytes = 0;
--    bravalue = OP_CBRA;
--    save_hwm = cd->hwm;
--    reset_bracount = FALSE;
-+    ptr++;
- 
--    /* First deal with various "verbs" that can be introduced by '*'. */
-+    /* First deal with comments. Putting this code right at the start ensures
-+    that comments have no bad side effects. */
-+                                                                            
-+    if (ptr[0] == CHAR_QUESTION_MARK && ptr[1] == CHAR_NUMBER_SIGN)       
-+      {                                                       
-+      ptr += 2;                
-+      while (*ptr != CHAR_NULL && *ptr != CHAR_RIGHT_PARENTHESIS) ptr++;
-+      if (*ptr == CHAR_NULL)                                     
-+        {                                                                 
-+        *errorcodeptr = ERR18;                                          
-+        goto FAILED;                                               
-+        }                                                           
-+      continue;                                                         
-+      }                        
-+
-+    /* Now deal with various "verbs" that can be introduced by '*'. */
- 
--    ptr++;
-     if (ptr[0] == CHAR_ASTERISK && (ptr[1] == ':'
-          || (MAX_255(ptr[1]) && ((cd->ctypes[ptr[1]] & ctype_letter) != 0))))
-       {
-@@ -6555,10 +6565,18 @@ for (;; ptr++)
-       goto FAILED;
-       }
- 
-+    /* Initialize for "real" parentheses */
-+
-+    newoptions = options;
-+    skipbytes = 0;
-+    bravalue = OP_CBRA;
-+    save_hwm = cd->hwm;
-+    reset_bracount = FALSE;
-+
-     /* Deal with the extended parentheses; all are introduced by '?', and the
-     appearance of any of them means that this is not a capturing group. */
- 
--    else if (*ptr == CHAR_QUESTION_MARK)
-+    if (*ptr == CHAR_QUESTION_MARK)
-       {
-       int i, set, unset, namelen;
-       int *optset;
-@@ -6567,17 +6585,6 @@ for (;; ptr++)
- 
-       switch (*(++ptr))
-         {
--        case CHAR_NUMBER_SIGN:                 /* Comment; skip to ket */
--        ptr++;
--        while (*ptr != CHAR_NULL && *ptr != CHAR_RIGHT_PARENTHESIS) ptr++;
--        if (*ptr == CHAR_NULL)
--          {
--          *errorcodeptr = ERR18;
--          goto FAILED;
--          }
--        continue;
--
--
-         /* ------------------------------------------------------------ */
-         case CHAR_VERTICAL_LINE:  /* Reset capture count for each branch */
-         reset_bracount = TRUE;
-diff --git a/testdata/testinput1 b/testdata/testinput1
-index 091e307..29f9d2d 100644
---- a/testdata/testinput1
-+++ b/testdata/testinput1
-@@ -5723,4 +5723,7 @@ AbcdCBefgBhiBqz
- /(?:((abcd))|(((?:(?:(?:(?:abc|(?:abcdef))))b)abcdefghi)abc)|((*ACCEPT)))/
-     1234abcd
- 
-+"(?1)(?#?'){8}(a)"
-+    baaaaaaaaac
-+
- /-- End of testinput1 --/
-diff --git a/testdata/testoutput1 b/testdata/testoutput1
-index ba7ca37..34d1b55 100644
---- a/testdata/testoutput1
-+++ b/testdata/testoutput1
-@@ -9420,4 +9420,9 @@ No match
-  4: <unset>
-  5: 
- 
-+"(?1)(?#?'){8}(a)"
-+    baaaaaaaaac
-+ 0: aaaaaaaaa
-+ 1: a
-+
- /-- End of testinput1 --/
--- 
-2.1.0
-
diff --git a/pcre-8.36-Fix-memory-bug-for-S-V-H-compile.patch b/pcre-8.36-Fix-memory-bug-for-S-V-H-compile.patch
deleted file mode 100644
index 4a649c8..0000000
--- a/pcre-8.36-Fix-memory-bug-for-S-V-H-compile.patch
+++ /dev/null
@@ -1,68 +0,0 @@
-From 0b2b017da7c68a8cddd3ee3395dcc26c87236402 Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Petr=20P=C3=ADsa=C5=99?= <ppisar at redhat.com>
-Date: Thu, 9 Apr 2015 17:02:59 +0200
-Subject: [PATCH] Fix memory bug for [\S\V\H] compile.
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-This is upstream commit ported to 8.36:
-
-commit ef430ada283aba3ff71d7de496904f4d137280f8
-Author: ph10 <ph10 at 2f5784b3-3f2a-0410-8824-cb99058d5e15>
-Date:   Fri Mar 27 16:44:50 2015 +0000
-
-    Fix memory bug for [\S\V\H] compile.
-
-    git-svn-id: svn://vcs.exim.org/pcre/code/trunk@1536 2f5784b3-3f2a-0410-8824-
-cb99058d5e15
-
-Signed-off-by: Petr Písař <ppisar at redhat.com>
----
- pcre_compile.c       | 6 ++++++
- testdata/testinput4  | 2 ++
- testdata/testoutput4 | 2 ++
- 3 files changed, 10 insertions(+)
-
-diff --git a/pcre_compile.c b/pcre_compile.c
-index efc0b21..c256ea5 100644
---- a/pcre_compile.c
-+++ b/pcre_compile.c
-@@ -5472,6 +5472,12 @@ for (;; ptr++)
-       }
- #endif
- 
-+    /* Even though any XCLASS list is now discarded, we must allow for
-+    its memory. */
-+
-+    if (lengthptr != NULL)
-+      *lengthptr += (int)(class_uchardata - class_uchardata_base);
-+
-     /* If there are no characters > 255, or they are all to be included or
-     excluded, set the opcode to OP_CLASS or OP_NCLASS, depending on whether the
-     whole class was negated and whether there were negative specials such as \S
-diff --git a/testdata/testinput4 b/testdata/testinput4
-index 0110267..04fca1a 100644
---- a/testdata/testinput4
-+++ b/testdata/testinput4
-@@ -722,4 +722,6 @@
- /^#[^\x{ffff}]#[^\x{ffff}]#[^\x{ffff}]#/8
-     #\x{10000}#\x{100}#\x{10ffff}#
- 
-+"[\S\V\H]"8
-+
- /-- End of testinput4 --/
-diff --git a/testdata/testoutput4 b/testdata/testoutput4
-index dcf13b0..340a949 100644
---- a/testdata/testoutput4
-+++ b/testdata/testoutput4
-@@ -1271,4 +1271,6 @@ No match
-     #\x{10000}#\x{100}#\x{10ffff}#
-  0: #\x{10000}#\x{100}#\x{10ffff}#
- 
-+"[\S\V\H]"8
-+
- /-- End of testinput4 --/
--- 
-2.1.0
-
diff --git a/pcre-8.36-Fix-mutual-recursion-inside-other-groups-stack-overf.patch b/pcre-8.36-Fix-mutual-recursion-inside-other-groups-stack-overf.patch
deleted file mode 100644
index d5d7237..0000000
--- a/pcre-8.36-Fix-mutual-recursion-inside-other-groups-stack-overf.patch
+++ /dev/null
@@ -1,60 +0,0 @@
-From 9ddce66fd62671186bcd66b1aa72e31cba135c26 Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Petr=20P=C3=ADsa=C5=99?= <ppisar at redhat.com>
-Date: Thu, 9 Apr 2015 17:23:38 +0200
-Subject: [PATCH] Fix mutual recursion inside other groups stack overflow bug.
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Upstream commit ported to 8.36:
-
-commit e97ec7dc839022a3efe740c532ea3e67e4446430
-Author: ph10 <ph10 at 2f5784b3-3f2a-0410-8824-cb99058d5e15>
-Date:   Fri Mar 27 17:48:28 2015 +0000
-
-    Fix mutual recursion inside other groups stack overflow bug.
-
-    git-svn-id: svn://vcs.exim.org/pcre/code/trunk@1537 2f5784b3-3f2a-0410-8824-cb99058d5e15
-
-Signed-off-by: Petr Písař <ppisar at redhat.com>
-
-diff --git a/pcre_compile.c b/pcre_compile.c
-index c256ea5..ce187cd 100644
---- a/pcre_compile.c
-+++ b/pcre_compile.c
-@@ -2469,8 +2469,8 @@ for (code = first_significant_code(code + PRIV(OP_lengths)[*code], TRUE);
-       empty_branch = FALSE;
-       do
-         {
--        if (!empty_branch && could_be_empty_branch(code, endcode, utf, cd, NULL))
--          empty_branch = TRUE;
-+        if (!empty_branch && could_be_empty_branch(code, endcode, utf, cd, 
-+          recurses)) empty_branch = TRUE;
-         code += GET(code, 1);
-         }
-       while (*code == OP_ALT);
-diff --git a/testdata/testinput2 b/testdata/testinput2
-index 015422e..c01a094 100644
---- a/testdata/testinput2
-+++ b/testdata/testinput2
-@@ -4084,4 +4084,6 @@ backtracking verbs. --/
- "(?(?=)?==)(((((((((?=)))))))))"
-     a
- 
-+"((?2)+)((?1))"
-+
- /-- End of testinput2 --/
-diff --git a/testdata/testoutput2 b/testdata/testoutput2
-index 9a1b14e..0118730 100644
---- a/testdata/testoutput2
-+++ b/testdata/testoutput2
-@@ -14216,4 +14216,6 @@ Failed: non-hex character in \x{} (closing brace missing?) at offset 3
-     a
- No match
- 
-+"((?2)+)((?1))"
-+
- /-- End of testinput2 --/
--- 
-2.1.0
-
diff --git a/pcre-8.36-Fix-pcregrep-loop-when-K-is-used-in-a-lookbehind-ass.patch b/pcre-8.36-Fix-pcregrep-loop-when-K-is-used-in-a-lookbehind-ass.patch
deleted file mode 100644
index fd7ef9f..0000000
--- a/pcre-8.36-Fix-pcregrep-loop-when-K-is-used-in-a-lookbehind-ass.patch
+++ /dev/null
@@ -1,211 +0,0 @@
-From 8f907e8731b5eb4aca840a1979e76eed1b5c8175 Mon Sep 17 00:00:00 2001
-From: ph10 <ph10 at 2f5784b3-3f2a-0410-8824-cb99058d5e15>
-Date: Tue, 7 Apr 2015 15:52:11 +0000
-Subject: [PATCH] Fix pcregrep loop when \K is used in a lookbehind assertion.
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Upstream commit ported to 8.36:
-
-commit b4332d7dd831b3547b3f541495de4a79554e538e
-Author: ph10 <ph10 at 2f5784b3-3f2a-0410-8824-cb99058d5e15>
-Date:   Tue Apr 7 15:52:11 2015 +0000
-
-    Fix pcregrep loop when \K is used in a lookbehind assertion.
-
-    git-svn-id: svn://vcs.exim.org/pcre/code/trunk@1543 2f5784b3-3f2a-0410-8824-cb99058d5e15
-
-Signed-off-by: Petr Písař <ppisar at redhat.com>
----
- RunGrepTest         |   5 +++
- pcregrep.c          | 109 ++++++++++++++++++++++++++++++++++------------------
- testdata/grepoutput |   8 ++++
- 3 files changed, 85 insertions(+), 37 deletions(-)
-
-diff --git a/RunGrepTest b/RunGrepTest
-index f1b0348..766278b 100755
---- a/RunGrepTest
-+++ b/RunGrepTest
-@@ -506,6 +506,11 @@ echo "---------------------------- Test 106 -----------------------------" >>tes
- (cd $srcdir; echo "a" | $valgrind $pcregrep -M "|a" ) >>testtrygrep 2>&1
- echo "RC=$?" >>testtrygrep
- 
-+echo "---------------------------- Test 107 -----------------------------" >>testtrygrep
-+echo "a" >testtemp1grep
-+echo "aaaaa" >>testtemp1grep
-+(cd $srcdir; $valgrind $pcregrep  --line-offsets '(?<=\Ka)' testtemp1grep) >>testtrygrep 2>&1
-+echo "RC=$?" >>testtrygrep
- 
- # Now compare the results.
- 
-diff --git a/pcregrep.c b/pcregrep.c
-index 4f7fa38..b1af129 100644
---- a/pcregrep.c
-+++ b/pcregrep.c
-@@ -1582,11 +1582,14 @@ while (ptr < endptr)
-   int endlinelength;
-   int mrc = 0;
-   int startoffset = 0;
-+  int prevoffsets[2]; 
-   unsigned int options = 0;
-   BOOL match;
-   char *matchptr = ptr;
-   char *t = ptr;
-   size_t length, linelength;
-+  
-+  prevoffsets[0] = prevoffsets[1] = -1; 
- 
-   /* At this point, ptr is at the start of a line. We need to find the length
-   of the subject string to pass to pcre_exec(). In multiline mode, it is the
-@@ -1729,55 +1732,86 @@ while (ptr < endptr)
-       {
-       if (!invert)
-         {
--        if (printname != NULL) fprintf(stdout, "%s:", printname);
--        if (number) fprintf(stdout, "%d:", linenumber);
--
--        /* Handle --line-offsets */
--
--        if (line_offsets)
--          fprintf(stdout, "%d,%d\n", (int)(matchptr + offsets[0] - ptr),
--            offsets[1] - offsets[0]);
--
--        /* Handle --file-offsets */
--
--        else if (file_offsets)
--          fprintf(stdout, "%d,%d\n",
--            (int)(filepos + matchptr + offsets[0] - ptr),
--            offsets[1] - offsets[0]);
--
--        /* Handle --only-matching, which may occur many times */
--
--        else
-+        int oldstartoffset = startoffset;
-+        
-+        /* It is possible, when a lookbehind assertion contains \K, for the 
-+        same string to be found again. The code below advances startoffset, but 
-+        until it is past the "bumpalong" offset that gave the match, the same
-+        substring will be returned. The PCRE1 library does not return the
-+        bumpalong offset, so all we can do is ignore repeated strings. (PCRE2
-+        does this better.) */
-+         
-+        if (prevoffsets[0] != offsets[0] || prevoffsets[1] != offsets[1])
-           {
--          BOOL printed = FALSE;
--          omstr *om;
--
--          for (om = only_matching; om != NULL; om = om->next)
-+          prevoffsets[0] = offsets[0];
-+          prevoffsets[1] = offsets[1]; 
-+            
-+          if (printname != NULL) fprintf(stdout, "%s:", printname);
-+          if (number) fprintf(stdout, "%d:", linenumber);
-+          
-+          /* Handle --line-offsets */
-+          
-+          if (line_offsets)
-+            fprintf(stdout, "%d,%d\n", (int)(matchptr + offsets[0] - ptr),
-+              offsets[1] - offsets[0]);
-+          
-+          /* Handle --file-offsets */
-+          
-+          else if (file_offsets)
-+            fprintf(stdout, "%d,%d\n",
-+              (int)(filepos + matchptr + offsets[0] - ptr),
-+              offsets[1] - offsets[0]);
-+          
-+          /* Handle --only-matching, which may occur many times */
-+          
-+          else
-             {
--            int n = om->groupnum;
--            if (n < mrc)
-+            BOOL printed = FALSE;
-+            omstr *om;
-+          
-+            for (om = only_matching; om != NULL; om = om->next)
-               {
--              int plen = offsets[2*n + 1] - offsets[2*n];
--              if (plen > 0)
-+              int n = om->groupnum;
-+              if (n < mrc)
-                 {
--                if (printed) fprintf(stdout, "%s", om_separator);
--                if (do_colour) fprintf(stdout, "%c[%sm", 0x1b, colour_string);
--                FWRITE(matchptr + offsets[n*2], 1, plen, stdout);
--                if (do_colour) fprintf(stdout, "%c[00m", 0x1b);
--                printed = TRUE;
-+                int plen = offsets[2*n + 1] - offsets[2*n];
-+                if (plen > 0)
-+                  {
-+                  if (printed) fprintf(stdout, "%s", om_separator);
-+                  if (do_colour) fprintf(stdout, "%c[%sm", 0x1b, colour_string);
-+                  FWRITE(matchptr + offsets[n*2], 1, plen, stdout);
-+                  if (do_colour) fprintf(stdout, "%c[00m", 0x1b);
-+                  printed = TRUE;
-+                  }
-                 }
-               }
-+          
-+            if (printed || printname != NULL || number) fprintf(stdout, "\n");
-             }
--
--          if (printed || printname != NULL || number) fprintf(stdout, "\n");
--          }
--
--        /* Prepare to repeat to find the next match */
-+          }   
-+
-+        /* Prepare to repeat to find the next match. If the patterned contained 
-+        a lookbehind tht included \K, it is possible that the end of the match 
-+        might be at or before the actual strting offset we have just used. We 
-+        need to start one character further on. Unfortunately, for unanchored 
-+        patterns, the actual start offset can be greater that the one that was 
-+        set as a result of "bumpalong". PCRE1 does not return the actual start 
-+        offset, so we have to check against the original start offset. This may 
-+        lead to duplicates - we we need the fudge above to avoid printing them. 
-+        (PCRE2 does this better.) */
- 
-         match = FALSE;
-         if (line_buffered) fflush(stdout);
-         rc = 0;                      /* Had some success */
-         startoffset = offsets[1];    /* Restart after the match */
-+        if (startoffset <= oldstartoffset)
-+          {
-+          if ((size_t)startoffset >= length) 
-+            goto END_ONE_MATCH;              /* We were at the end */
-+          startoffset = oldstartoffset + 1;
-+          if (utf8)
-+            while ((matchptr[startoffset] & 0xc0) == 0x80) startoffset++;    
-+          }   
-         goto ONLY_MATCHING_RESTART;
-         }
-       }
-@@ -1974,6 +2008,7 @@ while (ptr < endptr)
-   /* Advance to after the newline and increment the line number. The file
-   offset to the current line is maintained in filepos. */
- 
-+  END_ONE_MATCH:
-   ptr += linelength + endlinelength;
-   filepos += (int)(linelength + endlinelength);
-   linenumber++;
-diff --git a/testdata/grepoutput b/testdata/grepoutput
-index 9bf9d9d..4d61752 100644
---- a/testdata/grepoutput
-+++ b/testdata/grepoutput
-@@ -743,3 +743,11 @@ RC=0
- ---------------------------- Test 106 -----------------------------
- a
- RC=0
-+---------------------------- Test 107 -----------------------------
-+1:0,1
-+2:0,1
-+2:1,1
-+2:2,1
-+2:3,1
-+2:4,1
-+RC=0
--- 
-2.1.0
-
diff --git a/pcre-8.36-Fix-pcretest-loop-for-K-in-lookbehind-assertion.patch b/pcre-8.36-Fix-pcretest-loop-for-K-in-lookbehind-assertion.patch
deleted file mode 100644
index 7183ff1..0000000
--- a/pcre-8.36-Fix-pcretest-loop-for-K-in-lookbehind-assertion.patch
+++ /dev/null
@@ -1,175 +0,0 @@
-From a690f6bf85225c34d3e336664d2437c16f7a7238 Mon Sep 17 00:00:00 2001
-From: ph10 <ph10 at 2f5784b3-3f2a-0410-8824-cb99058d5e15>
-Date: Tue, 7 Apr 2015 16:19:03 +0000
-Subject: [PATCH] Fix pcretest loop for \K in lookbehind assertion.
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Upstream commit ported to 8.36:
-
-commit c3579a7581cb8b3ca3c9617d63083afea29de646
-Author: ph10 <ph10 at 2f5784b3-3f2a-0410-8824-cb99058d5e15>
-Date:   Tue Apr 7 16:19:03 2015 +0000
-
-    Fix pcretest loop for \K in lookbehind assertion.
-
-    git-svn-id: svn://vcs.exim.org/pcre/code/trunk@1544 2f5784b3-3f2a-0410-8824-cb99058d5e15
-
-Signed-off-by: Petr Písař <ppisar at redhat.com>
----
- pcretest.c           | 30 +++++++++++++++++++++++++++---
- testdata/testinput2  |  6 ++++++
- testdata/testinput5  |  6 ++++++
- testdata/testoutput2 | 28 ++++++++++++++++++++++++++++
- testdata/testoutput5 | 28 ++++++++++++++++++++++++++++
- 5 files changed, 95 insertions(+), 3 deletions(-)
-
-diff --git a/pcretest.c b/pcretest.c
-index b8dc3c6..6e6ef48 100644
---- a/pcretest.c
-+++ b/pcretest.c
-@@ -5618,9 +5618,33 @@ while (!done)
-         g_notempty = PCRE_NOTEMPTY_ATSTART | PCRE_ANCHORED;
-         }
- 
--      /* For /g, update the start offset, leaving the rest alone */
--
--      if (do_g) start_offset = use_offsets[1];
-+      /* For /g, update the start offset, leaving the rest alone. There is a 
-+      tricky case when \K is used in a positive lookbehind assertion. This can 
-+      cause the end of the match to be less than or equal to the start offset. 
-+      In this case we restart at one past the start offset. This may return the 
-+      same match if the original start offset was bumped along during the 
-+      match, but eventually the new start offset will hit the actual start 
-+      offset. (In PCRE2 the true start offset is available, and this can be 
-+      done better. It is not worth doing more than making sure we do not loop 
-+      at this stage in the life of PCRE1.) */
-+
-+      if (do_g) 
-+        {
-+        if (g_notempty == 0 && use_offsets[1] <= start_offset)
-+          {
-+          if (start_offset >= len) break;  /* End of subject */ 
-+          start_offset++;
-+          if (use_utf)
-+            {
-+            while (start_offset < len)
-+              {
-+              if ((bptr[start_offset] & 0xc0) != 0x80) break;
-+              start_offset++;
-+              }
-+            }
-+          }  
-+        else start_offset = use_offsets[1];
-+        } 
- 
-       /* For /G, update the pointer and length */
- 
-diff --git a/testdata/testinput2 b/testdata/testinput2
-index 0fc535a..f8fbced 100644
---- a/testdata/testinput2
-+++ b/testdata/testinput2
-@@ -4088,4 +4088,10 @@ backtracking verbs. --/
- 
- "(?<=((?2))((?1)))"
- 
-+/(?<=\Ka)/g+
-+    aaaaa
-+
-+/(?<=\Ka)/G+
-+    aaaaa
-+
- /-- End of testinput2 --/
-diff --git a/testdata/testinput5 b/testdata/testinput5
-index e36b09d..fe7218d 100644
---- a/testdata/testinput5
-+++ b/testdata/testinput5
-@@ -790,4 +790,10 @@
- 
- /[b-d\x{200}-\x{250}]*[ae-h]?#[\x{200}-\x{250}]{0,8}[\x00-\xff]*#[\x{200}-\x{250}]+[a-z]/8BZ
- 
-+/(?<=\K\x{17f})/8g+
-+    \x{17f}\x{17f}\x{17f}\x{17f}\x{17f}
-+
-+/(?<=\K\x{17f})/8G+
-+    \x{17f}\x{17f}\x{17f}\x{17f}\x{17f}
-+
- /-- End of testinput5 --/
-diff --git a/testdata/testoutput2 b/testdata/testoutput2
-index 45662a9..5233de4 100644
---- a/testdata/testoutput2
-+++ b/testdata/testoutput2
-@@ -14221,4 +14221,32 @@ No match
- "(?<=((?2))((?1)))"
- Failed: lookbehind assertion is not fixed length at offset 17
- 
-+/(?<=\Ka)/g+
-+    aaaaa
-+ 0: a
-+ 0+ aaaa
-+ 0: a
-+ 0+ aaaa
-+ 0: a
-+ 0+ aaa
-+ 0: a
-+ 0+ aa
-+ 0: a
-+ 0+ a
-+ 0: a
-+ 0+ 
-+
-+/(?<=\Ka)/G+
-+    aaaaa
-+ 0: a
-+ 0+ aaaa
-+ 0: a
-+ 0+ aaa
-+ 0: a
-+ 0+ aa
-+ 0: a
-+ 0+ a
-+ 0: a
-+ 0+ 
-+
- /-- End of testinput2 --/
-diff --git a/testdata/testoutput5 b/testdata/testoutput5
-index 5c098e6..b338e23 100644
---- a/testdata/testoutput5
-+++ b/testdata/testoutput5
-@@ -1897,4 +1897,32 @@ Failed: disallowed Unicode code point (>= 0xd800 && <= 0xdfff) at offset 5
-         End
- ------------------------------------------------------------------
- 
-+/(?<=\K\x{17f})/8g+
-+    \x{17f}\x{17f}\x{17f}\x{17f}\x{17f}
-+ 0: \x{17f}
-+ 0+ \x{17f}\x{17f}\x{17f}\x{17f}
-+ 0: \x{17f}
-+ 0+ \x{17f}\x{17f}\x{17f}\x{17f}
-+ 0: \x{17f}
-+ 0+ \x{17f}\x{17f}\x{17f}
-+ 0: \x{17f}
-+ 0+ \x{17f}\x{17f}
-+ 0: \x{17f}
-+ 0+ \x{17f}
-+ 0: \x{17f}
-+ 0+ 
-+
-+/(?<=\K\x{17f})/8G+
-+    \x{17f}\x{17f}\x{17f}\x{17f}\x{17f}
-+ 0: \x{17f}
-+ 0+ \x{17f}\x{17f}\x{17f}\x{17f}
-+ 0: \x{17f}
-+ 0+ \x{17f}\x{17f}\x{17f}
-+ 0: \x{17f}
-+ 0+ \x{17f}\x{17f}
-+ 0: \x{17f}
-+ 0+ \x{17f}
-+ 0: \x{17f}
-+ 0+ 
-+
- /-- End of testinput5 --/
--- 
-2.1.0
-
diff --git a/pcre-8.36-Fix-stack-overflow-instead-of-diagnostic-for-mutual-.patch b/pcre-8.36-Fix-stack-overflow-instead-of-diagnostic-for-mutual-.patch
deleted file mode 100644
index bd46e33..0000000
--- a/pcre-8.36-Fix-stack-overflow-instead-of-diagnostic-for-mutual-.patch
+++ /dev/null
@@ -1,151 +0,0 @@
-From 53469ce0ff5dac0aadfda412c4fa243e341e4b30 Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Petr=20P=C3=ADsa=C5=99?= <ppisar at redhat.com>
-Date: Thu, 9 Apr 2015 18:35:04 +0200
-Subject: [PATCH] Fix stack overflow instead of diagnostic for mutual recursion
- inside a lookbehind assertion.
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Upstream commit porter to 8.36:
-
-commit 256d94987eecd7eb87b37e1c981a4e753ed8ab7a
-Author: ph10 <ph10 at 2f5784b3-3f2a-0410-8824-cb99058d5e15>
-Date:   Wed Apr 1 15:43:53 2015 +0000
-
-    Fix stack overflow instead of diagnostic for mutual recursion inside a
-    lookbehind assertion.
-
-    git-svn-id: svn://vcs.exim.org/pcre/code/trunk@1542 2f5784b3-3f2a-0410-8824-cb99058d5e15
-
-Signed-off-by: Petr Písař <ppisar at redhat.com>
----
- pcre_compile.c       | 36 +++++++++++++++++++++++++-----------
- testdata/testinput2  |  2 ++
- testdata/testoutput2 |  3 +++
- 3 files changed, 30 insertions(+), 11 deletions(-)
-
-diff --git a/pcre_compile.c b/pcre_compile.c
-index 603e50a..ec7ecf4 100644
---- a/pcre_compile.c
-+++ b/pcre_compile.c
-@@ -866,6 +866,14 @@ static const pcre_uint8 opcode_possessify[] = {
- };
- 
- 
-+/* Structure for mutual recursion detection. */
-+
-+typedef struct recurse_check {
-+  struct recurse_check *prev;
-+  const pcre_uchar *group;
-+} recurse_check;
-+
-+
- 
- /*************************************************
- *            Find an error text                  *
-@@ -1704,6 +1712,7 @@ Arguments:
-   utf      TRUE in UTF-8 / UTF-16 / UTF-32 mode
-   atend    TRUE if called when the pattern is complete
-   cd       the "compile data" structure
-+  recurses    chain of recurse_check to catch mutual recursion
- 
- Returns:   the fixed length,
-              or -1 if there is no fixed length,
-@@ -1713,10 +1722,11 @@ Returns:   the fixed length,
- */
- 
- static int
--find_fixedlength(pcre_uchar *code, BOOL utf, BOOL atend, compile_data *cd)
-+find_fixedlength(pcre_uchar *code, BOOL utf, BOOL atend, compile_data *cd,
-+  recurse_check *recurses)
- {
- int length = -1;
--
-+recurse_check this_recurse;
- register int branchlength = 0;
- register pcre_uchar *cc = code + 1 + LINK_SIZE;
- 
-@@ -1741,7 +1751,8 @@ for (;;)
-     case OP_ONCE:
-     case OP_ONCE_NC:
-     case OP_COND:
--    d = find_fixedlength(cc + ((op == OP_CBRA)? IMM2_SIZE : 0), utf, atend, cd);
-+    d = find_fixedlength(cc + ((op == OP_CBRA)? IMM2_SIZE : 0), utf, atend, cd,
-+      recurses);
-     if (d < 0) return d;
-     branchlength += d;
-     do cc += GET(cc, 1); while (*cc == OP_ALT);
-@@ -1775,7 +1786,15 @@ for (;;)
-     cs = ce = (pcre_uchar *)cd->start_code + GET(cc, 1);  /* Start subpattern */
-     do ce += GET(ce, 1); while (*ce == OP_ALT);           /* End subpattern */
-     if (cc > cs && cc < ce) return -1;                    /* Recursion */
--    d = find_fixedlength(cs + IMM2_SIZE, utf, atend, cd);
-+    else   /* Check for mutual recursion */
-+      {
-+      recurse_check *r = recurses;
-+      for (r = recurses; r != NULL; r = r->prev) if (r->group == cs) break;
-+      if (r != NULL) return -1;   /* Mutual recursion */
-+      }
-+    this_recurse.prev = recurses;
-+    this_recurse.group = cs;
-+    d = find_fixedlength(cs + IMM2_SIZE, utf, atend, cd, &this_recurse);
-     if (d < 0) return d;
-     branchlength += d;
-     cc += 1 + LINK_SIZE;
-@@ -2334,11 +2353,6 @@ Arguments:
- Returns:      TRUE if what is matched could be empty
- */
- 
--typedef struct recurse_check {
--  struct recurse_check *prev;
--  const pcre_uchar *group;
--} recurse_check;
--
- static BOOL
- could_be_empty_branch(const pcre_uchar *code, const pcre_uchar *endcode,
-   BOOL utf, compile_data *cd, recurse_check *recurses)
-@@ -8225,7 +8239,7 @@ for (;;)
-       int fixed_length;
-       *code = OP_END;
-       fixed_length = find_fixedlength(last_branch,  (options & PCRE_UTF8) != 0,
--        FALSE, cd);
-+        FALSE, cd, NULL);
-       DPRINTF(("fixed length = %d\n", fixed_length));
-       if (fixed_length == -3)
-         {
-@@ -9332,7 +9346,7 @@ if (cd->check_lookbehind)
-       int end_op = *be;
-       *be = OP_END;
-       fixed_length = find_fixedlength(cc, (re->options & PCRE_UTF8) != 0, TRUE,
--        cd);
-+        cd, NULL);
-       *be = end_op;
-       DPRINTF(("fixed length = %d\n", fixed_length));
-       if (fixed_length < 0)
-diff --git a/testdata/testinput2 b/testdata/testinput2
-index c01a094..0fc535a 100644
---- a/testdata/testinput2
-+++ b/testdata/testinput2
-@@ -4086,4 +4086,6 @@ backtracking verbs. --/
- 
- "((?2)+)((?1))"
- 
-+"(?<=((?2))((?1)))"
-+
- /-- End of testinput2 --/
-diff --git a/testdata/testoutput2 b/testdata/testoutput2
-index 0118730..45662a9 100644
---- a/testdata/testoutput2
-+++ b/testdata/testoutput2
-@@ -14218,4 +14218,7 @@ No match
- 
- "((?2)+)((?1))"
- 
-+"(?<=((?2))((?1)))"
-+Failed: lookbehind assertion is not fixed length at offset 17
-+
- /-- End of testinput2 --/
--- 
-2.1.0
-
diff --git a/pcre-8.36-Fix-zero-repeat-assertion-condition-bug.patch b/pcre-8.36-Fix-zero-repeat-assertion-condition-bug.patch
deleted file mode 100644
index 1fb3036..0000000
--- a/pcre-8.36-Fix-zero-repeat-assertion-condition-bug.patch
+++ /dev/null
@@ -1,68 +0,0 @@
-From 48d2472840efc4dc54dfc698d64aa086332a9033 Mon Sep 17 00:00:00 2001
-From: ph10 <ph10 at 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 at redhat.com>
-
-Petr Pisar: Ported to 8.36.
-
-diff --git a/pcre_exec.c b/pcre_exec.c
-index fdf7067..bb5620d 100644
---- a/pcre_exec.c
-+++ b/pcre_exec.c
-@@ -1404,8 +1404,11 @@ for (;;)
-         condition = TRUE;
- 
-         /* Advance ecode past the assertion to the start of the first branch,
--        but adjust it so that the general choosing code below works. */
--
-+        but adjust it so that the general choosing code below works. If the 
-+        assertion has a quantifier that allows zero repeats we must skip over 
-+        the BRAZERO. This is a lunatic thing to do, but somebody did! */
-+        
-+        if (*ecode == OP_BRAZERO) ecode++; 
-         ecode += GET(ecode, 1);
-         while (*ecode == OP_ALT) ecode += GET(ecode, 1);
-         ecode += 1 + LINK_SIZE - PRIV(OP_lengths)[condcode];
-diff --git a/testdata/testinput2 b/testdata/testinput2
-index c6816bf..015422e 100644
---- a/testdata/testinput2
-+++ b/testdata/testinput2
-@@ -4078,4 +4078,10 @@ backtracking verbs. --/
- 
- /\x{whatever}/
- 
-+"((?=(?(?=(?(?=(?(?=())))*)))))"
-+    a
-+
-+"(?(?=)?==)(((((((((?=)))))))))"
-+    a
-+
- /-- End of testinput2 --/
-diff --git a/testdata/testoutput2 b/testdata/testoutput2
-index 1e87026..9a1b14e 100644
---- a/testdata/testoutput2
-+++ b/testdata/testoutput2
-@@ -14206,4 +14206,14 @@ Failed: digits missing in \x{} or \o{} at offset 3
- /\x{whatever}/
- Failed: non-hex character in \x{} (closing brace missing?) at offset 3
- 
-+"((?=(?(?=(?(?=(?(?=())))*)))))"
-+    a
-+ 0: 
-+ 1: 
-+ 2: 
-+
-+"(?(?=)?==)(((((((((?=)))))))))"
-+    a
-+No match
-+
- /-- End of testinput2 --/
--- 
-1.9.3
-
diff --git a/pcre-8.36-Remove-computing-the-JIT-read-only-data-size-in-adva.patch b/pcre-8.36-Remove-computing-the-JIT-read-only-data-size-in-adva.patch
deleted file mode 100644
index 4f49b2e..0000000
--- a/pcre-8.36-Remove-computing-the-JIT-read-only-data-size-in-adva.patch
+++ /dev/null
@@ -1,366 +0,0 @@
-From acfc48addb7b4fc73985f9f236fbb7e12e2388ef Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Petr=20P=C3=ADsa=C5=99?= <ppisar at redhat.com>
-Date: Thu, 26 Mar 2015 10:55:42 +0100
-Subject: [PATCH] Remove computing the JIT read-only data size in advance and
- use on-demand memory allocation.
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Upstream commit:
-
-commit 3831a81914cf11565bf429dd019c9442b404bc5f
-Author: zherczeg <zherczeg at 2f5784b3-3f2a-0410-8824-cb99058d5e15>
-Date:   Thu Mar 5 08:53:37 2015 +0000
-
-    Remove computing the JIT read-only data size in advance and use on-demand memory allocation.
-
-    git-svn-id: svn://vcs.exim.org/pcre/code/trunk@1530 2f5784b3-3f2a-0410-8824-cb99058d5e15
-
-ported to 8.36.
-
-<http://bugs.exim.org/show_bug.cgi?id=1597>
-
-Signed-off-by: Petr Písař <ppisar at redhat.com>
----
- pcre_jit_compile.c        | 123 ++++++++++++++++++----------------------------
- sljit/sljitLir.h          |   6 +++
- sljit/sljitNativeARM_32.c |   4 +-
- testdata/testinput12      |   8 +++
- testdata/testoutput12     |   8 +++
- 5 files changed, 74 insertions(+), 75 deletions(-)
-
-diff --git a/pcre_jit_compile.c b/pcre_jit_compile.c
-index 256e3a4..53049fe 100644
---- a/pcre_jit_compile.c
-+++ b/pcre_jit_compile.c
-@@ -179,7 +179,7 @@ typedef struct jit_arguments {
- 
- typedef struct executable_functions {
-   void *executable_funcs[JIT_NUMBER_OF_COMPILE_MODES];
--  sljit_uw *read_only_data[JIT_NUMBER_OF_COMPILE_MODES];
-+  void *read_only_data_heads[JIT_NUMBER_OF_COMPILE_MODES];
-   sljit_uw executable_sizes[JIT_NUMBER_OF_COMPILE_MODES];
-   PUBL(jit_callback) callback;
-   void *userdata;
-@@ -322,14 +322,10 @@ typedef struct compiler_common {
-   pcre_uchar *start;
-   /* Maps private data offset to each opcode. */
-   sljit_si *private_data_ptrs;
--  /* This read-only data is available during runtime. */
--  sljit_uw *read_only_data;
--  /* The total size of the read-only data. */
--  sljit_uw read_only_data_size;
--  /* The next free entry of the read_only_data. */
--  sljit_uw *read_only_data_ptr;
-   /* Tells whether the capturing bracket is optimized. */
-   pcre_uint8 *optimized_cbracket;
-+  /* Chain list of read-only data ptrs. */
-+  void *read_only_data_head;
-   /* Tells whether the starting offset is a target of then. */
-   pcre_uint8 *then_offsets;
-   /* Current position where a THEN must jump. */
-@@ -802,16 +798,6 @@ while (cc < ccend)
-     cc += 1 + IMM2_SIZE;
-     break;
- 
--    case OP_BRA:
--    case OP_CBRA:
--    case OP_SBRA:
--    case OP_SCBRA:
--    count = no_alternatives(cc);
--    if (count > 4)
--      common->read_only_data_size += count * sizeof(sljit_uw);
--    cc += 1 + LINK_SIZE + (*cc == OP_CBRA || *cc == OP_SCBRA ? IMM2_SIZE : 0);
--    break;
--
-     case OP_CBRAPOS:
-     case OP_SCBRAPOS:
-     common->optimized_cbracket[GET2(cc, 1 + LINK_SIZE)] = 0;
-@@ -2114,6 +2100,38 @@ DEFINE_COMPILER;
- OP2(SLJIT_SUB, STACK_TOP, 0, STACK_TOP, 0, SLJIT_IMM, size * sizeof(sljit_sw));
- }
- 
-+static sljit_uw * allocate_read_only_data(compiler_common *common, sljit_uw size)
-+{
-+DEFINE_COMPILER;
-+sljit_uw *result;
-+
-+if (SLJIT_UNLIKELY(sljit_get_compiler_error(compiler)))
-+  return NULL;
-+
-+result = (sljit_uw *)SLJIT_MALLOC(size + sizeof(sljit_uw));
-+if (SLJIT_UNLIKELY(result == NULL))
-+  {
-+  sljit_set_compiler_memory_error(compiler);
-+  return NULL;
-+  }
-+
-+*(void**)result = common->read_only_data_head;
-+common->read_only_data_head = (void *)result;
-+return result + 1;
-+}
-+
-+static void free_read_only_data(void *current)
-+{
-+void *next;
-+
-+while (current != NULL)
-+  {
-+  next = *(void**)current;
-+  SLJIT_FREE(current);
-+  current = next;
-+  }
-+}
-+
- static SLJIT_INLINE void reset_ovector(compiler_common *common, int length)
- {
- DEFINE_COMPILER;
-@@ -3530,9 +3548,6 @@ int range_right = -1, range_len = 3 - 1;
- sljit_ub *update_table = NULL;
- BOOL in_range;
- 
--/* This is even TRUE, if both are NULL. */
--SLJIT_ASSERT(common->read_only_data_ptr == common->read_only_data);
--
- for (i = 0; i < MAX_N_CHARS; i++)
-   {
-   chars[i << 1] = NOTACHAR;
-@@ -3581,18 +3596,9 @@ for (i = 0; i <= max; i++)
- 
- if (range_right >= 0)
-   {
--  /* Since no data is consumed (see the assert in the beginning
--  of this function), this space can be reallocated. */
--  if (common->read_only_data)
--    SLJIT_FREE(common->read_only_data);
--
--  common->read_only_data_size += 256;
--  common->read_only_data = (sljit_uw *)SLJIT_MALLOC(common->read_only_data_size);
--  if (common->read_only_data == NULL)
-+  update_table = (sljit_ub *)allocate_read_only_data(common, 256);
-+  if (update_table == NULL)
-     return TRUE;
--
--  update_table = (sljit_ub *)common->read_only_data;
--  common->read_only_data_ptr = (sljit_uw *)(update_table + 256);
-   memset(update_table, IN_UCHARS(range_len), 256);
- 
-   for (i = 0; i < range_len; i++)
-@@ -8982,8 +8988,9 @@ else if (has_alternatives)
-   if (alt_max > 4)
-     {
-     /* Table jump if alt_max is greater than 4. */
--    next_update_addr = common->read_only_data_ptr;
--    common->read_only_data_ptr += alt_max;
-+    next_update_addr = allocate_read_only_data(common, alt_max * sizeof(sljit_uw));
-+    if (SLJIT_UNLIKELY(next_update_addr == NULL))
-+      return;
-     sljit_emit_ijump(compiler, SLJIT_JUMP, SLJIT_MEM1(TMP1), (sljit_sw)next_update_addr);
-     add_label_addr(common, next_update_addr++);
-     }
-@@ -9766,9 +9773,7 @@ memset(common, 0, sizeof(compiler_common));
- rootbacktrack.cc = (pcre_uchar *)re + re->name_table_offset + re->name_count * re->name_entry_size;
- 
- common->start = rootbacktrack.cc;
--common->read_only_data = NULL;
--common->read_only_data_size = 0;
--common->read_only_data_ptr = NULL;
-+common->read_only_data_head = NULL;
- common->fcc = tables + fcc_offset;
- common->lcc = (sljit_sw)(tables + lcc_offset);
- common->mode = mode;
-@@ -9951,25 +9956,11 @@ if (common->has_then)
-   set_then_offsets(common, common->start, NULL);
-   }
- 
--if (common->read_only_data_size > 0)
--  {
--  common->read_only_data = (sljit_uw *)SLJIT_MALLOC(common->read_only_data_size);
--  if (common->read_only_data == NULL)
--    {
--    SLJIT_FREE(common->optimized_cbracket);
--    SLJIT_FREE(common->private_data_ptrs);
--    return;
--    }
--  common->read_only_data_ptr = common->read_only_data;
--  }
--
- compiler = sljit_create_compiler();
- if (!compiler)
-   {
-   SLJIT_FREE(common->optimized_cbracket);
-   SLJIT_FREE(common->private_data_ptrs);
--  if (common->read_only_data)
--    SLJIT_FREE(common->read_only_data);
-   return;
-   }
- common->compiler = compiler;
-@@ -10008,16 +9999,7 @@ if ((re->options & PCRE_ANCHORED) == 0)
-   if ((re->options & PCRE_NO_START_OPTIMIZE) == 0)
-     {
-     if (mode == JIT_COMPILE && fast_forward_first_n_chars(common, (re->options & PCRE_FIRSTLINE) != 0))
--      {
--      /* If read_only_data is reallocated, we might have an allocation failure. */
--      if (common->read_only_data_size > 0 && common->read_only_data == NULL)
--        {
--        sljit_free_compiler(compiler);
--        SLJIT_FREE(common->optimized_cbracket);
--        SLJIT_FREE(common->private_data_ptrs);
--        return;
--        }
--      }
-+      ;
-     else if ((re->flags & PCRE_FIRSTSET) != 0)
-       fast_forward_first_char(common, (pcre_uchar)re->first_char, (re->flags & PCRE_FCH_CASELESS) != 0, (re->options & PCRE_FIRSTLINE) != 0);
-     else if ((re->flags & PCRE_STARTLINE) != 0)
-@@ -10070,8 +10052,7 @@ if (SLJIT_UNLIKELY(sljit_get_compiler_error(compiler)))
-   sljit_free_compiler(compiler);
-   SLJIT_FREE(common->optimized_cbracket);
-   SLJIT_FREE(common->private_data_ptrs);
--  if (common->read_only_data)
--    SLJIT_FREE(common->read_only_data);
-+  free_read_only_data(common->read_only_data_head);
-   return;
-   }
- 
-@@ -10111,8 +10092,7 @@ if (SLJIT_UNLIKELY(sljit_get_compiler_error(compiler)))
-   sljit_free_compiler(compiler);
-   SLJIT_FREE(common->optimized_cbracket);
-   SLJIT_FREE(common->private_data_ptrs);
--  if (common->read_only_data)
--    SLJIT_FREE(common->read_only_data);
-+  free_read_only_data(common->read_only_data_head);
-   return;
-   }
- 
-@@ -10192,8 +10172,7 @@ while (common->currententry != NULL)
-     sljit_free_compiler(compiler);
-     SLJIT_FREE(common->optimized_cbracket);
-     SLJIT_FREE(common->private_data_ptrs);
--    if (common->read_only_data)
--      SLJIT_FREE(common->read_only_data);
-+    free_read_only_data(common->read_only_data_head);
-     return;
-     }
-   flush_stubs(common);
-@@ -10303,7 +10282,6 @@ if (common->getucd != NULL)
-   }
- #endif
- 
--SLJIT_ASSERT(common->read_only_data + (common->read_only_data_size >> SLJIT_WORD_SHIFT) == common->read_only_data_ptr);
- SLJIT_FREE(common->optimized_cbracket);
- SLJIT_FREE(common->private_data_ptrs);
- 
-@@ -10318,8 +10296,7 @@ while (label_addr != NULL)
- sljit_free_compiler(compiler);
- if (executable_func == NULL)
-   {
--  if (common->read_only_data)
--    SLJIT_FREE(common->read_only_data);
-+  free_read_only_data(common->read_only_data_head);
-   return;
-   }
- 
-@@ -10343,8 +10320,7 @@ else
-     /* This case is highly unlikely since we just recently
-     freed a lot of memory. Not impossible though. */
-     sljit_free_code(executable_func);
--    if (common->read_only_data)
--      SLJIT_FREE(common->read_only_data);
-+    free_read_only_data(common->read_only_data_head);
-     return;
-     }
-   memset(functions, 0, sizeof(executable_functions));
-@@ -10355,7 +10331,7 @@ else
-   }
- 
- functions->executable_funcs[mode] = executable_func;
--functions->read_only_data[mode] = common->read_only_data;
-+functions->read_only_data_heads[mode] = common->read_only_data_head;
- functions->executable_sizes[mode] = executable_size;
- }
- 
-@@ -10542,8 +10518,7 @@ for (i = 0; i < JIT_NUMBER_OF_COMPILE_MODES; i++)
-   {
-   if (functions->executable_funcs[i] != NULL)
-     sljit_free_code(functions->executable_funcs[i]);
--  if (functions->read_only_data[i] != NULL)
--    SLJIT_FREE(functions->read_only_data[i]);
-+  free_read_only_data(functions->read_only_data_heads[i]);
-   }
- SLJIT_FREE(functions);
- }
-diff --git a/sljit/sljitLir.h b/sljit/sljitLir.h
-index 9718871..2e135e2 100644
---- a/sljit/sljitLir.h
-+++ b/sljit/sljitLir.h
-@@ -419,6 +419,12 @@ SLJIT_API_FUNC_ATTRIBUTE void sljit_free_compiler(struct sljit_compiler *compile
-    these checks increases the performance of the compiling process. */
- static SLJIT_INLINE sljit_si sljit_get_compiler_error(struct sljit_compiler *compiler) { return compiler->error; }
- 
-+/* Sets the compiler error code to SLJIT_ERR_ALLOC_FAILED. After
-+   the error code is set, the compiler behaves as if itself detected
-+   an allocation failure. This can greatly simplify error management,
-+   since only the compiler needs to be checked after compilation. */
-+static SLJIT_INLINE void sljit_set_compiler_memory_error(struct sljit_compiler *compiler) { compiler->error = SLJIT_ERR_ALLOC_FAILED; }
-+
- /*
-    Allocate a small amount of memory. The size must be <= 64 bytes on 32 bit,
-    and <= 128 bytes on 64 bit architectures. The memory area is owned by the
-diff --git a/sljit/sljitNativeARM_32.c b/sljit/sljitNativeARM_32.c
-index 0998423..44b539c 100644
---- a/sljit/sljitNativeARM_32.c
-+++ b/sljit/sljitNativeARM_32.c
-@@ -315,11 +315,13 @@ struct future_patch {
- 	sljit_si value;
- };
- 
--static SLJIT_INLINE sljit_si resolve_const_pool_index(struct future_patch **first_patch, sljit_uw cpool_current_index, sljit_uw *cpool_start_address, sljit_uw *buf_ptr)
-+static sljit_si resolve_const_pool_index(struct sljit_compiler *compiler, struct future_patch **first_patch, sljit_uw cpool_current_index, sljit_uw *cpool_start_address, sljit_uw *buf_ptr)
- {
- 	sljit_si value;
- 	struct future_patch *curr_patch, *prev_patch;
- 
-+	SLJIT_UNUSED_ARG(compiler);
-+
- 	/* Using the values generated by patch_pc_relative_loads. */
- 	if (!*first_patch)
- 		value = (sljit_si)cpool_start_address[cpool_current_index];
-diff --git a/testdata/testinput12 b/testdata/testinput12
-index 5d727af..d68551f 100644
---- a/testdata/testinput12
-+++ b/testdata/testinput12
-@@ -87,4 +87,12 @@ and a couple of things that are different with JIT. --/
- /^12345678abcd/mS++
-     12345678abcd
- 
-+/-- Test pattern compilation --/ 
-+
-+/(?:a|b|c|d|e)(?R)/S++
-+
-+/(?:a|b|c|d|e)(?R)(?R)/S++
-+
-+/(a(?:a|b|c|d|e)b){8,16}/S++
-+
- /-- End of testinput12 --/
-diff --git a/testdata/testoutput12 b/testdata/testoutput12
-index 67ad2c8..7a1cf69 100644
---- a/testdata/testoutput12
-+++ b/testdata/testoutput12
-@@ -176,4 +176,12 @@ No match, mark = m (JIT)
-     12345678abcd
-  0: 12345678abcd (JIT)
- 
-+/-- Test pattern compilation --/ 
-+
-+/(?:a|b|c|d|e)(?R)/S++
-+
-+/(?:a|b|c|d|e)(?R)(?R)/S++
-+
-+/(a(?:a|b|c|d|e)b){8,16}/S++
-+
- /-- End of testinput12 --/
--- 
-2.1.0
-
diff --git a/pcre.spec b/pcre.spec
index 332e819..c3ee32c 100644
--- a/pcre.spec
+++ b/pcre.spec
@@ -1,11 +1,28 @@
-# This is stable release:
-#%%global rcversion RC1
+# Is this a stable/testing release:
+%global rcversion RC1
 Name: pcre
-Version: 8.36
-Release: %{?rcversion:0.}5%{?rcversion:.%rcversion}%{?dist}
+Version: 8.37
+Release: %{?rcversion:0.}1%{?rcversion:.%rcversion}%{?dist}
 %global myversion %{version}%{?rcversion:-%rcversion}
 Summary: Perl-compatible regular expression library
 Group: System Environment/Libraries
+## Source package only:
+# ltmain.sh:                (GPLv2+ or BSD) and GPLv3+
+# missing:                  GPLv2+ or BSD
+# compile:                  GPLv2+ or BSD
+# config.sub:               GPLv3+ or BSD
+# m4/ax_pthread.m4:         GPLv3+ with exception
+# m4/libtool.m4:            GPLv2+ or BSD
+# m4/ltversion.m4:          FSFULLR
+# m4/pcre_visibility.m4:    FSFULLR
+# m4/lt~obsolete.m4:        FSFULLR
+# m4/ltsugar.m4:            FSFULLR
+# m4/ltoptions.m4:          FSFULLR
+# aclocal.m4:               (GPLv2+ or BSD) and FSFULLR 
+# Makefile.in:              FSFULLR
+# configure:                FSFUL
+## Binary packages:
+# other files:              BSD
 License: BSD
 URL: http://www.pcre.org/
 Source: ftp://ftp.csx.cam.ac.uk/pub/software/programming/%{name}/%{?rcversion:Testing/}%{name}-%{myversion}.tar.bz2
@@ -13,36 +30,6 @@ Source: ftp://ftp.csx.cam.ac.uk/pub/software/programming/%{name}/%{?rcversion:Te
 Patch0: pcre-8.21-multilib.patch
 # Refused by upstream, bug #675477
 Patch1: pcre-8.32-refused_spelling_terminated.patch
-# Reset non-matched groups within capturing group up to forced match,
-# bug #1161587, in upstream after 8.36
-Patch2: pcre-8.36-Fix-bug-when-there-are-unset-groups-prior-to-ACCEPT-.patch
-# Fix unused memory usage on zero-repeat assertion condition, bug #1165626,
-# CVE-2014-8964, in upstream after 8.36
-Patch3: pcre-8.36-Fix-zero-repeat-assertion-condition-bug.patch
-# Fix computing size of JIT read-only data, bug #1206131, upstream bug #1597,
-# in upstream after 8.36
-Patch4: pcre-8.36-Remove-computing-the-JIT-read-only-data-size-in-adva.patch
-# Fix computing size for pattern with a negated special calss in on-UCP mode,
-# bug #1210383, in upstream after 8.36
-Patch5: pcre-8.36-Fix-memory-bug-for-S-V-H-compile.patch
-# Fix compilation of a pattern with mutual recursion nested inside other group,
-# bug #1210393, in upstream after 8.36
-Patch6: pcre-8.36-Fix-mutual-recursion-inside-other-groups-stack-overf.patch
-# Fix compilation of a parenthesized comment, bug #1210410,
-# in upstream after 8.36
-Patch7: pcre-8.36-Fix-comment-between-subroutine-call-and-quantifier-b.patch
-# Fix compliation of mutual recursion inside a lookbehind assertion,
-# bug #1210417, in upstream after 8.36
-Patch8: pcre-8.36-Fix-stack-overflow-instead-of-diagnostic-for-mutual-.patch
-# Fix pcregrep loop when \K is used in a lookbehind assertion, bug #1210423,
-# in upstream after 8.36
-Patch9: pcre-8.36-Fix-pcregrep-loop-when-K-is-used-in-a-lookbehind-ass.patch
-# Fix pcretest loop when \K is used in a lookbehind assertion, bug #1210423,
-# in upstream after 8.36
-Patch10: pcre-8.36-Fix-pcretest-loop-for-K-in-lookbehind-assertion.patch
-# Fix backtracking for \C\X* in UTF-8 mode, bug #1210576,
-# in upstream after 8.36
-Patch11: pcre-8.36-Fix-backtracking-bug-for-C-X-in-UTF-mode.patch
 BuildRequires: readline-devel
 # New libtool to get rid of rpath
 BuildRequires: autoconf, automake, libtool
@@ -84,16 +71,6 @@ Utilities demonstrating PCRE capabilities like pcregrep or pcretest.
 # Get rid of rpath
 %patch0 -p1 -b .multilib
 %patch1 -p1 -b .terminated_typos
-%patch2 -p1 -b .reset_groups
-%patch3 -p1 -b .zero_repeat_assertion
-%patch4 -p1 -b .jit_size
-%patch5 -p1 -b .size_special_class
-%patch6 -p1 -b .mutual_recursion
-%patch7 -p1 -b .parenthesized_comment
-%patch8 -p1 -b .mutual_recursion_in_assertion
-%patch9 -p1 -b .pcregrep_k_loop
-%patch10 -p1 -b .pcretest_k_loop
-%patch11 -p1 -b .backtracking_cx8
 # Because of rpath patch
 libtoolize --copy --force && autoreconf -vif
 # One contributor's name is non-UTF-8
@@ -109,7 +86,7 @@ done
 %global optflags %{optflags} -fno-strict-aliasing
 %endif
 %configure \
-%ifarch s390 s390x sparc64 sparcv9
+%ifarch aarch64 s390 s390x sparc64 sparcv9
     --disable-jit \
 %else
     --enable-jit \
@@ -164,6 +141,9 @@ make %{?_smp_mflags} check VERBOSE=yes
 %{_mandir}/man1/pcretest.*
 
 %changelog
+* Wed Apr 22 2015 Petr Pisar <ppisar at redhat.com> - 8.37-0.1.RC1
+- 8.37 RC1 bump
+
 * Thu Apr 09 2015 Petr Pisar <ppisar at redhat.com> - 8.36-5
 - Fix computing size for pattern with a negated special calss in on-UCP mode
   (bug #1210383)
diff --git a/sources b/sources
index a5fed82..ec1301c 100644
--- a/sources
+++ b/sources
@@ -1 +1 @@
-b767bc9af0c20bc9c1fe403b0d41ad97  pcre-8.36.tar.bz2
+5abcd103968ef38d9911bbfb494cbc73  pcre-8.37-RC1.tar.bz2
-- 
cgit v0.10.2


	http://pkgs.fedoraproject.org/cgit/pcre.git/commit/?h=master&id=9b5961069918efd9b979249131540a73c717877b


More information about the scm-commits mailing list