Package: release.debian.org Severity: normal Tags: jessie User: release.debian....@packages.debian.org Usertags: pu
Hi stable release managers, X-Debbugs-CC for Matthew and Moritz. I would like to propose another update for pcre3 addressing two CVEs which are as well no-dsa and have it possibly included in the next Jessie point release. The CVEs addressed are CVE-2016-1283 (#809706) and CVE-2016-3191 (#815921). I have additionally refreshed one previous patch which included a change to the error strings but actually belongs to one other change (cf. 0001-Give-error-for-x-and-o.patch). It adds the new ERR86, which then makes it easier to handle correctly the patch for CVE-2016-3191. Attached ist the full debdiff. Regards, Salvatore
diff -Nru pcre3-8.35/debian/changelog pcre3-8.35/debian/changelog --- pcre3-8.35/debian/changelog 2016-01-10 19:49:57.000000000 +0100 +++ pcre3-8.35/debian/changelog 2016-03-25 07:22:27.000000000 +0100 @@ -1,3 +1,20 @@ +pcre3 (2:8.35-3.3+deb8u3) jessie; urgency=medium + + * Non-maintainer upload. + * Refresh CVE-2015-2325_CVE-2015-2326_CVE-2015-3210_CVE-2015-5073.patch. + Drop addition of "error text" for error ERR86 in pcre_compile.c. This + change belongs to upstream revision 1481 (Give error for \x{} and \o{}). + * Add 0001-Give-error-for-x-and-o.patch. + Give error for \x{} and \o{}. + * Add 0001-Fix-workspace-overflow-for-ACCEPT-with-deeply-nested.patch. + CVE-2016-3191: workspace overflow for (*ACCEPT) with deeply nested + parentheses. (Closes: #815921) + * Add 0001-Yet-another-duplicate-name-bugfix-by-overestimating-.patch. + CVE-2016-1283: heap buffer overflow in handling of duplicate named + groups. (Closes: #809706) + + -- Salvatore Bonaccorso <car...@debian.org> Fri, 25 Mar 2016 07:05:50 +0100 + pcre3 (2:8.35-3.3+deb8u2) jessie; urgency=medium * Non-maintainer upload. diff -Nru pcre3-8.35/debian/patches/0001-Fix-workspace-overflow-for-ACCEPT-with-deeply-nested.patch pcre3-8.35/debian/patches/0001-Fix-workspace-overflow-for-ACCEPT-with-deeply-nested.patch --- pcre3-8.35/debian/patches/0001-Fix-workspace-overflow-for-ACCEPT-with-deeply-nested.patch 1970-01-01 01:00:00.000000000 +0100 +++ pcre3-8.35/debian/patches/0001-Fix-workspace-overflow-for-ACCEPT-with-deeply-nested.patch 2016-03-25 07:22:27.000000000 +0100 @@ -0,0 +1,120 @@ +Description: Fix workspace overflow for (*ACCEPT) with deeply nested parentheses + Addresses CVE-2016-3191 +Origin: upstream, http://vcs.pcre.org/pcre?view=revision&revision=1631 +Bug: https://bugs.exim.org/show_bug.cgi?id=1791 +Bug-Debian: https://bugs.debian.org/815921 +Forwarded: not-needed +Author: Philip Hazel <p...@cam.ac.uk> +Reviewed-by: Salvatore Bonaccorso <car...@debian.org> +Last-Update: 2016-03-25 +Applied-Upstream: 8.39 +--- + +--- a/pcre_compile.c ++++ b/pcre_compile.c +@@ -549,7 +549,8 @@ static const char error_texts[] = + "group name must start with a non-digit\0" + /* 85 */ + "parentheses are too deeply nested (stack check)\0" +- "digits missing in \\x{} or \\o{}\0" ++ "digits missing in \\x{} or \\o{}\0" ++ "regular expression is too complicated\0" + ; + + /* Table to identify digits and hex digits. This is used when compiling +@@ -4510,7 +4511,8 @@ for (;; ptr++) + if (code > cd->start_workspace + cd->workspace_size - + WORK_SIZE_SAFETY_MARGIN) /* Check for overrun */ + { +- *errorcodeptr = ERR52; ++ *errorcodeptr = (code >= cd->start_workspace + cd->workspace_size)? ++ ERR52 : ERR87; + goto FAILED; + } + +@@ -6473,8 +6475,21 @@ for (;; ptr++) + cd->had_accept = TRUE; + for (oc = cd->open_caps; oc != NULL; oc = oc->next) + { +- *code++ = OP_CLOSE; +- PUT2INC(code, 0, oc->number); ++ if (lengthptr != NULL) ++ { ++#ifdef COMPILE_PCRE8 ++ *lengthptr += 1 + IMM2_SIZE; ++#elif defined COMPILE_PCRE16 ++ *lengthptr += 2 + IMM2_SIZE; ++#elif defined COMPILE_PCRE32 ++ *lengthptr += 4 + IMM2_SIZE; ++#endif ++ } ++ else ++ { ++ *code++ = OP_CLOSE; ++ PUT2INC(code, 0, oc->number); ++ } + } + setverb = *code++ = + (cd->assert_depth > 0)? OP_ASSERT_ACCEPT : OP_ACCEPT; +--- a/testdata/testinput11 ++++ b/testdata/testinput11 +@@ -136,4 +136,6 @@ is required for these tests. --/ + + /((?+1)(\1))/B + ++/([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00](*ACCEPT)/ ++ + /-- End of testinput11 --/ +--- a/testdata/testoutput11-16 ++++ b/testdata/testoutput11-16 +@@ -748,4 +748,7 @@ Memory allocation (code space): 14 + 22 End + ------------------------------------------------------------------ + ++/([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00](*ACCEPT)/ ++Failed: regular expression is too complicated at offset 490 ++ + /-- End of testinput11 --/ +--- a/testdata/testoutput11-32 ++++ b/testdata/testoutput11-32 +@@ -748,4 +748,7 @@ Memory allocation (code space): 28 + 22 End + ------------------------------------------------------------------ + ++/([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00](*ACCEPT)/ ++Failed: missing ) at offset 509 ++ + /-- End of testinput11 --/ +--- a/testdata/testoutput11-8 ++++ b/testdata/testoutput11-8 +@@ -748,4 +748,7 @@ Memory allocation (code space): 10 + 34 End + ------------------------------------------------------------------ + ++/([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00](*ACCEPT)/ ++Failed: missing ) at offset 509 ++ + /-- End of testinput11 --/ +--- a/pcreposix.c ++++ b/pcreposix.c +@@ -173,7 +173,8 @@ static const int eint[] = { + REG_BADPAT, /* group name must start with a non-digit */ + /* 85 */ + REG_BADPAT, /* parentheses too deeply nested (stack check) */ +- REG_BADPAT /* missing digits in \x{} or \o{} */ ++ REG_BADPAT, /* missing digits in \x{} or \o{} */ ++ REG_BADPAT /* pattern too complicated */ + }; + + /* Table of texts corresponding to POSIX error codes */ +--- a/pcre_internal.h ++++ b/pcre_internal.h +@@ -2281,7 +2281,7 @@ enum { ERR0, ERR1, ERR2, ERR3, ERR4, + ERR50, ERR51, ERR52, ERR53, ERR54, ERR55, ERR56, ERR57, ERR58, ERR59, + ERR60, ERR61, ERR62, ERR63, ERR64, ERR65, ERR66, ERR67, ERR68, ERR69, + ERR70, ERR71, ERR72, ERR73, ERR74, ERR75, ERR76, ERR77, ERR78, ERR79, +- ERR80, ERR81, ERR82, ERR83, ERR84, ERR85, ERR86, ERRCOUNT }; ++ ERR80, ERR81, ERR82, ERR83, ERR84, ERR85, ERR86, ERR87, ERRCOUNT }; + + /* JIT compiling modes. The function list is indexed by them. */ + diff -Nru pcre3-8.35/debian/patches/0001-Give-error-for-x-and-o.patch pcre3-8.35/debian/patches/0001-Give-error-for-x-and-o.patch --- pcre3-8.35/debian/patches/0001-Give-error-for-x-and-o.patch 1970-01-01 01:00:00.000000000 +0100 +++ pcre3-8.35/debian/patches/0001-Give-error-for-x-and-o.patch 2016-03-25 07:22:27.000000000 +0100 @@ -0,0 +1,105 @@ +Description: Give error for \x{} and \o{}. +Origin: upstream, http://vcs.pcre.org/pcre?view=revision&revision=1481 +Forwarded: not-needed +Author: Philip Hazel <p...@cam.ac.uk> +Reviewed-by: Salvatore Bonaccorso <car...@debian.org> +Last-Update: 2016-03-25 +Applied-Upstream: 8.36 +--- + +--- a/pcre_compile.c ++++ b/pcre_compile.c +@@ -549,6 +549,7 @@ static const char error_texts[] = + "group name must start with a non-digit\0" + /* 85 */ + "parentheses are too deeply nested (stack check)\0" ++ "digits missing in \\x{} or \\o{}\0" + ; + + /* Table to identify digits and hex digits. This is used when compiling +@@ -1259,6 +1260,7 @@ else + + case CHAR_o: + if (ptr[1] != CHAR_LEFT_CURLY_BRACKET) *errorcodeptr = ERR81; else ++ if (ptr[2] == CHAR_RIGHT_CURLY_BRACKET) *errorcodeptr = ERR86; else + { + ptr += 2; + c = 0; +@@ -1328,6 +1330,11 @@ else + if (ptr[1] == CHAR_LEFT_CURLY_BRACKET) + { + ptr += 2; ++ if (*ptr == CHAR_RIGHT_CURLY_BRACKET) ++ { ++ *errorcodeptr = ERR86; ++ break; ++ } + c = 0; + overflow = FALSE; + while (MAX_255(*ptr) && (digitab[*ptr] & ctype_xdigit) != 0) +--- a/pcre_internal.h ++++ b/pcre_internal.h +@@ -2281,7 +2281,7 @@ enum { ERR0, ERR1, ERR2, ERR3, ERR4, + ERR50, ERR51, ERR52, ERR53, ERR54, ERR55, ERR56, ERR57, ERR58, ERR59, + ERR60, ERR61, ERR62, ERR63, ERR64, ERR65, ERR66, ERR67, ERR68, ERR69, + ERR70, ERR71, ERR72, ERR73, ERR74, ERR75, ERR76, ERR77, ERR78, ERR79, +- ERR80, ERR81, ERR82, ERR83, ERR84, ERR85, ERRCOUNT }; ++ ERR80, ERR81, ERR82, ERR83, ERR84, ERR85, ERR86, ERRCOUNT }; + + /* JIT compiling modes. The function list is indexed by them. */ + +--- a/pcreposix.c ++++ b/pcreposix.c +@@ -172,7 +172,8 @@ static const int eint[] = { + REG_BADPAT, /* invalid range in character class */ + REG_BADPAT, /* group name must start with a non-digit */ + /* 85 */ +- REG_BADPAT /* parentheses too deeply nested (stack check) */ ++ REG_BADPAT, /* parentheses too deeply nested (stack check) */ ++ REG_BADPAT /* missing digits in \x{} or \o{} */ + }; + + /* Table of texts corresponding to POSIX error codes */ +--- a/testdata/testinput2 ++++ b/testdata/testinput2 +@@ -4098,4 +4098,16 @@ backtracking verbs. --/ + + /(?J:(?|(:(?|(?'R')(\z(?|(?'R')(\k'R')|((?'R')))k'R')|((?'R')))H'Ak'Rf)|s(?'R')))/ + ++/\othing/ ++ ++/\o{}/ ++ ++/\o{whatever}/ ++ ++/\xthing/ ++ ++/\x{}/ ++ ++/\x{whatever}/ ++ + /-- End of testinput2 --/ +--- a/testdata/testoutput2 ++++ b/testdata/testoutput2 +@@ -14226,4 +14226,21 @@ Failed: number is too big at offset 13 + + /(?J:(?|(:(?|(?'R')(\z(?|(?'R')(\k'R')|((?'R')))k'R')|((?'R')))H'Ak'Rf)|s(?'R')))/ + ++/\othing/ ++Failed: missing opening brace after \o at offset 1 ++ ++/\o{}/ ++Failed: digits missing in \x{} or \o{} at offset 1 ++ ++/\o{whatever}/ ++Failed: non-octal character in \o{} (closing brace missing?) at offset 3 ++ ++/\xthing/ ++ ++/\x{}/ ++Failed: digits missing in \x{} or \o{} at offset 3 ++ ++/\x{whatever}/ ++Failed: non-hex character in \x{} (closing brace missing?) at offset 3 ++ + /-- End of testinput2 --/ diff -Nru pcre3-8.35/debian/patches/0001-Yet-another-duplicate-name-bugfix-by-overestimating-.patch pcre3-8.35/debian/patches/0001-Yet-another-duplicate-name-bugfix-by-overestimating-.patch --- pcre3-8.35/debian/patches/0001-Yet-another-duplicate-name-bugfix-by-overestimating-.patch 1970-01-01 01:00:00.000000000 +0100 +++ pcre3-8.35/debian/patches/0001-Yet-another-duplicate-name-bugfix-by-overestimating-.patch 2016-03-25 07:22:27.000000000 +0100 @@ -0,0 +1,45 @@ +Description: CVE-2016-1283: heap buffer overflow in handling of duplicate named groups +Origin: upstream, http://vcs.pcre.org/pcre?view=revision&revision=1636 +Bug: https://bugs.exim.org/show_bug.cgi?id=1767 +Bug-Debian: https://bugs.debian.org/809706 +Forwarded: not-needed +Author: Philip Hazel <p...@cam.ac.uk> +Reviewed-by: Salvatore Bonaccorso <car...@debian.org> +Last-Update: 2016-03-25 +Applied-Upstream: 8.39 +--- + +--- a/pcre_compile.c ++++ b/pcre_compile.c +@@ -7133,7 +7133,12 @@ for (;; ptr++) + so far in order to get the number. If the name is not found, leave + the value of recno as 0 for a forward reference. */ + +- else ++ /* This patch (removing "else") fixes a problem when a reference is ++ to multiple identically named nested groups from within the nest. ++ Once again, it is not the "proper" fix, and it results in an ++ over-allocation of memory. */ ++ ++ /* else */ + { + ng = cd->named_groups; + for (i = 0; i < cd->names_found; i++, ng++) +--- a/testdata/testinput2 ++++ b/testdata/testinput2 +@@ -4110,4 +4110,6 @@ backtracking verbs. --/ + + /\x{whatever}/ + ++/((?J)(?'R'(?'R'(?'R'(?'R'(?'R'(?|(\k'R'))))))))/ ++ + /-- End of testinput2 --/ +--- a/testdata/testoutput2 ++++ b/testdata/testoutput2 +@@ -14243,4 +14243,6 @@ Failed: digits missing in \x{} or \o{} a + /\x{whatever}/ + Failed: non-hex character in \x{} (closing brace missing?) at offset 3 + ++/((?J)(?'R'(?'R'(?'R'(?'R'(?'R'(?|(\k'R'))))))))/ ++ + /-- End of testinput2 --/ diff -Nru pcre3-8.35/debian/patches/CVE-2015-2325_CVE-2015-2326_CVE-2015-3210_CVE-2015-5073.patch pcre3-8.35/debian/patches/CVE-2015-2325_CVE-2015-2326_CVE-2015-3210_CVE-2015-5073.patch --- pcre3-8.35/debian/patches/CVE-2015-2325_CVE-2015-2326_CVE-2015-3210_CVE-2015-5073.patch 2016-01-10 19:49:57.000000000 +0100 +++ pcre3-8.35/debian/patches/CVE-2015-2325_CVE-2015-2326_CVE-2015-3210_CVE-2015-5073.patch 2016-03-25 07:22:27.000000000 +0100 @@ -3,17 +3,9 @@ https://security-tracker.debian.org/tracker/CVE-2015-2326 https://security-tracker.debian.org/tracker/CVE-2015-2325 ---- pcre3-8.35.orig/pcre_compile.c -+++ pcre3-8.35/pcre_compile.c -@@ -549,6 +549,7 @@ static const char error_texts[] = - "group name must start with a non-digit\0" - /* 85 */ - "parentheses are too deeply nested (stack check)\0" -+ "digits missing in \\x{} or \\o{}\0" - ; - - /* Table to identify digits and hex digits. This is used when compiling -@@ -3936,14 +3937,14 @@ Arguments: +--- a/pcre_compile.c ++++ b/pcre_compile.c +@@ -3936,14 +3936,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. @@ -30,7 +22,7 @@ { pcre_uchar *ptr = group; -@@ -3955,7 +3956,8 @@ while ((ptr = (pcre_uchar *)find_recurse +@@ -3955,7 +3955,8 @@ while ((ptr = (pcre_uchar *)find_recurse /* See if this recursion is on the forward reference list. If so, adjust the reference. */ @@ -40,7 +32,7 @@ { offset = (int)GET(hc, 0); if (cd->start_code + offset == ptr + 1) -@@ -4400,7 +4402,7 @@ const pcre_uchar *tempptr; +@@ -4400,7 +4401,7 @@ const pcre_uchar *tempptr; const pcre_uchar *nestptr = NULL; pcre_uchar *previous = NULL; pcre_uchar *previous_callout = NULL; @@ -49,7 +41,7 @@ pcre_uint8 classbits[32]; /* We can fish out the UTF-8 setting once and for all into a BOOL, but we -@@ -5912,7 +5914,7 @@ for (;; ptr++) +@@ -5912,7 +5913,7 @@ for (;; ptr++) if (repeat_max <= 1) /* Covers 0, 1, and unlimited */ { *code = OP_END; @@ -58,7 +50,7 @@ memmove(previous + 1, previous, IN_UCHARS(len)); code++; if (repeat_max == 0) -@@ -5936,7 +5938,7 @@ for (;; ptr++) +@@ -5936,7 +5937,7 @@ for (;; ptr++) { int offset; *code = OP_END; @@ -67,7 +59,7 @@ memmove(previous + 2 + LINK_SIZE, previous, IN_UCHARS(len)); code += 2 + LINK_SIZE; *previous++ = OP_BRAZERO + repeat_type; -@@ -5999,26 +6001,25 @@ for (;; ptr++) +@@ -5999,26 +6000,25 @@ for (;; ptr++) for (i = 1; i < repeat_min; i++) { pcre_uchar *hc; @@ -101,7 +93,7 @@ code += len; } } -@@ -6063,7 +6064,7 @@ for (;; ptr++) +@@ -6063,7 +6063,7 @@ for (;; ptr++) else for (i = repeat_max - 1; i >= 0; i--) { pcre_uchar *hc; @@ -110,7 +102,7 @@ *code++ = OP_BRAZERO + repeat_type; -@@ -6085,22 +6086,21 @@ for (;; ptr++) +@@ -6085,22 +6085,21 @@ for (;; ptr++) copying them. */ while (cd->hwm > cd->start_workspace + cd->workspace_size - @@ -139,7 +131,7 @@ code += len; } -@@ -6196,7 +6196,7 @@ for (;; ptr++) +@@ -6196,7 +6195,7 @@ for (;; ptr++) { int nlen = (int)(code - bracode); *code = OP_END; @@ -148,7 +140,7 @@ memmove(bracode + 1 + LINK_SIZE, bracode, IN_UCHARS(nlen)); code += 1 + LINK_SIZE; nlen += 1 + LINK_SIZE; -@@ -6330,7 +6330,7 @@ for (;; ptr++) +@@ -6330,7 +6329,7 @@ for (;; ptr++) else { *code = OP_END; @@ -157,7 +149,7 @@ memmove(tempcode + 1 + LINK_SIZE, tempcode, IN_UCHARS(len)); code += 1 + LINK_SIZE; len += 1 + LINK_SIZE; -@@ -6379,7 +6379,7 @@ for (;; ptr++) +@@ -6379,7 +6378,7 @@ for (;; ptr++) default: *code = OP_END; @@ -166,7 +158,7 @@ memmove(tempcode + 1 + LINK_SIZE, tempcode, IN_UCHARS(len)); code += 1 + LINK_SIZE; len += 1 + LINK_SIZE; -@@ -6411,7 +6411,7 @@ for (;; ptr++) +@@ -6411,7 +6410,7 @@ for (;; ptr++) newoptions = options; skipbytes = 0; bravalue = OP_CBRA; @@ -175,7 +167,7 @@ reset_bracount = FALSE; /* First deal with various "verbs" that can be introduced by '*'. */ -@@ -7086,14 +7086,26 @@ for (;; ptr++) +@@ -7086,14 +7085,26 @@ for (;; ptr++) number. If the name is not found, set the value to 0 for a forward reference. */ @@ -204,7 +196,7 @@ /* Count named back references. */ -@@ -7704,7 +7716,7 @@ for (;; ptr++) +@@ -7704,7 +7715,7 @@ for (;; ptr++) const pcre_uchar *p; pcre_uint32 cf; @@ -213,7 +205,7 @@ terminator = (*(++ptr) == CHAR_LESS_THAN_SIGN)? CHAR_GREATER_THAN_SIGN : CHAR_APOSTROPHE; -@@ -8031,6 +8043,7 @@ int length; +@@ -8031,6 +8042,7 @@ int length; unsigned int orig_bracount; unsigned int max_bracount; branch_chain bc; @@ -221,7 +213,7 @@ /* If set, call the external function that checks for stack availability. */ -@@ -8048,6 +8061,8 @@ bc.current_branch = code; +@@ -8048,6 +8060,8 @@ bc.current_branch = code; firstchar = reqchar = 0; firstcharflags = reqcharflags = REQ_UNSET; @@ -230,7 +222,7 @@ /* 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 -@@ -8241,12 +8256,16 @@ for (;;) +@@ -8241,12 +8255,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. @@ -248,7 +240,7 @@ memmove(start_bracket + 1 + LINK_SIZE, start_bracket, IN_UCHARS(code - start_bracket)); *start_bracket = OP_ONCE; -@@ -9265,7 +9284,7 @@ OP_RECURSE that are not fixed length get +@@ -9265,7 +9283,7 @@ OP_RECURSE that are not fixed length get exceptional ones forgo this. We scan the pattern to check that they are fixed length, and set their lengths. */ @@ -257,8 +249,8 @@ { pcre_uchar *cc = (pcre_uchar *)codestart; ---- pcre3-8.35.orig/testdata/testinput11 -+++ pcre3-8.35/testdata/testinput11 +--- a/testdata/testinput11 ++++ b/testdata/testinput11 @@ -132,4 +132,8 @@ is required for these tests. --/ /abc(d|e)(*THEN)x(123(*THEN)4|567(b|q)(*THEN)xx)/B @@ -268,8 +260,8 @@ +/((?+1)(\1))/B + /-- End of testinput11 --/ ---- pcre3-8.35.orig/testdata/testinput2 -+++ pcre3-8.35/testdata/testinput2 +--- a/testdata/testinput2 ++++ b/testdata/testinput2 @@ -4035,6 +4035,8 @@ backtracking verbs. --/ /(?(R&6yh)abc)/ @@ -292,8 +284,8 @@ +/(?=di(?<=(?1))|(?=(.))))/ + /-- End of testinput2 --/ ---- pcre3-8.35.orig/testdata/testoutput11-16 -+++ pcre3-8.35/testdata/testoutput11-16 +--- a/testdata/testoutput11-16 ++++ b/testdata/testoutput11-16 @@ -709,4 +709,43 @@ Memory allocation (code space): 14 62 End ------------------------------------------------------------------ @@ -338,8 +330,8 @@ +------------------------------------------------------------------ + /-- End of testinput11 --/ ---- pcre3-8.35.orig/testdata/testoutput11-32 -+++ pcre3-8.35/testdata/testoutput11-32 +--- a/testdata/testoutput11-32 ++++ b/testdata/testoutput11-32 @@ -709,4 +709,43 @@ Memory allocation (code space): 28 62 End ------------------------------------------------------------------ @@ -384,8 +376,8 @@ +------------------------------------------------------------------ + /-- End of testinput11 --/ ---- pcre3-8.35.orig/testdata/testoutput11-8 -+++ pcre3-8.35/testdata/testoutput11-8 +--- a/testdata/testoutput11-8 ++++ b/testdata/testoutput11-8 @@ -709,4 +709,43 @@ Memory allocation (code space): 10 76 End ------------------------------------------------------------------ @@ -430,8 +422,8 @@ +------------------------------------------------------------------ + /-- End of testinput11 --/ ---- pcre3-8.35.orig/testdata/testoutput2 -+++ pcre3-8.35/testdata/testoutput2 +--- 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 diff -Nru pcre3-8.35/debian/patches/series pcre3-8.35/debian/patches/series --- pcre3-8.35/debian/patches/series 2016-01-10 19:49:57.000000000 +0100 +++ pcre3-8.35/debian/patches/series 2016-03-25 07:22:27.000000000 +0100 @@ -21,3 +21,6 @@ 0001-Make-pcregrep-q-override-l-and-c-for-compatibility-w.patch 0001-Add-missing-integer-overflow-checks.patch 0001-Hack-in-yet-other-patch-for-a-bug-in-size-computatio.patch +0001-Give-error-for-x-and-o.patch +0001-Fix-workspace-overflow-for-ACCEPT-with-deeply-nested.patch +0001-Yet-another-duplicate-name-bugfix-by-overestimating-.patch