summaryrefslogtreecommitdiff
path: root/debian/patches
diff options
context:
space:
mode:
authorMatthew Vernon <matthew@debian.org>2015-12-22 13:37:39 +0000
committerMatthew Vernon <matthew@debian.org>2015-12-22 13:37:39 +0000
commit89fe0c9bb581b5a1608738d68f2520c6426b549b (patch)
tree27cc6788804db5a7fe88b8f08a7e428c4e61a134 /debian/patches
pcre3 (2:8.38-1) unstable; urgency=low
* New upstream version # imported from the archive
Diffstat (limited to 'debian/patches')
-rw-r--r--debian/patches/794589-information-disclosure.patch30
-rw-r--r--debian/patches/Disable_JIT_on_sparc64.patch23
-rw-r--r--debian/patches/Fix-bad-compilation-for-patterns-like-1-1-with-forwa.patch145
-rw-r--r--debian/patches/Fix-bad-compile-for-groups-like-2-0-1999.patch209
-rw-r--r--debian/patches/Fix-buffer-overflow-for-named-recursive-back-referen.patch59
-rw-r--r--debian/patches/Fix-compile-time-loop-for-recursive-reference-within.patch86
-rw-r--r--debian/patches/Fix-compiler-crash-misbehaviour-for-zero-repeated-gr.patch175
-rw-r--r--debian/patches/Fix-silly-quantifier-size-check.patch100
-rw-r--r--debian/patches/PCRE6_compatible_API.patch40
-rw-r--r--debian/patches/cve-2014-8964.patch23
-rw-r--r--debian/patches/fix_find_fixedlength.patch21
-rw-r--r--debian/patches/no_jit_x32_powerpcspe.patch33
-rw-r--r--debian/patches/pcre_info.patch385
-rw-r--r--debian/patches/pcregrep.1-patch26
-rw-r--r--debian/patches/pcreposix.patch31
-rw-r--r--debian/patches/series7
-rw-r--r--debian/patches/soname.patch21
17 files changed, 1414 insertions, 0 deletions
diff --git a/debian/patches/794589-information-disclosure.patch b/debian/patches/794589-information-disclosure.patch
new file mode 100644
index 0000000..b3aba7f
--- /dev/null
+++ b/debian/patches/794589-information-disclosure.patch
@@ -0,0 +1,30 @@
+Description: pcre_exec does not fill offsets for certain regexps
+Origin: upstream, http://vcs.pcre.org/pcre/code/trunk/pcre_exec.c?r1=1502&r2=1510
+Bug: https://bugs.exim.org/show_bug.cgi?id=1537
+Bug-Debian: https://bugs.debian.org/794589
+Forwarded: not-needed
+Last-Update: 2015-09-10
+Applied-Upstream: 8.37
+
+--- a/pcre_exec.c
++++ b/pcre_exec.c
+@@ -1467,7 +1467,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/debian/patches/Disable_JIT_on_sparc64.patch b/debian/patches/Disable_JIT_on_sparc64.patch
new file mode 100644
index 0000000..0a6de34
--- /dev/null
+++ b/debian/patches/Disable_JIT_on_sparc64.patch
@@ -0,0 +1,23 @@
+Description: Disable JIT on sparc64 as it needs explicit porting
+ The test suite currently fails on sparc64 when the JIT is enabled
+ as the JIT has not been ported to sparc64 yet. Thus, disable JIT
+ until it has been explicitly ported to sparc64.
+ .
+
+Index: pcre3/sljit/sljitConfigInternal.h
+===================================================================
+--- pcre3.orig/sljit/sljitConfigInternal.h 2015-12-22 13:30:50.000000000 +0000
++++ pcre3/sljit/sljitConfigInternal.h 2015-12-22 13:33:30.000000000 +0000
+@@ -145,7 +145,11 @@
+ #elif defined(__mips64)
+ #define SLJIT_CONFIG_MIPS_64 1
+ #elif defined(__sparc__) || defined(__sparc)
+-#define SLJIT_CONFIG_SPARC_32 1
++# if defined(__arch64__)
++# define SLJIT_CONFIG_UNSUPPORTED 1
++# else
++# define SLJIT_CONFIG_SPARC_32 1
++# endif
+ #elif defined(__tilegx__)
+ #define SLJIT_CONFIG_TILEGX 1
+ #else
diff --git a/debian/patches/Fix-bad-compilation-for-patterns-like-1-1-with-forwa.patch b/debian/patches/Fix-bad-compilation-for-patterns-like-1-1-with-forwa.patch
new file mode 100644
index 0000000..ed5b5c1
--- /dev/null
+++ b/debian/patches/Fix-bad-compilation-for-patterns-like-1-1-with-forwa.patch
@@ -0,0 +1,145 @@
+Description: CVE-2015-2326: heap buffer overflow in pcre_compile2()
+ Fix bad compilation for patterns like /((?+1)(\1))/ with
+ forward reference subroutine and recursive back reference within the same
+ group.
+Origin: upstream, http://vcs.pcre.org/pcre?view=revision&revision=1529
+Bug: http://bugs.exim.org/show_bug.cgi?id=1592
+Bug-Debian: https://bugs.debian.org/783285
+Forwarded: not-needed
+Last-Update: 2015-09-10
+Applied-Upstream: 8.36
+
+--- a/pcre_compile.c
++++ b/pcre_compile.c
+@@ -8027,6 +8027,7 @@ int length;
+ unsigned int orig_bracount;
+ unsigned int max_bracount;
+ branch_chain bc;
++size_t save_hwm_offset;
+
+ /* If set, call the external function that checks for stack availability. */
+
+@@ -8044,6 +8045,8 @@ bc.current_branch = code;
+ firstchar = reqchar = 0;
+ firstcharflags = reqcharflags = REQ_UNSET;
+
++save_hwm_offset = cd->hwm - cd->start_workspace;
++
+ /* Accumulate the length for use in the pre-compile phase. Start with the
+ length of the BRA and KET and any extra bytes that are required at the
+ beginning. We accumulate in a local variable to save frequent testing of
+@@ -8246,7 +8249,7 @@ for (;;)
+ {
+ *code = OP_END;
+ adjust_recurse(start_bracket, 1 + LINK_SIZE,
+- (options & PCRE_UTF8) != 0, cd, cd->hwm - cd->start_workspace);
++ (options & PCRE_UTF8) != 0, cd, save_hwm_offset);
+ memmove(start_bracket + 1 + LINK_SIZE, start_bracket,
+ IN_UCHARS(code - start_bracket));
+ *start_bracket = OP_ONCE;
+--- a/testdata/testinput11
++++ b/testdata/testinput11
+@@ -134,4 +134,6 @@ is required for these tests. --/
+
+ /(((a\2)|(a*)\g<-1>))*a?/B
+
++/((?+1)(\1))/B
++
+ /-- End of testinput11 --/
+--- a/testdata/testinput2
++++ b/testdata/testinput2
+@@ -4066,4 +4066,6 @@ backtracking verbs. --/
+
+ "((?2){0,1999}())?"
+
++/((?+1)(\1))/BZ
++
+ /-- End of testinput2 --/
+--- a/testdata/testoutput11-16
++++ b/testdata/testoutput11-16
+@@ -733,4 +733,19 @@ Memory allocation (code space): 14
+ 41 End
+ ------------------------------------------------------------------
+
++/((?+1)(\1))/B
++------------------------------------------------------------------
++ 0 20 Bra
++ 2 16 Once
++ 4 12 CBra 1
++ 7 9 Recurse
++ 9 5 CBra 2
++ 12 \1
++ 14 5 Ket
++ 16 12 Ket
++ 18 16 Ket
++ 20 20 Ket
++ 22 End
++------------------------------------------------------------------
++
+ /-- End of testinput11 --/
+--- a/testdata/testoutput11-32
++++ b/testdata/testoutput11-32
+@@ -733,4 +733,19 @@ Memory allocation (code space): 28
+ 41 End
+ ------------------------------------------------------------------
+
++/((?+1)(\1))/B
++------------------------------------------------------------------
++ 0 20 Bra
++ 2 16 Once
++ 4 12 CBra 1
++ 7 9 Recurse
++ 9 5 CBra 2
++ 12 \1
++ 14 5 Ket
++ 16 12 Ket
++ 18 16 Ket
++ 20 20 Ket
++ 22 End
++------------------------------------------------------------------
++
+ /-- End of testinput11 --/
+--- a/testdata/testoutput11-8
++++ b/testdata/testoutput11-8
+@@ -733,4 +733,19 @@ Memory allocation (code space): 10
+ 60 End
+ ------------------------------------------------------------------
+
++/((?+1)(\1))/B
++------------------------------------------------------------------
++ 0 31 Bra
++ 3 25 Once
++ 6 19 CBra 1
++ 11 14 Recurse
++ 14 8 CBra 2
++ 19 \1
++ 22 8 Ket
++ 25 19 Ket
++ 28 25 Ket
++ 31 31 Ket
++ 34 End
++------------------------------------------------------------------
++
+ /-- End of testinput11 --/
+--- a/testdata/testoutput2
++++ b/testdata/testoutput2
+@@ -14175,4 +14175,19 @@ Failed: parentheses are too deeply neste
+
+ "((?2){0,1999}())?"
+
++/((?+1)(\1))/BZ
++------------------------------------------------------------------
++ Bra
++ Once
++ CBra 1
++ Recurse
++ CBra 2
++ \1
++ Ket
++ Ket
++ Ket
++ Ket
++ End
++------------------------------------------------------------------
++
+ /-- End of testinput2 --/
diff --git a/debian/patches/Fix-bad-compile-for-groups-like-2-0-1999.patch b/debian/patches/Fix-bad-compile-for-groups-like-2-0-1999.patch
new file mode 100644
index 0000000..f019be6
--- /dev/null
+++ b/debian/patches/Fix-bad-compile-for-groups-like-2-0-1999.patch
@@ -0,0 +1,209 @@
+Description: CVE-2015-2325: heap buffer overflow in compile_branch()
+ Fix bad compile for groups like "((?2){0,1999}())?".
+Origin: backport, http://vcs.pcre.org/pcre?view=revision&revision=1528
+Bug: http://bugs.exim.org/show_bug.cgi?id=1591
+Bug-Debian: https://bugs.debian.org/781795
+Forwarded: not-needed
+Last-Update: 2015-09-10
+Applied-Upstream: 8.37
+
+--- a/pcre_compile.c
++++ b/pcre_compile.c
+@@ -3933,14 +3933,14 @@ Arguments:
+ adjust the amount by which the group is to be moved
+ utf TRUE in UTF-8 / UTF-16 / UTF-32 mode
+ cd contains pointers to tables etc.
+- save_hwm the hwm forward reference pointer at the start of the group
++ save_hwm_offset the hwm forward reference offset at the start of the group
+
+ Returns: nothing
+ */
+
+ static void
+ adjust_recurse(pcre_uchar *group, int adjust, BOOL utf, compile_data *cd,
+- pcre_uchar *save_hwm)
++ size_t save_hwm_offset)
+ {
+ pcre_uchar *ptr = group;
+
+@@ -3952,7 +3952,8 @@ while ((ptr = (pcre_uchar *)find_recurse
+ /* See if this recursion is on the forward reference list. If so, adjust the
+ reference. */
+
+- for (hc = save_hwm; hc < cd->hwm; hc += LINK_SIZE)
++ for (hc = (pcre_uchar *)cd->start_workspace + save_hwm_offset; hc < cd->hwm;
++ hc += LINK_SIZE)
+ {
+ offset = (int)GET(hc, 0);
+ if (cd->start_code + offset == ptr + 1)
+@@ -4397,7 +4398,7 @@ const pcre_uchar *tempptr;
+ const pcre_uchar *nestptr = NULL;
+ pcre_uchar *previous = NULL;
+ pcre_uchar *previous_callout = NULL;
+-pcre_uchar *save_hwm = NULL;
++size_t save_hwm_offset = 0;
+ pcre_uint8 classbits[32];
+
+ /* We can fish out the UTF-8 setting once and for all into a BOOL, but we
+@@ -5909,7 +5910,7 @@ for (;; ptr++)
+ if (repeat_max <= 1) /* Covers 0, 1, and unlimited */
+ {
+ *code = OP_END;
+- adjust_recurse(previous, 1, utf, cd, save_hwm);
++ adjust_recurse(previous, 1, utf, cd, save_hwm_offset);
+ memmove(previous + 1, previous, IN_UCHARS(len));
+ code++;
+ if (repeat_max == 0)
+@@ -5933,7 +5934,7 @@ for (;; ptr++)
+ {
+ int offset;
+ *code = OP_END;
+- adjust_recurse(previous, 2 + LINK_SIZE, utf, cd, save_hwm);
++ adjust_recurse(previous, 2 + LINK_SIZE, utf, cd, save_hwm_offset);
+ memmove(previous + 2 + LINK_SIZE, previous, IN_UCHARS(len));
+ code += 2 + LINK_SIZE;
+ *previous++ = OP_BRAZERO + repeat_type;
+@@ -5996,26 +5997,25 @@ for (;; ptr++)
+ for (i = 1; i < repeat_min; i++)
+ {
+ pcre_uchar *hc;
+- pcre_uchar *this_hwm = cd->hwm;
++ size_t this_hwm_offset = cd->hwm - cd->start_workspace;
+ memcpy(code, previous, IN_UCHARS(len));
+
+ while (cd->hwm > cd->start_workspace + cd->workspace_size -
+- WORK_SIZE_SAFETY_MARGIN - (this_hwm - save_hwm))
++ WORK_SIZE_SAFETY_MARGIN -
++ (this_hwm_offset - save_hwm_offset))
+ {
+- int save_offset = save_hwm - cd->start_workspace;
+- int this_offset = this_hwm - cd->start_workspace;
+ *errorcodeptr = expand_workspace(cd);
+ if (*errorcodeptr != 0) goto FAILED;
+- save_hwm = (pcre_uchar *)cd->start_workspace + save_offset;
+- this_hwm = (pcre_uchar *)cd->start_workspace + this_offset;
+ }
+
+- for (hc = save_hwm; hc < this_hwm; hc += LINK_SIZE)
++ for (hc = (pcre_uchar *)cd->start_workspace + save_hwm_offset;
++ hc < (pcre_uchar *)cd->start_workspace + this_hwm_offset;
++ hc += LINK_SIZE)
+ {
+ PUT(cd->hwm, 0, GET(hc, 0) + len);
+ cd->hwm += LINK_SIZE;
+ }
+- save_hwm = this_hwm;
++ save_hwm_offset = this_hwm_offset;
+ code += len;
+ }
+ }
+@@ -6060,7 +6060,7 @@ for (;; ptr++)
+ else for (i = repeat_max - 1; i >= 0; i--)
+ {
+ pcre_uchar *hc;
+- pcre_uchar *this_hwm = cd->hwm;
++ size_t this_hwm_offset = cd->hwm - cd->start_workspace;
+
+ *code++ = OP_BRAZERO + repeat_type;
+
+@@ -6082,22 +6082,21 @@ for (;; ptr++)
+ copying them. */
+
+ while (cd->hwm > cd->start_workspace + cd->workspace_size -
+- WORK_SIZE_SAFETY_MARGIN - (this_hwm - save_hwm))
++ WORK_SIZE_SAFETY_MARGIN -
++ (this_hwm_offset - save_hwm_offset))
+ {
+- int save_offset = save_hwm - cd->start_workspace;
+- int this_offset = this_hwm - cd->start_workspace;
+ *errorcodeptr = expand_workspace(cd);
+ if (*errorcodeptr != 0) goto FAILED;
+- save_hwm = (pcre_uchar *)cd->start_workspace + save_offset;
+- this_hwm = (pcre_uchar *)cd->start_workspace + this_offset;
+ }
+
+- for (hc = save_hwm; hc < this_hwm; hc += LINK_SIZE)
++ for (hc = (pcre_uchar *)cd->start_workspace + save_hwm_offset;
++ hc < (pcre_uchar *)cd->start_workspace + this_hwm_offset;
++ hc += LINK_SIZE)
+ {
+ PUT(cd->hwm, 0, GET(hc, 0) + len + ((i != 0)? 2+LINK_SIZE : 1));
+ cd->hwm += LINK_SIZE;
+ }
+- save_hwm = this_hwm;
++ save_hwm_offset = this_hwm_offset;
+ code += len;
+ }
+
+@@ -6193,7 +6192,7 @@ for (;; ptr++)
+ {
+ int nlen = (int)(code - bracode);
+ *code = OP_END;
+- adjust_recurse(bracode, 1 + LINK_SIZE, utf, cd, save_hwm);
++ adjust_recurse(bracode, 1 + LINK_SIZE, utf, cd, save_hwm_offset);
+ memmove(bracode + 1 + LINK_SIZE, bracode, IN_UCHARS(nlen));
+ code += 1 + LINK_SIZE;
+ nlen += 1 + LINK_SIZE;
+@@ -6327,7 +6326,7 @@ for (;; ptr++)
+ else
+ {
+ *code = OP_END;
+- adjust_recurse(tempcode, 1 + LINK_SIZE, utf, cd, save_hwm);
++ adjust_recurse(tempcode, 1 + LINK_SIZE, utf, cd, save_hwm_offset);
+ memmove(tempcode + 1 + LINK_SIZE, tempcode, IN_UCHARS(len));
+ code += 1 + LINK_SIZE;
+ len += 1 + LINK_SIZE;
+@@ -6376,7 +6375,7 @@ for (;; ptr++)
+
+ default:
+ *code = OP_END;
+- adjust_recurse(tempcode, 1 + LINK_SIZE, utf, cd, save_hwm);
++ adjust_recurse(tempcode, 1 + LINK_SIZE, utf, cd, save_hwm_offset);
+ memmove(tempcode + 1 + LINK_SIZE, tempcode, IN_UCHARS(len));
+ code += 1 + LINK_SIZE;
+ len += 1 + LINK_SIZE;
+@@ -6408,7 +6407,7 @@ for (;; ptr++)
+ newoptions = options;
+ skipbytes = 0;
+ bravalue = OP_CBRA;
+- save_hwm = cd->hwm;
++ save_hwm_offset = cd->hwm - cd->start_workspace;
+ reset_bracount = FALSE;
+
+ /* First deal with various "verbs" that can be introduced by '*'. */
+@@ -7701,7 +7700,7 @@ for (;; ptr++)
+ const pcre_uchar *p;
+ pcre_uint32 cf;
+
+- save_hwm = cd->hwm; /* Normally this is set when '(' is read */
++ save_hwm_offset = cd->hwm - cd->start_workspace; /* Normally this is set when '(' is read */
+ terminator = (*(++ptr) == CHAR_LESS_THAN_SIGN)?
+ CHAR_GREATER_THAN_SIGN : CHAR_APOSTROPHE;
+
+@@ -8247,7 +8246,7 @@ for (;;)
+ {
+ *code = OP_END;
+ adjust_recurse(start_bracket, 1 + LINK_SIZE,
+- (options & PCRE_UTF8) != 0, cd, cd->hwm);
++ (options & PCRE_UTF8) != 0, cd, cd->hwm - cd->start_workspace);
+ memmove(start_bracket + 1 + LINK_SIZE, start_bracket,
+ IN_UCHARS(code - start_bracket));
+ *start_bracket = OP_ONCE;
+--- a/testdata/testinput2
++++ b/testdata/testinput2
+@@ -4064,4 +4064,6 @@ backtracking verbs. --/
+
+ /(((((a)))))/Q
+
++"((?2){0,1999}())?"
++
+ /-- End of testinput2 --/
+--- a/testdata/testoutput2
++++ b/testdata/testoutput2
+@@ -14173,4 +14173,6 @@ Failed: parentheses are too deeply neste
+ /(((((a)))))/Q
+ ** Missing 0 or 1 after /Q
+
++"((?2){0,1999}())?"
++
+ /-- End of testinput2 --/
diff --git a/debian/patches/Fix-buffer-overflow-for-named-recursive-back-referen.patch b/debian/patches/Fix-buffer-overflow-for-named-recursive-back-referen.patch
new file mode 100644
index 0000000..3c4132b
--- /dev/null
+++ b/debian/patches/Fix-buffer-overflow-for-named-recursive-back-referen.patch
@@ -0,0 +1,59 @@
+Description: CVE-2015-3210: heap buffer overflow in pcre_compile2() / compile_regex()
+ Fix buffer overflow for named recursive back reference when
+ the name is duplicated.
+Origin: upstream, http://vcs.pcre.org/pcre?view=revision&revision=1558
+Bug: https://bugs.exim.org/show_bug.cgi?id=1636
+Bug-Debian: https://bugs.debian.org/787433
+Forwarded: not-needed
+Last-Update: 2015-09-10
+Applied-Upstream: not-yet (8.38)
+
+--- a/pcre_compile.c
++++ b/pcre_compile.c
+@@ -7082,14 +7082,26 @@ for (;; ptr++)
+ number. If the name is not found, set the value to 0 for a forward
+ reference. */
+
++ recno = 0;
+ ng = cd->named_groups;
+ for (i = 0; i < cd->names_found; i++, ng++)
+ {
+ if (namelen == ng->length &&
+ STRNCMP_UC_UC(name, ng->name, namelen) == 0)
+- break;
++ {
++ open_capitem *oc;
++ recno = ng->number;
++ if (is_recurse) break;
++ for (oc = cd->open_caps; oc != NULL; oc = oc->next)
++ {
++ if (oc->number == recno)
++ {
++ oc->flag = TRUE;
++ break;
++ }
++ }
++ }
+ }
+- recno = (i < cd->names_found)? ng->number : 0;
+
+ /* Count named back references. */
+
+--- a/testdata/testinput2
++++ b/testdata/testinput2
+@@ -4068,4 +4068,6 @@ backtracking verbs. --/
+
+ /((?+1)(\1))/BZ
+
++"(?J)(?'d'(?'d'\g{d}))"
++
+ /-- End of testinput2 --/
+--- a/testdata/testoutput2
++++ b/testdata/testoutput2
+@@ -14190,4 +14190,6 @@ Failed: parentheses are too deeply neste
+ End
+ ------------------------------------------------------------------
+
++"(?J)(?'d'(?'d'\g{d}))"
++
+ /-- End of testinput2 --/
diff --git a/debian/patches/Fix-compile-time-loop-for-recursive-reference-within.patch b/debian/patches/Fix-compile-time-loop-for-recursive-reference-within.patch
new file mode 100644
index 0000000..a38be27
--- /dev/null
+++ b/debian/patches/Fix-compile-time-loop-for-recursive-reference-within.patch
@@ -0,0 +1,86 @@
+Description: PCRE Call Stack Overflow Vulnerability
+ Fix compile-time loop for recursive reference within a group
+ with an indefinite repeat.
+Origin: backport, http://vcs.pcre.org/pcre?view=revision&revision=1498
+Bug: https://bugs.exim.org/show_bug.cgi?id=1515
+Forwarded: not-needed
+Last-Update: 2015-09-10
+Applied-Upstream: 8.36
+
+--- a/pcre_compile.c
++++ b/pcre_compile.c
+@@ -2367,6 +2367,7 @@ for (code = first_significant_code(code
+ if (c == OP_RECURSE)
+ {
+ const pcre_uchar *scode = cd->start_code + GET(code, 1);
++ const pcre_uchar *endgroup = scode;
+ BOOL empty_branch;
+
+ /* Test for forward reference or uncompleted reference. This is disabled
+@@ -2381,24 +2382,20 @@ for (code = first_significant_code(code
+ if (GET(scode, 1) == 0) return TRUE; /* Unclosed */
+ }
+
+- /* If we are scanning a completed pattern, there are no forward references
+- and all groups are complete. We need to detect whether this is a recursive
+- call, as otherwise there will be an infinite loop. If it is a recursion,
+- just skip over it. Simple recursions are easily detected. For mutual
+- recursions we keep a chain on the stack. */
++ /* If the reference is to a completed group, we need to detect whether this
++ is a recursive call, as otherwise there will be an infinite loop. If it is
++ a recursion, just skip over it. Simple recursions are easily detected. For
++ mutual recursions we keep a chain on the stack. */
+
++ do endgroup += GET(endgroup, 1); while (*endgroup == OP_ALT);
++ if (code >= scode && code <= endgroup) continue; /* Simple recursion */
+ else
+- {
++ {
+ recurse_check *r = recurses;
+- const pcre_uchar *endgroup = scode;
+-
+- do endgroup += GET(endgroup, 1); while (*endgroup == OP_ALT);
+- if (code >= scode && code <= endgroup) continue; /* Simple recursion */
+-
+ for (r = recurses; r != NULL; r = r->prev)
+ if (r->group == scode) break;
+ if (r != NULL) continue; /* Mutual recursion */
+- }
++ }
+
+ /* Completed reference; scan the referenced group, remembering it on the
+ stack chain to detect mutual recursions. */
+--- a/testdata/testinput1
++++ b/testdata/testinput1
+@@ -4937,6 +4937,12 @@ however, we need the complication for Pe
+
+ /((?(R1)a+|(?1)b))/
+ aaaabcde
++
++/((?(R)a|(?1)))*/
++ aaa
++
++/((?(R)a|(?1)))+/
++ aaa
+
+ /a(*:any
+ name)/K
+--- a/testdata/testoutput1
++++ b/testdata/testoutput1
+@@ -8234,6 +8234,16 @@ MK: M
+ aaaabcde
+ 0: aaaab
+ 1: aaaab
++
++/((?(R)a|(?1)))*/
++ aaa
++ 0: aaa
++ 1: a
++
++/((?(R)a|(?1)))+/
++ aaa
++ 0: aaa
++ 1: a
+
+ /a(*:any
+ name)/K
diff --git a/debian/patches/Fix-compiler-crash-misbehaviour-for-zero-repeated-gr.patch b/debian/patches/Fix-compiler-crash-misbehaviour-for-zero-repeated-gr.patch
new file mode 100644
index 0000000..a8c15f3
--- /dev/null
+++ b/debian/patches/Fix-compiler-crash-misbehaviour-for-zero-repeated-gr.patch
@@ -0,0 +1,175 @@
+Description: PCRE Library Stack Overflow Vulnerability
+ Fix compiler crash/misbehaviour for zero-repeated groups that
+ include a recursive back reference.
+Origin: backport, http://vcs.pcre.org/pcre?view=revision&revision=1495
+Bug: https://bugs.exim.org/show_bug.cgi?id=1503
+Forwarded: not-needed
+Last-Update: 2015-09-10
+Applied-Upstream: 8.36
+---
+--- a/pcre_compile.c
++++ b/pcre_compile.c
+@@ -8241,12 +8241,16 @@ for (;;)
+
+ /* If it was a capturing subpattern, check to see if it contained any
+ recursive back references. If so, we must wrap it in atomic brackets.
+- In any event, remove the block from the chain. */
++ Because we are moving code along, we must ensure that any pending recursive
++ references are updated. In any event, remove the block from the chain. */
+
+ if (capnumber > 0)
+ {
+ if (cd->open_caps->flag)
+ {
++ *code = OP_END;
++ adjust_recurse(start_bracket, 1 + LINK_SIZE,
++ (options & PCRE_UTF8) != 0, cd, cd->hwm);
+ memmove(start_bracket + 1 + LINK_SIZE, start_bracket,
+ IN_UCHARS(code - start_bracket));
+ *start_bracket = OP_ONCE;
+--- a/testdata/testinput11
++++ b/testdata/testinput11
+@@ -132,4 +132,6 @@ is required for these tests. --/
+
+ /abc(d|e)(*THEN)x(123(*THEN)4|567(b|q)(*THEN)xx)/B
+
++/(((a\2)|(a*)\g<-1>))*a?/B
++
+ /-- End of testinput11 --/
+--- a/testdata/testinput2
++++ b/testdata/testinput2
+@@ -4035,6 +4035,8 @@ backtracking verbs. --/
+
+ /(?(R&6yh)abc)/
+
++/(((a\2)|(a*)\g<-1>))*a?/BZ
++
+ /-- Test the ugly "start or end of word" compatibility syntax --/
+
+ /[[:<:]]red[[:>:]]/BZ
+--- a/testdata/testoutput11-16
++++ b/testdata/testoutput11-16
+@@ -709,4 +709,28 @@ Memory allocation (code space): 14
+ 62 End
+ ------------------------------------------------------------------
+
++/(((a\2)|(a*)\g<-1>))*a?/B
++------------------------------------------------------------------
++ 0 39 Bra
++ 2 Brazero
++ 3 32 SCBra 1
++ 6 27 Once
++ 8 12 CBra 2
++ 11 7 CBra 3
++ 14 a
++ 16 \2
++ 18 7 Ket
++ 20 11 Alt
++ 22 5 CBra 4
++ 25 a*
++ 27 5 Ket
++ 29 22 Recurse
++ 31 23 Ket
++ 33 27 Ket
++ 35 32 KetRmax
++ 37 a?+
++ 39 39 Ket
++ 41 End
++------------------------------------------------------------------
++
+ /-- End of testinput11 --/
+--- a/testdata/testoutput11-32
++++ b/testdata/testoutput11-32
+@@ -709,4 +709,28 @@ Memory allocation (code space): 28
+ 62 End
+ ------------------------------------------------------------------
+
++/(((a\2)|(a*)\g<-1>))*a?/B
++------------------------------------------------------------------
++ 0 39 Bra
++ 2 Brazero
++ 3 32 SCBra 1
++ 6 27 Once
++ 8 12 CBra 2
++ 11 7 CBra 3
++ 14 a
++ 16 \2
++ 18 7 Ket
++ 20 11 Alt
++ 22 5 CBra 4
++ 25 a*
++ 27 5 Ket
++ 29 22 Recurse
++ 31 23 Ket
++ 33 27 Ket
++ 35 32 KetRmax
++ 37 a?+
++ 39 39 Ket
++ 41 End
++------------------------------------------------------------------
++
+ /-- End of testinput11 --/
+--- a/testdata/testoutput11-8
++++ b/testdata/testoutput11-8
+@@ -709,4 +709,28 @@ Memory allocation (code space): 10
+ 76 End
+ ------------------------------------------------------------------
+
++/(((a\2)|(a*)\g<-1>))*a?/B
++------------------------------------------------------------------
++ 0 57 Bra
++ 3 Brazero
++ 4 48 SCBra 1
++ 9 40 Once
++ 12 18 CBra 2
++ 17 10 CBra 3
++ 22 a
++ 24 \2
++ 27 10 Ket
++ 30 16 Alt
++ 33 7 CBra 4
++ 38 a*
++ 40 7 Ket
++ 43 33 Recurse
++ 46 34 Ket
++ 49 40 Ket
++ 52 48 KetRmax
++ 55 a?+
++ 57 57 Ket
++ 60 End
++------------------------------------------------------------------
++
+ /-- End of testinput11 --/
+--- a/testdata/testoutput2
++++ b/testdata/testoutput2
+@@ -14093,6 +14093,30 @@ Failed: malformed number or name after (
+ /(?(R&6yh)abc)/
+ Failed: group name must start with a non-digit at offset 5
+
++/(((a\2)|(a*)\g<-1>))*a?/BZ
++------------------------------------------------------------------
++ Bra
++ Brazero
++ SCBra 1
++ Once
++ CBra 2
++ CBra 3
++ a
++ \2
++ Ket
++ Alt
++ CBra 4
++ a*
++ Ket
++ Recurse
++ Ket
++ Ket
++ KetRmax
++ a?+
++ Ket
++ End
++------------------------------------------------------------------
++
+ /-- Test the ugly "start or end of word" compatibility syntax --/
+
+ /[[:<:]]red[[:>:]]/BZ
diff --git a/debian/patches/Fix-silly-quantifier-size-check.patch b/debian/patches/Fix-silly-quantifier-size-check.patch
new file mode 100644
index 0000000..88c3b95
--- /dev/null
+++ b/debian/patches/Fix-silly-quantifier-size-check.patch
@@ -0,0 +1,100 @@
+From: Philip Hazel <ph10>
+Date: Mon, 21 Apr 2014 16:11:50 +0000
+Subject: Fix silly quantifier size check
+
+The tests for quantifiers being too big (greater than 65535) were being
+applied after reading the number, and stupidly assuming that integer
+overflow would give a negative number. The tests are now applied as the
+numbers are read.
+
+Bug: http://bugs.exim.org/show_bug.cgi?id=1463
+Bug-Debian: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=751828
+Origin: upstream, part of http://vcs.pcre.org/viewvc?view=revision&sortby=date&revision=1472
+Applied-upstream: 8.36
+---
+ pcre_compile.c | 35 ++++++++++++++++-------------------
+ testdata/testoutput2 | 6 +++---
+ 2 files changed, 19 insertions(+), 22 deletions(-)
+
+diff --git a/pcre_compile.c b/pcre_compile.c
+index 8a5b723..ae0027b 100644
+--- a/pcre_compile.c
++++ b/pcre_compile.c
+@@ -1583,30 +1583,30 @@ read_repeat_counts(const pcre_uchar *p, int *minp, int *maxp, int *errorcodeptr)
+ int min = 0;
+ int max = -1;
+
+-/* Read the minimum value and do a paranoid check: a negative value indicates
+-an integer overflow. */
+-
+-while (IS_DIGIT(*p)) min = min * 10 + (int)(*p++ - CHAR_0);
+-if (min < 0 || min > 65535)
++while (IS_DIGIT(*p))
+ {
+- *errorcodeptr = ERR5;
+- return p;
+- }
+-
+-/* Read the maximum value if there is one, and again do a paranoid on its size.
+-Also, max must not be less than min. */
++ min = min * 10 + (int)(*p++ - CHAR_0);
++ if (min > 65535)
++ {
++ *errorcodeptr = ERR5;
++ return p;
++ }
++ }
+
+ if (*p == CHAR_RIGHT_CURLY_BRACKET) max = min; else
+ {
+ if (*(++p) != CHAR_RIGHT_CURLY_BRACKET)
+ {
+ max = 0;
+- while(IS_DIGIT(*p)) max = max * 10 + (int)(*p++ - CHAR_0);
+- if (max < 0 || max > 65535)
++ while(IS_DIGIT(*p))
+ {
+- *errorcodeptr = ERR5;
+- return p;
+- }
++ max = max * 10 + (int)(*p++ - CHAR_0);
++ if (max > 65535)
++ {
++ *errorcodeptr = ERR5;
++ return p;
++ }
++ }
+ if (max < min)
+ {
+ *errorcodeptr = ERR4;
+@@ -1615,9 +1615,6 @@ if (*p == CHAR_RIGHT_CURLY_BRACKET) max = min; else
+ }
+ }
+
+-/* Fill in the required variables, and pass back the pointer to the terminating
+-'}'. */
+-
+ *minp = min;
+ *maxp = max;
+ return p;
+diff --git a/testdata/testoutput2 b/testdata/testoutput2
+index b6da7df..cfb446e 100644
+--- a/testdata/testoutput2
++++ b/testdata/testoutput2
+@@ -5821,13 +5821,13 @@ No match
+ No match
+
+ /a{11111111111111111111}/I
+-Failed: number too big in {} quantifier at offset 22
++Failed: number too big in {} quantifier at offset 8
+
+ /(){64294967295}/I
+-Failed: number too big in {} quantifier at offset 14
++Failed: number too big in {} quantifier at offset 9
+
+ /(){2,4294967295}/I
+-Failed: number too big in {} quantifier at offset 15
++Failed: number too big in {} quantifier at offset 11
+
+ "(?i:a)(?i:b)(?i:c)(?i:d)(?i:e)(?i:f)(?i:g)(?i:h)(?i:i)(?i:j)(k)(?i:l)A\1B"I
+ Capturing subpattern count = 1
diff --git a/debian/patches/PCRE6_compatible_API.patch b/debian/patches/PCRE6_compatible_API.patch
new file mode 100644
index 0000000..f13a763
--- /dev/null
+++ b/debian/patches/PCRE6_compatible_API.patch
@@ -0,0 +1,40 @@
+From: Mark Baker <mark@mnb.org.uk>
+Description: Include old interface to RE::Init() for PCRE 6.x compatibility
+
+--- a/pcrecpp.cc
++++ b/pcrecpp.cc
+@@ -80,6 +80,12 @@
+ // If the user doesn't ask for any options, we just use this one
+ static RE_Options default_options;
+
++// PCRE6.x compatible API
++void RE::Init(const char *c_pat, const RE_Options* options) {
++ const string cxx_pat(c_pat);
++ Init(cxx_pat, options);
++}
++
+ void RE::Init(const string& pat, const RE_Options* options) {
+ pattern_ = pat;
+ if (options == NULL) {
+--- a/pcrecpp.h
++++ b/pcrecpp.h
+@@ -658,6 +658,8 @@
+ private:
+
+ void Init(const string& pattern, const RE_Options* options);
++ // Old version from PCRE 6.x, for compatibility
++ void Init(const char *pattern, const RE_Options* options);
+ void Cleanup();
+
+ // Match against "text", filling in "vec" (up to "vecsize" * 2/3) with
+--- a/pcretest.c
++++ b/pcretest.c
+@@ -2976,7 +2976,7 @@
+ {
+ FILE *infile = stdin;
+ const char *version;
+-int options = 0;
++long int options = 0;
+ int study_options = 0;
+ int default_find_match_limit = FALSE;
+ pcre_uint32 default_options = 0;
diff --git a/debian/patches/cve-2014-8964.patch b/debian/patches/cve-2014-8964.patch
new file mode 100644
index 0000000..64786a0
--- /dev/null
+++ b/debian/patches/cve-2014-8964.patch
@@ -0,0 +1,23 @@
+Description: CVE-2014-8964, heap buffer overflow
+ Heap buffer overflow if an assertion with a zero minimum repeat is used as
+ the condition in a conditional group.
+Origin: upstream http://bugs.exim.org/show_bug.cgi?id=1546
+Bug: http://bugs.exim.org/show_bug.cgi?id=1546
+Applied-Upstream: Yes, after 8.36
+---
+This patch header follows DEP-3: http://dep.debian.net/deps/dep3/
+--- a/pcre_exec.c
++++ b/pcre_exec.c
+@@ -1404,8 +1404,11 @@
+ 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/debian/patches/fix_find_fixedlength.patch b/debian/patches/fix_find_fixedlength.patch
new file mode 100644
index 0000000..84fbb02
--- /dev/null
+++ b/debian/patches/fix_find_fixedlength.patch
@@ -0,0 +1,21 @@
+Description: Fix buffer overflow for forward reference within backward assertion with excess closing parenthesis.
+ Strictly, this is a backport, but the patch is trivial.
+Origin: upstream http://vcs.pcre.org/pcre?view=revision&revision=1571
+Bug: https://bugs.exim.org/show_bug.cgi?id=1651
+Bug-Debian: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=790000
+Last-Update: 2015-06-26
+---
+This patch header follows DEP-3: http://dep.debian.net/deps/dep3/
+Index: b/pcre_compile.c
+===================================================================
+--- a/pcre_compile.c 2015-05-26 08:24:55.000000000 +0100
++++ b/pcre_compile.c 2015-06-26 08:00:13.000000000 +0100
+@@ -9265,7 +9265,7 @@
+ exceptional ones forgo this. We scan the pattern to check that they are fixed
+ length, and set their lengths. */
+
+-if (cd->check_lookbehind)
++if (errorcode == 0 && cd->check_lookbehind)
+ {
+ pcre_uchar *cc = (pcre_uchar *)codestart;
+
diff --git a/debian/patches/no_jit_x32_powerpcspe.patch b/debian/patches/no_jit_x32_powerpcspe.patch
new file mode 100644
index 0000000..d499096
--- /dev/null
+++ b/debian/patches/no_jit_x32_powerpcspe.patch
@@ -0,0 +1,33 @@
+Description: Disable JIT on x32, needs explicit porting to ILP32 amd64, FPU-less PowerPC.
+Author: Thorsten Glaser <tg@mirbsd.org>, Roland Stigge <stigge@antcom.de>
+
+Index: pcre3/sljit/sljitConfigInternal.h
+===================================================================
+--- pcre3.orig/sljit/sljitConfigInternal.h 2015-07-31 12:00:43.000000000 +0100
++++ pcre3/sljit/sljitConfigInternal.h 2015-12-22 13:30:50.000000000 +0000
+@@ -117,7 +117,11 @@
+ #if defined(__i386__) || defined(__i386)
+ #define SLJIT_CONFIG_X86_32 1
+ #elif defined(__x86_64__)
+-#define SLJIT_CONFIG_X86_64 1
++# if defined(__ILP32__)
++# define SLJIT_CONFIG_UNSUPPORTED 1
++# else
++# define SLJIT_CONFIG_X86_64 1
++# endif
+ #elif defined(__arm__) || defined(__ARM__)
+ #ifdef __thumb2__
+ #define SLJIT_CONFIG_ARM_THUMB2 1
+@@ -131,7 +135,11 @@
+ #elif defined(__ppc64__) || defined(__powerpc64__) || defined(_ARCH_PPC64) || (defined(_POWER) && defined(__64BIT__))
+ #define SLJIT_CONFIG_PPC_64 1
+ #elif defined(__ppc__) || defined(__powerpc__) || defined(_ARCH_PPC) || defined(_ARCH_PWR) || defined(_ARCH_PWR2) || defined(_POWER)
+-#define SLJIT_CONFIG_PPC_32 1
++# ifndef __NO_FPRS__
++# define SLJIT_CONFIG_PPC_32 1
++# else
++# define SLJIT_CONFIG_UNSUPPORTED 1
++# endif
+ #elif defined(__mips__) && !defined(_LP64)
+ #define SLJIT_CONFIG_MIPS_32 1
+ #elif defined(__mips64)
diff --git a/debian/patches/pcre_info.patch b/debian/patches/pcre_info.patch
new file mode 100644
index 0000000..5a8657b
--- /dev/null
+++ b/debian/patches/pcre_info.patch
@@ -0,0 +1,385 @@
+From: Mark Baker <mark@mnb.org.uk>
+Description: Restore obsolete pcre_info() API for compatiblity
+
+Index: pcre3/Makefile.am
+===================================================================
+--- pcre3.orig/Makefile.am 2014-04-04 14:39:50.000000000 +0100
++++ pcre3/Makefile.am 2015-12-22 12:37:59.000000000 +0000
+@@ -233,6 +233,7 @@
+ pcre_fullinfo.c \
+ pcre_get.c \
+ pcre_globals.c \
++ pcre_info.c \
+ pcre_internal.h \
+ pcre_jit_compile.c \
+ pcre_maketables.c \
+@@ -647,7 +648,7 @@
+ # nice DLL for Windows use". (It is used by the pcre.dll target.)
+ DLL_OBJS= pcre_byte_order.o pcre_compile.o pcre_config.o \
+ pcre_dfa_exec.o pcre_exec.o pcre_fullinfo.o pcre_get.o \
+- pcre_globals.o pcre_jit_compile.o pcre_maketables.o \
++ pcre_globals.o pcre_info.o pcre_jit_compile.o pcre_maketables.o \
+ pcre_newline.o pcre_ord2utf8.o pcre_refcount.o \
+ pcre_study.o pcre_tables.o pcre_ucd.o \
+ pcre_valid_utf8.o pcre_version.o pcre_chartables.o \
+Index: pcre3/Makefile.in
+===================================================================
+--- pcre3.orig/Makefile.in 2015-11-23 12:37:21.000000000 +0000
++++ pcre3/Makefile.in 2015-12-22 12:37:59.000000000 +0000
+@@ -218,11 +218,11 @@
+ libpcre_la_DEPENDENCIES =
+ am__libpcre_la_SOURCES_DIST = pcre_byte_order.c pcre_compile.c \
+ pcre_config.c pcre_dfa_exec.c pcre_exec.c pcre_fullinfo.c \
+- pcre_get.c pcre_globals.c pcre_internal.h pcre_jit_compile.c \
+- pcre_maketables.c pcre_newline.c pcre_ord2utf8.c \
+- pcre_refcount.c pcre_string_utils.c pcre_study.c pcre_tables.c \
+- pcre_ucd.c pcre_valid_utf8.c pcre_version.c pcre_xclass.c \
+- ucp.h
++ pcre_get.c pcre_globals.c pcre_info.c pcre_internal.h \
++ pcre_jit_compile.c pcre_maketables.c pcre_newline.c \
++ pcre_ord2utf8.c pcre_refcount.c pcre_string_utils.c \
++ pcre_study.c pcre_tables.c pcre_ucd.c pcre_valid_utf8.c \
++ pcre_version.c pcre_xclass.c ucp.h
+ @WITH_PCRE8_TRUE@am_libpcre_la_OBJECTS = \
+ @WITH_PCRE8_TRUE@ libpcre_la-pcre_byte_order.lo \
+ @WITH_PCRE8_TRUE@ libpcre_la-pcre_compile.lo \
+@@ -232,6 +232,7 @@
+ @WITH_PCRE8_TRUE@ libpcre_la-pcre_fullinfo.lo \
+ @WITH_PCRE8_TRUE@ libpcre_la-pcre_get.lo \
+ @WITH_PCRE8_TRUE@ libpcre_la-pcre_globals.lo \
++@WITH_PCRE8_TRUE@ libpcre_la-pcre_info.lo \
+ @WITH_PCRE8_TRUE@ libpcre_la-pcre_jit_compile.lo \
+ @WITH_PCRE8_TRUE@ libpcre_la-pcre_maketables.lo \
+ @WITH_PCRE8_TRUE@ libpcre_la-pcre_newline.lo \
+@@ -251,7 +252,7 @@
+ AM_V_lt = $(am__v_lt_@AM_V@)
+ am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
+ am__v_lt_0 = --silent
+-am__v_lt_1 =
++am__v_lt_1 =
+ libpcre_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(libpcre_la_CFLAGS) \
+ $(CFLAGS) $(libpcre_la_LDFLAGS) $(LDFLAGS) -o $@
+@@ -449,11 +450,11 @@
+ AM_V_GEN = $(am__v_GEN_@AM_V@)
+ am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+ am__v_GEN_0 = @echo " GEN " $@;
+-am__v_GEN_1 =
++am__v_GEN_1 =
+ AM_V_at = $(am__v_at_@AM_V@)
+ am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+ am__v_at_0 = @
+-am__v_at_1 =
++am__v_at_1 =
+ DEFAULT_INCLUDES = -I.@am__isrc@
+ depcomp = $(SHELL) $(top_srcdir)/depcomp
+ am__depfiles_maybe = depfiles
+@@ -467,7 +468,7 @@
+ AM_V_CC = $(am__v_CC_@AM_V@)
+ am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
+ am__v_CC_0 = @echo " CC " $@;
+-am__v_CC_1 =
++am__v_CC_1 =
+ CCLD = $(CC)
+ LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+@@ -475,7 +476,7 @@
+ AM_V_CCLD = $(am__v_CCLD_@AM_V@)
+ am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
+ am__v_CCLD_0 = @echo " CCLD " $@;
+-am__v_CCLD_1 =
++am__v_CCLD_1 =
+ CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
+ LTCXXCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \
+@@ -485,7 +486,7 @@
+ AM_V_CXX = $(am__v_CXX_@AM_V@)
+ am__v_CXX_ = $(am__v_CXX_@AM_DEFAULT_V@)
+ am__v_CXX_0 = @echo " CXX " $@;
+-am__v_CXX_1 =
++am__v_CXX_1 =
+ CXXLD = $(CXX)
+ CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \
+@@ -493,7 +494,7 @@
+ AM_V_CXXLD = $(am__v_CXXLD_@AM_V@)
+ am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@)
+ am__v_CXXLD_0 = @echo " CXXLD " $@;
+-am__v_CXXLD_1 =
++am__v_CXXLD_1 =
+ SOURCES = $(libpcre_la_SOURCES) $(nodist_libpcre_la_SOURCES) \
+ $(libpcre16_la_SOURCES) $(nodist_libpcre16_la_SOURCES) \
+ $(libpcre32_la_SOURCES) $(nodist_libpcre32_la_SOURCES) \
+@@ -832,9 +833,6 @@
+ PCRE_MINOR = @PCRE_MINOR@
+ PCRE_PRERELEASE = @PCRE_PRERELEASE@
+ PCRE_STATIC_CFLAG = @PCRE_STATIC_CFLAG@
+-PKG_CONFIG = @PKG_CONFIG@
+-PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+-PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+ PTHREAD_CC = @PTHREAD_CC@
+ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+ PTHREAD_LIBS = @PTHREAD_LIBS@
+@@ -844,8 +842,6 @@
+ SHELL = @SHELL@
+ SHTOOL = @SHTOOL@
+ STRIP = @STRIP@
+-VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
+-VALGRIND_LIBS = @VALGRIND_LIBS@
+ VERSION = @VERSION@
+ VISIBILITY_CFLAGS = @VISIBILITY_CFLAGS@
+ VISIBILITY_CXXFLAGS = @VISIBILITY_CXXFLAGS@
+@@ -988,7 +984,7 @@
+ # The Libtool libraries to install. We'll add to this later.
+ lib_LTLIBRARIES = $(am__append_4) $(am__append_5) $(am__append_6) \
+ $(am__append_20) $(am__append_22)
+-check_SCRIPTS =
++check_SCRIPTS =
+ dist_noinst_SCRIPTS = RunTest $(am__append_39)
+
+ # Additional files to delete on 'make clean' and 'make maintainer-clean'.
+@@ -1093,6 +1089,7 @@
+ @WITH_PCRE8_TRUE@ pcre_fullinfo.c \
+ @WITH_PCRE8_TRUE@ pcre_get.c \
+ @WITH_PCRE8_TRUE@ pcre_globals.c \
++@WITH_PCRE8_TRUE@ pcre_info.c \
+ @WITH_PCRE8_TRUE@ pcre_internal.h \
+ @WITH_PCRE8_TRUE@ pcre_jit_compile.c \
+ @WITH_PCRE8_TRUE@ pcre_maketables.c \
+@@ -1110,7 +1107,7 @@
+
+ @WITH_PCRE8_TRUE@libpcre_la_CFLAGS = $(VISIBILITY_CFLAGS) $(AM_CFLAGS) \
+ @WITH_PCRE8_TRUE@ $(am__append_7) $(am__append_10)
+-@WITH_PCRE8_TRUE@libpcre_la_LIBADD =
++@WITH_PCRE8_TRUE@libpcre_la_LIBADD =
+ @WITH_PCRE8_TRUE@nodist_libpcre_la_SOURCES = \
+ @WITH_PCRE8_TRUE@ pcre_chartables.c
+
+@@ -1141,7 +1138,7 @@
+ @WITH_PCRE16_TRUE@libpcre16_la_CFLAGS = $(VISIBILITY_CFLAGS) \
+ @WITH_PCRE16_TRUE@ $(AM_CFLAGS) $(am__append_8) \
+ @WITH_PCRE16_TRUE@ $(am__append_11)
+-@WITH_PCRE16_TRUE@libpcre16_la_LIBADD =
++@WITH_PCRE16_TRUE@libpcre16_la_LIBADD =
+ @WITH_PCRE16_TRUE@nodist_libpcre16_la_SOURCES = \
+ @WITH_PCRE16_TRUE@ pcre_chartables.c
+
+@@ -1172,7 +1169,7 @@
+ @WITH_PCRE32_TRUE@libpcre32_la_CFLAGS = $(VISIBILITY_CFLAGS) \
+ @WITH_PCRE32_TRUE@ $(AM_CFLAGS) $(am__append_9) \
+ @WITH_PCRE32_TRUE@ $(am__append_12)
+-@WITH_PCRE32_TRUE@libpcre32_la_LIBADD =
++@WITH_PCRE32_TRUE@libpcre32_la_LIBADD =
+ @WITH_PCRE32_TRUE@nodist_libpcre32_la_SOURCES = \
+ @WITH_PCRE32_TRUE@ pcre_chartables.c
+
+@@ -1227,7 +1224,7 @@
+ # nice DLL for Windows use". (It is used by the pcre.dll target.)
+ DLL_OBJS = pcre_byte_order.o pcre_compile.o pcre_config.o \
+ pcre_dfa_exec.o pcre_exec.o pcre_fullinfo.o pcre_get.o \
+- pcre_globals.o pcre_jit_compile.o pcre_maketables.o \
++ pcre_globals.o pcre_info.o pcre_jit_compile.o pcre_maketables.o \
+ pcre_newline.o pcre_ord2utf8.o pcre_refcount.o \
+ pcre_study.o pcre_tables.o pcre_ucd.o \
+ pcre_valid_utf8.o pcre_version.o pcre_chartables.o \
+@@ -1313,8 +1310,8 @@
+ @WITH_GCOV_TRUE@COVERAGE_NAME = $(PACKAGE)-$(VERSION)
+ @WITH_GCOV_TRUE@COVERAGE_OUTPUT_FILE = $(COVERAGE_NAME)-coverage.info
+ @WITH_GCOV_TRUE@COVERAGE_OUTPUT_DIR = $(COVERAGE_NAME)-coverage
+-@WITH_GCOV_TRUE@COVERAGE_LCOV_EXTRA_FLAGS =
+-@WITH_GCOV_TRUE@COVERAGE_GENHTML_EXTRA_FLAGS =
++@WITH_GCOV_TRUE@COVERAGE_LCOV_EXTRA_FLAGS =
++@WITH_GCOV_TRUE@COVERAGE_GENHTML_EXTRA_FLAGS =
+ @WITH_GCOV_TRUE@coverage_quiet = $(coverage_quiet_$(V))
+ @WITH_GCOV_TRUE@coverage_quiet_ = $(coverage_quiet_$(AM_DEFAULT_VERBOSITY))
+ @WITH_GCOV_TRUE@coverage_quiet_0 = --quiet
+@@ -1364,7 +1361,7 @@
+ stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status
+ @rm -f stamp-h1
+ cd $(top_builddir) && $(SHELL) ./config.status config.h
+-$(srcdir)/config.h.in: $(am__configure_deps)
++$(srcdir)/config.h.in: $(am__configure_deps)
+ ($(am__cd) $(top_srcdir) && $(AUTOHEADER))
+ rm -f stamp-h1
+ touch $@
+@@ -1425,19 +1422,19 @@
+ rm -f $${locs}; \
+ }
+
+-libpcre.la: $(libpcre_la_OBJECTS) $(libpcre_la_DEPENDENCIES) $(EXTRA_libpcre_la_DEPENDENCIES)
++libpcre.la: $(libpcre_la_OBJECTS) $(libpcre_la_DEPENDENCIES) $(EXTRA_libpcre_la_DEPENDENCIES)
+ $(AM_V_CCLD)$(libpcre_la_LINK) $(am_libpcre_la_rpath) $(libpcre_la_OBJECTS) $(libpcre_la_LIBADD) $(LIBS)
+
+-libpcre16.la: $(libpcre16_la_OBJECTS) $(libpcre16_la_DEPENDENCIES) $(EXTRA_libpcre16_la_DEPENDENCIES)
++libpcre16.la: $(libpcre16_la_OBJECTS) $(libpcre16_la_DEPENDENCIES) $(EXTRA_libpcre16_la_DEPENDENCIES)
+ $(AM_V_CCLD)$(libpcre16_la_LINK) $(am_libpcre16_la_rpath) $(libpcre16_la_OBJECTS) $(libpcre16_la_LIBADD) $(LIBS)
+
+-libpcre32.la: $(libpcre32_la_OBJECTS) $(libpcre32_la_DEPENDENCIES) $(EXTRA_libpcre32_la_DEPENDENCIES)
++libpcre32.la: $(libpcre32_la_OBJECTS) $(libpcre32_la_DEPENDENCIES) $(EXTRA_libpcre32_la_DEPENDENCIES)
+ $(AM_V_CCLD)$(libpcre32_la_LINK) $(am_libpcre32_la_rpath) $(libpcre32_la_OBJECTS) $(libpcre32_la_LIBADD) $(LIBS)
+
+-libpcrecpp.la: $(libpcrecpp_la_OBJECTS) $(libpcrecpp_la_DEPENDENCIES) $(EXTRA_libpcrecpp_la_DEPENDENCIES)
++libpcrecpp.la: $(libpcrecpp_la_OBJECTS) $(libpcrecpp_la_DEPENDENCIES) $(EXTRA_libpcrecpp_la_DEPENDENCIES)
+ $(AM_V_CXXLD)$(libpcrecpp_la_LINK) $(am_libpcrecpp_la_rpath) $(libpcrecpp_la_OBJECTS) $(libpcrecpp_la_LIBADD) $(LIBS)
+
+-libpcreposix.la: $(libpcreposix_la_OBJECTS) $(libpcreposix_la_DEPENDENCIES) $(EXTRA_libpcreposix_la_DEPENDENCIES)
++libpcreposix.la: $(libpcreposix_la_OBJECTS) $(libpcreposix_la_DEPENDENCIES) $(EXTRA_libpcreposix_la_DEPENDENCIES)
+ $(AM_V_CCLD)$(libpcreposix_la_LINK) $(am_libpcreposix_la_rpath) $(libpcreposix_la_OBJECTS) $(libpcreposix_la_LIBADD) $(LIBS)
+ install-binPROGRAMS: $(bin_PROGRAMS)
+ @$(NORMAL_INSTALL)
+@@ -1498,31 +1495,31 @@
+ echo " rm -f" $$list; \
+ rm -f $$list
+
+-dftables$(EXEEXT): $(dftables_OBJECTS) $(dftables_DEPENDENCIES) $(EXTRA_dftables_DEPENDENCIES)
++dftables$(EXEEXT): $(dftables_OBJECTS) $(dftables_DEPENDENCIES) $(EXTRA_dftables_DEPENDENCIES)
+ @rm -f dftables$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(dftables_OBJECTS) $(dftables_LDADD) $(LIBS)
+
+-pcre_jit_test$(EXEEXT): $(pcre_jit_test_OBJECTS) $(pcre_jit_test_DEPENDENCIES) $(EXTRA_pcre_jit_test_DEPENDENCIES)
++pcre_jit_test$(EXEEXT): $(pcre_jit_test_OBJECTS) $(pcre_jit_test_DEPENDENCIES) $(EXTRA_pcre_jit_test_DEPENDENCIES)
+ @rm -f pcre_jit_test$(EXEEXT)
+ $(AM_V_CCLD)$(pcre_jit_test_LINK) $(pcre_jit_test_OBJECTS) $(pcre_jit_test_LDADD) $(LIBS)
+
+-pcre_scanner_unittest$(EXEEXT): $(pcre_scanner_unittest_OBJECTS) $(pcre_scanner_unittest_DEPENDENCIES) $(EXTRA_pcre_scanner_unittest_DEPENDENCIES)
++pcre_scanner_unittest$(EXEEXT): $(pcre_scanner_unittest_OBJECTS) $(pcre_scanner_unittest_DEPENDENCIES) $(EXTRA_pcre_scanner_unittest_DEPENDENCIES)
+ @rm -f pcre_scanner_unittest$(EXEEXT)
+ $(AM_V_CXXLD)$(pcre_scanner_unittest_LINK) $(pcre_scanner_unittest_OBJECTS) $(pcre_scanner_unittest_LDADD) $(LIBS)
+
+-pcre_stringpiece_unittest$(EXEEXT): $(pcre_stringpiece_unittest_OBJECTS) $(pcre_stringpiece_unittest_DEPENDENCIES) $(EXTRA_pcre_stringpiece_unittest_DEPENDENCIES)
++pcre_stringpiece_unittest$(EXEEXT): $(pcre_stringpiece_unittest_OBJECTS) $(pcre_stringpiece_unittest_DEPENDENCIES) $(EXTRA_pcre_stringpiece_unittest_DEPENDENCIES)
+ @rm -f pcre_stringpiece_unittest$(EXEEXT)
+ $(AM_V_CXXLD)$(pcre_stringpiece_unittest_LINK) $(pcre_stringpiece_unittest_OBJECTS) $(pcre_stringpiece_unittest_LDADD) $(LIBS)
+
+-pcrecpp_unittest$(EXEEXT): $(pcrecpp_unittest_OBJECTS) $(pcrecpp_unittest_DEPENDENCIES) $(EXTRA_pcrecpp_unittest_DEPENDENCIES)
++pcrecpp_unittest$(EXEEXT): $(pcrecpp_unittest_OBJECTS) $(pcrecpp_unittest_DEPENDENCIES) $(EXTRA_pcrecpp_unittest_DEPENDENCIES)
+ @rm -f pcrecpp_unittest$(EXEEXT)
+ $(AM_V_CXXLD)$(pcrecpp_unittest_LINK) $(pcrecpp_unittest_OBJECTS) $(pcrecpp_unittest_LDADD) $(LIBS)
+
+-pcregrep$(EXEEXT): $(pcregrep_OBJECTS) $(pcregrep_DEPENDENCIES) $(EXTRA_pcregrep_DEPENDENCIES)
++pcregrep$(EXEEXT): $(pcregrep_OBJECTS) $(pcregrep_DEPENDENCIES) $(EXTRA_pcregrep_DEPENDENCIES)
+ @rm -f pcregrep$(EXEEXT)
+ $(AM_V_CCLD)$(pcregrep_LINK) $(pcregrep_OBJECTS) $(pcregrep_LDADD) $(LIBS)
+
+-pcretest$(EXEEXT): $(pcretest_OBJECTS) $(pcretest_DEPENDENCIES) $(EXTRA_pcretest_DEPENDENCIES)
++pcretest$(EXEEXT): $(pcretest_OBJECTS) $(pcretest_DEPENDENCIES) $(EXTRA_pcretest_DEPENDENCIES)
+ @rm -f pcretest$(EXEEXT)
+ $(AM_V_CCLD)$(pcretest_LINK) $(pcretest_OBJECTS) $(pcretest_LDADD) $(LIBS)
+ install-binSCRIPTS: $(bin_SCRIPTS)
+@@ -1623,6 +1620,7 @@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libpcre_la-pcre_fullinfo.Plo@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libpcre_la-pcre_get.Plo@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libpcre_la-pcre_globals.Plo@am__quote@
++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libpcre_la-pcre_info.Plo@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libpcre_la-pcre_jit_compile.Plo@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libpcre_la-pcre_maketables.Plo@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libpcre_la-pcre_newline.Plo@am__quote@
+@@ -1726,6 +1724,13 @@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libpcre_la_CFLAGS) $(CFLAGS) -c -o libpcre_la-pcre_globals.lo `test -f 'pcre_globals.c' || echo '$(srcdir)/'`pcre_globals.c
+
++libpcre_la-pcre_info.lo: pcre_info.c
++@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libpcre_la_CFLAGS) $(CFLAGS) -MT libpcre_la-pcre_info.lo -MD -MP -MF $(DEPDIR)/libpcre_la-pcre_info.Tpo -c -o libpcre_la-pcre_info.lo `test -f 'pcre_info.c' || echo '$(srcdir)/'`pcre_info.c
++@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libpcre_la-pcre_info.Tpo $(DEPDIR)/libpcre_la-pcre_info.Plo
++@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='pcre_info.c' object='libpcre_la-pcre_info.lo' libtool=yes @AMDEPBACKSLASH@
++@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
++@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libpcre_la_CFLAGS) $(CFLAGS) -c -o libpcre_la-pcre_info.lo `test -f 'pcre_info.c' || echo '$(srcdir)/'`pcre_info.c
++
+ libpcre_la-pcre_jit_compile.lo: pcre_jit_compile.c
+ @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libpcre_la_CFLAGS) $(CFLAGS) -MT libpcre_la-pcre_jit_compile.lo -MD -MP -MF $(DEPDIR)/libpcre_la-pcre_jit_compile.Tpo -c -o libpcre_la-pcre_jit_compile.lo `test -f 'pcre_jit_compile.c' || echo '$(srcdir)/'`pcre_jit_compile.c
+ @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libpcre_la-pcre_jit_compile.Tpo $(DEPDIR)/libpcre_la-pcre_jit_compile.Plo
+Index: pcre3/pcre_info.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ pcre3/pcre_info.c 2015-12-22 12:37:59.000000000 +0000
+@@ -0,0 +1,90 @@
++/*************************************************
++* Perl-Compatible Regular Expressions *
++*************************************************/
++
++/* PCRE is a library of functions to support regular expressions whose syntax
++and semantics are as close as possible to those of the Perl 5 language.
++
++ Written by Philip Hazel
++ Copyright (c) 1997-2009 University of Cambridge
++
++-----------------------------------------------------------------------------
++Redistribution and use in source and binary forms, with or without
++modification, are permitted provided that the following conditions are met:
++
++ * Redistributions of source code must retain the above copyright notice,
++ this list of conditions and the following disclaimer.
++
++ * Redistributions in binary form must reproduce the above copyright
++ notice, this list of conditions and the following disclaimer in the
++ documentation and/or other materials provided with the distribution.
++
++ * Neither the name of the University of Cambridge nor the names of its
++ contributors may be used to endorse or promote products derived from
++ this software without specific prior written permission.
++
++THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
++AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
++IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
++ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
++LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
++CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
++SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
++INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
++CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
++ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
++POSSIBILITY OF SUCH DAMAGE.
++-----------------------------------------------------------------------------
++*/
++
++
++/* This module contains the external function pcre_info(), which gives some
++information about a compiled pattern. However, use of this function is now
++deprecated, as it has been superseded by pcre_fullinfo(). */
++
++
++#ifdef HAVE_CONFIG_H
++#include "config.h"
++#endif
++
++#include "pcre_internal.h"
++
++
++/*************************************************
++* (Obsolete) Return info about compiled pattern *
++*************************************************/
++
++/* This is the original "info" function. It picks potentially useful data out
++of the private structure, but its interface was too rigid. It remains for
++backwards compatibility. The public options are passed back in an int - though
++the re->options field has been expanded to a long int, all the public options
++at the low end of it, and so even on 16-bit systems this will still be OK.
++Therefore, I haven't changed the API for pcre_info().
++
++Arguments:
++ argument_re points to compiled code
++ optptr where to pass back the options
++ first_byte where to pass back the first character,
++ or -1 if multiline and all branches start ^,
++ or -2 otherwise
++
++Returns: number of capturing subpatterns
++ or negative values on error
++*/
++
++PCRE_EXP_DEFN int PCRE_CALL_CONVENTION
++pcre_info(const pcre *argument_re, int *optptr, int *first_byte)
++{
++const real_pcre *re = (const real_pcre *)argument_re;
++if (re == NULL) return PCRE_ERROR_NULL;
++if (re->magic_number != MAGIC_NUMBER)
++ return PCRE_ERROR_BADMAGIC;
++
++if (optptr != NULL) *optptr = (int)(re->options & PUBLIC_COMPILE_OPTIONS);
++if (first_byte != NULL)
++ *first_byte = ((re->flags & PCRE_FIRSTSET) != 0)? re->first_char :
++ ((re->flags & PCRE_STARTLINE) != 0)? -1 : -2;
++return re->top_bracket;
++}
++
++/* End of pcre_info.c */
diff --git a/debian/patches/pcregrep.1-patch b/debian/patches/pcregrep.1-patch
new file mode 100644
index 0000000..4012369
--- /dev/null
+++ b/debian/patches/pcregrep.1-patch
@@ -0,0 +1,26 @@
+From: Mark Baker <mark@mnb.org.uk>
+Description: Mention zpcregrep wrapper script in pcregrep man page.
+
+
+Index: pcre3/doc/pcregrep.1
+===================================================================
+--- pcre3.orig/doc/pcregrep.1 2014-04-04 14:37:38.000000000 +0100
++++ pcre3/doc/pcregrep.1 2015-12-22 12:39:07.000000000 +0000
+@@ -3,6 +3,7 @@
+ pcregrep - a grep with Perl-compatible regular expressions.
+ .SH SYNOPSIS
+ .B pcregrep [options] [long options] [pattern] [path1 path2 ...]
++.B zpcregrep [options] [long options] [pattern] [file1 file2 ...]
+ .
+ .SH DESCRIPTION
+ .rs
+@@ -87,6 +88,9 @@
+ If the \fBLC_ALL\fP or \fBLC_CTYPE\fP environment variable is set,
+ \fBpcregrep\fP uses the value to set a locale when calling the PCRE library.
+ The \fB--locale\fP option can be used to override this.
++.P
++\fBzpcregrep\fR is a wrapper script that allows pcregrep to work on
++gzip compressed files.
+ .
+ .
+ .SH "SUPPORT FOR COMPRESSED FILES"
diff --git a/debian/patches/pcreposix.patch b/debian/patches/pcreposix.patch
new file mode 100644
index 0000000..587e8eb
--- /dev/null
+++ b/debian/patches/pcreposix.patch
@@ -0,0 +1,31 @@
+From: Mark Baker <mark@mnb.org.uk>
+Description: Fix PCRE posix interface otherwise libc regexes are used (Bug 22525)
+
+Index: pcre-8.30/pcreposix.h
+===================================================================
+--- pcre-8.30.orig/pcreposix.h 2011-12-28 17:57:51.000000000 +0100
++++ pcre-8.30/pcreposix.h 2012-03-23 11:05:02.223026534 +0100
+@@ -133,14 +133,19 @@
+
+ /* The functions */
+
+-PCREPOSIX_EXP_DECL int regcomp(regex_t *, const char *, int);
+-PCREPOSIX_EXP_DECL int regexec(const regex_t *, const char *, size_t,
++PCREPOSIX_EXP_DECL int pcreposix_regcomp(regex_t *, const char *, int);
++PCREPOSIX_EXP_DECL int pcreposix_regexec(const regex_t *, const char *, size_t,
+ regmatch_t *, int);
+-PCREPOSIX_EXP_DECL size_t regerror(int, const regex_t *, char *, size_t);
+-PCREPOSIX_EXP_DECL void regfree(regex_t *);
++PCREPOSIX_EXP_DECL size_t pcreposix_regerror(int, const regex_t *, char *, size_t);
++PCREPOSIX_EXP_DECL void pcreposix_regfree(regex_t *);
+
+ #ifdef __cplusplus
+ } /* extern "C" */
+ #endif
+
++#define regcomp pcreposix_regcomp
++#define regexec pcreposix_regexec
++#define regerror pcreposix_regerror
++#define regfree pcreposix_regfree
++
+ #endif /* End of pcreposix.h */
diff --git a/debian/patches/series b/debian/patches/series
new file mode 100644
index 0000000..bdf74b5
--- /dev/null
+++ b/debian/patches/series
@@ -0,0 +1,7 @@
+PCRE6_compatible_API.patch
+pcreposix.patch
+pcre_info.patch
+pcregrep.1-patch
+soname.patch
+no_jit_x32_powerpcspe.patch
+Disable_JIT_on_sparc64.patch
diff --git a/debian/patches/soname.patch b/debian/patches/soname.patch
new file mode 100644
index 0000000..cbdae2a
--- /dev/null
+++ b/debian/patches/soname.patch
@@ -0,0 +1,21 @@
+From: Mark Baker <mark@mnb.org.uk>
+Description: Change soname to what debian use
+Index: pcre3/configure.ac
+===================================================================
+--- pcre3.orig/configure.ac 2015-12-22 13:27:15.000000000 +0000
++++ pcre3/configure.ac 2015-12-22 13:28:37.000000000 +0000
+@@ -17,10 +17,10 @@
+ # 50 lines of this file. Please update that if the variables above are moved.
+
+ # Libtool shared library interface versions (current:revision:age)
+-m4_define(libpcre_version, [3:6:2])
+-m4_define(libpcre16_version, [2:6:2])
+-m4_define(libpcre32_version, [0:6:0])
+-m4_define(libpcreposix_version, [0:3:0])
++m4_define(libpcre_version, [16:2:13])
++m4_define(libpcre16_version, [16:2:13])
++m4_define(libpcre32_version, [16:2:13])
++m4_define(libpcreposix_version, [16:2:13])
+ m4_define(libpcrecpp_version, [0:1:0])
+
+ AC_PREREQ(2.57)