From 5ac00554757dfd52881f372884fda23673cbde6f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Petr=20P=C3=ADsa=C5=99?= Date: Tue, 27 Aug 2019 11:13:42 +0200 Subject: [PATCH] Readd a fix for a mismatch with a lookbehind within a lookahead within a lookbehind and fix the regression in matching a lookbehind after a condition --- ...t-patch-for-lookbehinds-within-looka.patch | 114 +++++++++ ...ed-in-commit-1133.-Lookbehinds-that-.patch | 210 +++++++++++++++++ ...mputation-of-group-length-when-one-b.patch | 20 +- ...ithin-lookahead-within-lookbehind-mi.patch | 217 ++++++++++++++++++ ...on-in-a-lookbehind-after-a-condition.patch | 58 ----- pcre2.spec | 26 ++- 6 files changed, 571 insertions(+), 74 deletions(-) create mode 100644 pcre2-10.33-Fix-bug-in-recent-patch-for-lookbehinds-within-looka.patch create mode 100644 pcre2-10.33-Fix-bug-introduced-in-commit-1133.-Lookbehinds-that-.patch create mode 100644 pcre2-10.33-Fix-lookbehind-within-lookahead-within-lookbehind-mi.patch delete mode 100644 pcre2-10.33-Test-a-regression-in-a-lookbehind-after-a-condition.patch diff --git a/pcre2-10.33-Fix-bug-in-recent-patch-for-lookbehinds-within-looka.patch b/pcre2-10.33-Fix-bug-in-recent-patch-for-lookbehinds-within-looka.patch new file mode 100644 index 0000000..ce02a3f --- /dev/null +++ b/pcre2-10.33-Fix-bug-in-recent-patch-for-lookbehinds-within-looka.patch @@ -0,0 +1,114 @@ +From 007b635b6788f8317747842b02f9c85137277c20 Mon Sep 17 00:00:00 2001 +From: ph10 +Date: Thu, 18 Jul 2019 17:20:29 +0000 +Subject: [PATCH] Fix bug in recent patch for lookbehinds within lookaheads. + Fixes ClusterFuzz 15933. +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +git-svn-id: svn://vcs.exim.org/pcre2/code/trunk@1138 6239d852-aaf2-0410-a92c-79f79f948069 +Petr Písař: Ported to 10.33. + +Signed-off-by: Petr Písař +--- + src/pcre2_compile.c | 22 +++++++++++++--------- + testdata/testinput2 | 3 +++ + testdata/testoutput2 | 4 ++++ + 3 files changed, 20 insertions(+), 9 deletions(-) + +diff --git a/src/pcre2_compile.c b/src/pcre2_compile.c +index 2ae95ed..b68c154 100644 +--- a/src/pcre2_compile.c ++++ b/src/pcre2_compile.c +@@ -136,7 +136,8 @@ static BOOL + compile_block *); + + static int +- check_lookbehinds(uint32_t *, uint32_t **, compile_block *); ++ check_lookbehinds(uint32_t *, uint32_t **, parsed_recurse_check *, ++ compile_block *); + + + /************************************************* +@@ -9004,7 +9005,7 @@ for (;; pptr++) + + case META_LOOKAHEAD: + case META_LOOKAHEADNOT: +- *errcodeptr = check_lookbehinds(pptr + 1, &pptr, cb); ++ *errcodeptr = check_lookbehinds(pptr + 1, &pptr, recurses, cb); + if (*errcodeptr != 0) return -1; + + /* Ignore any qualifiers that follow a lookahead assertion. */ +@@ -9326,15 +9327,17 @@ order to process any lookbehinds that they may contain. It stops when it hits a + non-nested closing parenthesis in this case, returning a pointer to it. + + Arguments +- pptr points to where to start (start of pattern or start of lookahead) +- retptr if not NULL, return the ket pointer here +- cb points to the compile block ++ pptr points to where to start (start of pattern or start of lookahead) ++ retptr if not NULL, return the ket pointer here ++ recurses chain of recurse_check to catch mutual recursion ++ cb points to the compile block + +-Returns: 0 on success, or an errorcode (cb->erroroffset will be set) ++Returns: 0 on success, or an errorcode (cb->erroroffset will be set) + */ + + static int +-check_lookbehinds(uint32_t *pptr, uint32_t **retptr, compile_block *cb) ++check_lookbehinds(uint32_t *pptr, uint32_t **retptr, ++ parsed_recurse_check *recurses, compile_block *cb) + { + int errorcode = 0; + int loopcount = 0; +@@ -9449,7 +9452,8 @@ for (; *pptr != META_END; pptr++) + + case META_LOOKBEHIND: + case META_LOOKBEHINDNOT: +- if (!set_lookbehind_lengths(&pptr, &errorcode, &loopcount, NULL, cb)) ++ if (!set_lookbehind_lengths(&pptr, &errorcode, &loopcount, ++ recurses, cb)) + return errorcode; + break; + } +@@ -9899,7 +9903,7 @@ lengths. */ + + if (has_lookbehind) + { +- errorcode = check_lookbehinds(cb.parsed_pattern, NULL, &cb); ++ errorcode = check_lookbehinds(cb.parsed_pattern, NULL, NULL, &cb); + if (errorcode != 0) goto HAD_CB_ERROR; + } + +diff --git a/testdata/testinput2 b/testdata/testinput2 +index d85fc5f..1bfe591 100644 +--- a/testdata/testinput2 ++++ b/testdata/testinput2 +@@ -5600,4 +5600,7 @@ a)"xI + /(?<=(?=.(?<=x)))/ + ab\=ph + ++# Expect error (recursion => not fixed length) ++/(\2)((?=(?<=\1)))/ ++ + # End of testinput2 +diff --git a/testdata/testoutput2 b/testdata/testoutput2 +index 6405e26..758b4db 100644 +--- a/testdata/testoutput2 ++++ b/testdata/testoutput2 +@@ -16952,6 +16952,10 @@ Failed: error 187 at offset 10: lookbehind assertion is too long + ab\=ph + No match + ++# Expect error (recursion => not fixed length) ++/(\2)((?=(?<=\1)))/ ++Failed: error 125 at offset 8: lookbehind assertion is not fixed length ++ + # End of testinput2 + Error -70: PCRE2_ERROR_BADDATA (unknown error number) + Error -62: bad serialized data +-- +2.20.1 + diff --git a/pcre2-10.33-Fix-bug-introduced-in-commit-1133.-Lookbehinds-that-.patch b/pcre2-10.33-Fix-bug-introduced-in-commit-1133.-Lookbehinds-that-.patch new file mode 100644 index 0000000..488fffe --- /dev/null +++ b/pcre2-10.33-Fix-bug-introduced-in-commit-1133.-Lookbehinds-that-.patch @@ -0,0 +1,210 @@ +From 8a5ce4c055808fd3a19b0da15e0e3caeb0ac3abb Mon Sep 17 00:00:00 2001 +From: ph10 +Date: Mon, 26 Aug 2019 16:28:26 +0000 +Subject: [PATCH] Fix bug introduced in commit 1133. Lookbehinds that follow a + condition were not always properly handled. +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +git-svn-id: svn://vcs.exim.org/pcre2/code/trunk@1160 6239d852-aaf2-0410-a92c-79f79f948069 +Petr Písař: Ported to 10.33. + +Signed-off-by: Petr Písař +--- + src/pcre2_compile.c | 12 +++++- + testdata/testinput1 | 3 ++ + testdata/testinput2 | 10 +++++ + testdata/testoutput1 | 6 +++ + testdata/testoutput2 | 93 ++++++++++++++++++++++++++++++++++++++++++++ + 5 files changed, 122 insertions(+), 2 deletions(-) + +diff --git a/src/pcre2_compile.c b/src/pcre2_compile.c +index b68c154..5cae730 100644 +--- a/src/pcre2_compile.c ++++ b/src/pcre2_compile.c +@@ -9411,13 +9411,22 @@ for (; *pptr != META_END; pptr++) + break; + + case META_BACKREF_BYNAME: ++ case META_RECURSE_BYNAME: ++ pptr += 1 + SIZEOFFSET; ++ break; ++ + case META_COND_DEFINE: + case META_COND_NAME: + case META_COND_NUMBER: + case META_COND_RNAME: + case META_COND_RNUMBER: +- case META_RECURSE_BYNAME: + pptr += 1 + SIZEOFFSET; ++ nestlevel++; ++ break; ++ ++ case META_COND_VERSION: ++ pptr += 3; ++ nestlevel++; + break; + + case META_CALLOUT_STRING: +@@ -9438,7 +9447,6 @@ for (; *pptr != META_END; pptr++) + break; + + case META_CALLOUT_NUMBER: +- case META_COND_VERSION: + pptr += 3; + break; + +diff --git a/testdata/testinput1 b/testdata/testinput1 +index ee9354b..db1706b 100644 +--- a/testdata/testinput1 ++++ b/testdata/testinput1 +@@ -6371,4 +6371,7 @@ ef) x/x,mark + /(?<=(?=(?<=a)))b/ + ab + ++/^(?a)(?()b)((?<=b).*)$/ ++ abc ++ + # End of testinput1 +diff --git a/testdata/testinput2 b/testdata/testinput2 +index 2b1aced..a5f59b9 100644 +--- a/testdata/testinput2 ++++ b/testdata/testinput2 +@@ -5611,4 +5611,14 @@ a)"xI + /\A\s*((?:[^`]{28500}){4}|a)/I + a + ++/(?a)(?()b)((?<=b).*)/B ++ ++/(?(1)b)((?<=b).*)/B ++ ++/(?(R1)b)((?<=b).*)/B ++ ++/(?(DEFINE)b)((?<=b).*)/B ++ ++/(?(VERSION=10.4)b)((?<=b).*)/B ++ + # End of testinput2 +diff --git a/testdata/testoutput1 b/testdata/testoutput1 +index c9bfea8..3f872e7 100644 +--- a/testdata/testoutput1 ++++ b/testdata/testoutput1 +@@ -10090,4 +10090,10 @@ No match + ab + 0: b + ++/^(?a)(?()b)((?<=b).*)$/ ++ abc ++ 0: abc ++ 1: a ++ 2: c ++ + # End of testinput1 +diff --git a/testdata/testoutput2 b/testdata/testoutput2 +index d2415c3..6e41ed8 100644 +--- a/testdata/testoutput2 ++++ b/testdata/testoutput2 +@@ -16983,6 +16983,99 @@ Subject length lower bound = 1 + 0: a + 1: a + ++/(?a)(?()b)((?<=b).*)/B ++------------------------------------------------------------------ ++ Bra ++ CBra 1 ++ a ++ Ket ++ Cond ++ 1 Cond ref ++ b ++ Ket ++ CBra 2 ++ AssertB ++ Reverse ++ b ++ Ket ++ Any*+ ++ Ket ++ Ket ++ End ++------------------------------------------------------------------ ++ ++/(?(1)b)((?<=b).*)/B ++------------------------------------------------------------------ ++ Bra ++ Cond ++ 1 Cond ref ++ b ++ Ket ++ CBra 1 ++ AssertB ++ Reverse ++ b ++ Ket ++ Any*+ ++ Ket ++ Ket ++ End ++------------------------------------------------------------------ ++ ++/(?(R1)b)((?<=b).*)/B ++------------------------------------------------------------------ ++ Bra ++ Cond ++ Cond recurse 1 ++ b ++ Ket ++ CBra 1 ++ AssertB ++ Reverse ++ b ++ Ket ++ Any*+ ++ Ket ++ Ket ++ End ++------------------------------------------------------------------ ++ ++/(?(DEFINE)b)((?<=b).*)/B ++------------------------------------------------------------------ ++ Bra ++ Cond ++ Cond false ++ b ++ Ket ++ CBra 1 ++ AssertB ++ Reverse ++ b ++ Ket ++ Any*+ ++ Ket ++ Ket ++ End ++------------------------------------------------------------------ ++ ++/(?(VERSION=10.4)b)((?<=b).*)/B ++------------------------------------------------------------------ ++ Bra ++ Cond ++ Cond false ++ b ++ Ket ++ CBra 1 ++ AssertB ++ Reverse ++ b ++ Ket ++ Any*+ ++ Ket ++ Ket ++ End ++------------------------------------------------------------------ ++ + # End of testinput2 + Error -70: PCRE2_ERROR_BADDATA (unknown error number) + Error -62: bad serialized data +-- +2.21.0 + diff --git a/pcre2-10.33-Fix-incorrect-computation-of-group-length-when-one-b.patch b/pcre2-10.33-Fix-incorrect-computation-of-group-length-when-one-b.patch index 6e5792b..bcfeeaf 100644 --- a/pcre2-10.33-Fix-incorrect-computation-of-group-length-when-one-b.patch +++ b/pcre2-10.33-Fix-incorrect-computation-of-group-length-when-one-b.patch @@ -1,4 +1,4 @@ -From f966564e6e8fa85db153b827bf7e01879b8ee42b Mon Sep 17 00:00:00 2001 +From 4c3e518bff94e5f206a63e3a1e5d7e570402786b Mon Sep 17 00:00:00 2001 From: ph10 Date: Sat, 3 Aug 2019 08:30:40 +0000 Subject: [PATCH] Fix incorrect computation of group length when one branch @@ -75,12 +75,12 @@ index e883c2e..cb5e7f1 100644 branchlength = 0; had_recurse = FALSE; diff --git a/testdata/testinput2 b/testdata/testinput2 -index 9412bf6..b9d2826 100644 +index 1bfe591..384239a 100644 --- a/testdata/testinput2 +++ b/testdata/testinput2 -@@ -5597,4 +5597,12 @@ a)"xI - # Multiplication overflow - /(X{65535})(?<=\1{32770})/ +@@ -5603,4 +5603,12 @@ a)"xI + # Expect error (recursion => not fixed length) + /(\2)((?=(?<=\1)))/ +/\A\s*(a|(?:[^`]{28500}){4})/I + a @@ -92,12 +92,12 @@ index 9412bf6..b9d2826 100644 + # End of testinput2 diff --git a/testdata/testoutput2 b/testdata/testoutput2 -index 950095f..16c8bd6 100644 +index 758b4db..0983741 100644 --- a/testdata/testoutput2 +++ b/testdata/testoutput2 -@@ -16948,6 +16948,33 @@ Failed: error 187 at offset 15: lookbehind assertion is too long - /(X{65535})(?<=\1{32770})/ - Failed: error 187 at offset 10: lookbehind assertion is too long +@@ -16956,6 +16956,33 @@ No match + /(\2)((?=(?<=\1)))/ + Failed: error 125 at offset 8: lookbehind assertion is not fixed length +/\A\s*(a|(?:[^`]{28500}){4})/I +Capture group count = 1 @@ -130,5 +130,5 @@ index 950095f..16c8bd6 100644 Error -70: PCRE2_ERROR_BADDATA (unknown error number) Error -62: bad serialized data -- -2.21.0 +2.20.1 diff --git a/pcre2-10.33-Fix-lookbehind-within-lookahead-within-lookbehind-mi.patch b/pcre2-10.33-Fix-lookbehind-within-lookahead-within-lookbehind-mi.patch new file mode 100644 index 0000000..ceed28a --- /dev/null +++ b/pcre2-10.33-Fix-lookbehind-within-lookahead-within-lookbehind-mi.patch @@ -0,0 +1,217 @@ +From 44c8382acfe0902b302e0d7a5b1c6d9ee9226a51 Mon Sep 17 00:00:00 2001 +From: ph10 +Date: Tue, 16 Jul 2019 15:06:21 +0000 +Subject: [PATCH] Fix lookbehind within lookahead within lookbehind + misbehaviour bug. +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +git-svn-id: svn://vcs.exim.org/pcre2/code/trunk@1133 6239d852-aaf2-0410-a92c-79f79f948069 +Petr Písař: Ported to 10.33. + +Signed-off-by: Petr Písař +--- + src/pcre2_compile.c | 58 +++++++++++++++++++++++++++++--------------- + testdata/testinput1 | 6 +++++ + testdata/testinput2 | 3 +++ + testdata/testoutput1 | 9 +++++++ + testdata/testoutput2 | 4 +++ + 5 files changed, 61 insertions(+), 19 deletions(-) + +diff --git a/src/pcre2_compile.c b/src/pcre2_compile.c +index f6e0a0b..2ae95ed 100644 +--- a/src/pcre2_compile.c ++++ b/src/pcre2_compile.c +@@ -135,6 +135,8 @@ static BOOL + set_lookbehind_lengths(uint32_t **, int *, int *, parsed_recurse_check *, + compile_block *); + ++static int ++ check_lookbehinds(uint32_t *, uint32_t **, compile_block *); + + + /************************************************* +@@ -8997,15 +8999,15 @@ for (;; pptr++) + } + break; + +- /* Lookaheads can be ignored, but we must start the skip inside the group +- so that it isn't treated as a group within the branch. */ ++ /* Lookaheads do not contribute to the length of this branch, but they may ++ contain lookbehinds within them whose lengths need to be set. */ + + case META_LOOKAHEAD: + case META_LOOKAHEADNOT: +- pptr = parsed_skip(pptr + 1, PSKIP_KET); +- if (pptr == NULL) goto PARSED_SKIP_FAILED; ++ *errcodeptr = check_lookbehinds(pptr + 1, &pptr, cb); ++ if (*errcodeptr != 0) return -1; + +- /* Also ignore any qualifiers that follow a lookahead assertion. */ ++ /* Ignore any qualifiers that follow a lookahead assertion. */ + + switch (pptr[1]) + { +@@ -9319,20 +9321,28 @@ set_lookbehind_lengths() for each one. At the start, the errorcode is zero and + the error offset is marked unset. The enables the functions above not to + override settings from deeper nestings. + +-Arguments cb points to the compile block +-Returns: 0 on success, or an errorcode (cb->erroroffset will be set) ++This function is called recursively from get_branchlength() for lookaheads in ++order to process any lookbehinds that they may contain. It stops when it hits a ++non-nested closing parenthesis in this case, returning a pointer to it. ++ ++Arguments ++ pptr points to where to start (start of pattern or start of lookahead) ++ retptr if not NULL, return the ket pointer here ++ cb points to the compile block ++ ++Returns: 0 on success, or an errorcode (cb->erroroffset will be set) + */ + + static int +-check_lookbehinds(compile_block *cb) ++check_lookbehinds(uint32_t *pptr, uint32_t **retptr, compile_block *cb) + { +-uint32_t *pptr; + int errorcode = 0; + int loopcount = 0; ++int nestlevel = 0; + + cb->erroroffset = PCRE2_UNSET; + +-for (pptr = cb->parsed_pattern; *pptr != META_END; pptr++) ++for (; *pptr != META_END; pptr++) + { + if (*pptr < META_END) continue; /* Literal */ + +@@ -9346,14 +9356,30 @@ for (pptr = cb->parsed_pattern; *pptr != META_END; pptr++) + pptr += 1; + break; + ++ case META_KET: ++ if (--nestlevel < 0) ++ { ++ if (retptr != NULL) *retptr = pptr; ++ return 0; ++ } ++ break; ++ ++ case META_ATOMIC: ++ case META_CAPTURE: ++ case META_COND_ASSERT: ++ case META_LOOKAHEAD: ++ case META_LOOKAHEADNOT: ++ case META_NOCAPTURE: ++ case META_SCRIPT_RUN: ++ nestlevel++; ++ break; ++ + case META_ACCEPT: + case META_ALT: + case META_ASTERISK: + case META_ASTERISK_PLUS: + case META_ASTERISK_QUERY: +- case META_ATOMIC: + case META_BACKREF: +- case META_CAPTURE: + case META_CIRCUMFLEX: + case META_CLASS: + case META_CLASS_EMPTY: +@@ -9361,14 +9387,9 @@ for (pptr = cb->parsed_pattern; *pptr != META_END; pptr++) + case META_CLASS_END: + case META_CLASS_NOT: + case META_COMMIT: +- case META_COND_ASSERT: + case META_DOLLAR: + case META_DOT: + case META_FAIL: +- case META_KET: +- case META_LOOKAHEAD: +- case META_LOOKAHEADNOT: +- case META_NOCAPTURE: + case META_PLUS: + case META_PLUS_PLUS: + case META_PLUS_QUERY: +@@ -9378,7 +9399,6 @@ for (pptr = cb->parsed_pattern; *pptr != META_END; pptr++) + case META_QUERY_QUERY: + case META_RANGE_ESCAPED: + case META_RANGE_LITERAL: +- case META_SCRIPT_RUN: + case META_SKIP: + case META_THEN: + break; +@@ -9879,7 +9899,7 @@ lengths. */ + + if (has_lookbehind) + { +- errorcode = check_lookbehinds(&cb); ++ errorcode = check_lookbehinds(cb.parsed_pattern, NULL, &cb); + if (errorcode != 0) goto HAD_CB_ERROR; + } + +diff --git a/testdata/testinput1 b/testdata/testinput1 +index 4d9ec5a..ee9354b 100644 +--- a/testdata/testinput1 ++++ b/testdata/testinput1 +@@ -6365,4 +6365,10 @@ ef) x/x,mark + /(?(DEFINE)(a|ab))(?1){1}+c/ + abc + ++/(?<=(?=.(?<=x)))/aftertext ++ abx ++ ++/(?<=(?=(?<=a)))b/ ++ ab ++ + # End of testinput1 +diff --git a/testdata/testinput2 b/testdata/testinput2 +index 9412bf6..d85fc5f 100644 +--- a/testdata/testinput2 ++++ b/testdata/testinput2 +@@ -5597,4 +5597,7 @@ a)"xI + # Multiplication overflow + /(X{65535})(?<=\1{32770})/ + ++/(?<=(?=.(?<=x)))/ ++ ab\=ph ++ + # End of testinput2 +diff --git a/testdata/testoutput1 b/testdata/testoutput1 +index fffb8ec..c9bfea8 100644 +--- a/testdata/testoutput1 ++++ b/testdata/testoutput1 +@@ -10081,4 +10081,13 @@ No match + abc + No match + ++/(?<=(?=.(?<=x)))/aftertext ++ abx ++ 0: ++ 0+ x ++ ++/(?<=(?=(?<=a)))b/ ++ ab ++ 0: b ++ + # End of testinput1 +diff --git a/testdata/testoutput2 b/testdata/testoutput2 +index 950095f..6405e26 100644 +--- a/testdata/testoutput2 ++++ b/testdata/testoutput2 +@@ -16948,6 +16948,10 @@ Failed: error 187 at offset 15: lookbehind assertion is too long + /(X{65535})(?<=\1{32770})/ + Failed: error 187 at offset 10: lookbehind assertion is too long + ++/(?<=(?=.(?<=x)))/ ++ ab\=ph ++No match ++ + # End of testinput2 + Error -70: PCRE2_ERROR_BADDATA (unknown error number) + Error -62: bad serialized data +-- +2.20.1 + diff --git a/pcre2-10.33-Test-a-regression-in-a-lookbehind-after-a-condition.patch b/pcre2-10.33-Test-a-regression-in-a-lookbehind-after-a-condition.patch deleted file mode 100644 index b5ebbbd..0000000 --- a/pcre2-10.33-Test-a-regression-in-a-lookbehind-after-a-condition.patch +++ /dev/null @@ -1,58 +0,0 @@ -From 134f44d6debd4ccf5510488f78bfc0f7fe850eff Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Petr=20P=C3=ADsa=C5=99?= -Date: Mon, 26 Aug 2019 08:42:47 +0200 -Subject: [PATCH] Test a regression in a lookbehind after a condition -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -The regression is caused with this upstream commit: - -commit d70442f2c962ca816b8d03504a07e618c271a9fe -Author: ph10 -Date: Tue Jul 16 15:06:21 2019 +0000 - - Fix lookbehind within lookahead within lookbehind misbehaviour bug. - - git-svn-id: svn://vcs.exim.org/pcre2/code/trunk@1133 6239d852-aaf2-0410-a92c-79f79f948069 - -https://bugs.exim.org/show_bug.cgi?id=2433 -https://bugzilla.redhat.com/show_bug.cgi?id=1743863 -Signed-off-by: Petr Písař ---- - testdata/testinput2 | 3 +++ - testdata/testoutput2 | 6 ++++++ - 2 files changed, 9 insertions(+) - -diff --git a/testdata/testinput2 b/testdata/testinput2 -index 9ac8646..2dc99da 100644 ---- a/testdata/testinput2 -+++ b/testdata/testinput2 -@@ -5605,4 +5605,7 @@ a)"xI - /\A\s*((?:[^`]{28500}){4}|a)/I - a - -+/^(?a)(?()b)((?<=b).*)$/ -+abc -+ - # End of testinput2 -diff --git a/testdata/testoutput2 b/testdata/testoutput2 -index bcc1aae..3875e1e 100644 ---- a/testdata/testoutput2 -+++ b/testdata/testoutput2 -@@ -16975,6 +16975,12 @@ Subject length lower bound = 1 - 0: a - 1: a - -+/^(?a)(?()b)((?<=b).*)$/ -+abc -+ 0: abc -+ 1: a -+ 2: c -+ - # End of testinput2 - Error -70: PCRE2_ERROR_BADDATA (unknown error number) - Error -62: bad serialized data --- -2.21.0 - diff --git a/pcre2.spec b/pcre2.spec index 3dcfe0b..3887c2b 100644 --- a/pcre2.spec +++ b/pcre2.spec @@ -9,7 +9,7 @@ #%%global rcversion RC1 Name: pcre2 Version: 10.33 -Release: %{?rcversion:0.}12%{?rcversion:.%rcversion}%{?dist} +Release: %{?rcversion:0.}13%{?rcversion:.%rcversion}%{?dist} %global myversion %{version}%{?rcversion:-%rcversion} Summary: Perl-compatible regular expression library # the library: BSD with exceptions @@ -79,14 +79,21 @@ Patch9: pcre2-10.33-Check-for-integer-overflow-when-computing-lookbehind.pat # 2/2 Fix an integer overflow when checking a lookbehind length, # in upstream after 10.33 Patch10: pcre2-10.33-Additional-overflow-test.patch +# 1/2 Fix a mismatch with a lookbehind within a lookahead within a lookbehind, +# upstream bug #2412, in upstream after 10.33 +Patch11: pcre2-10.33-Fix-lookbehind-within-lookahead-within-lookbehind-mi.patch +# 2/2 Fix a mismatch with a lookbehind within a lookahead within a lookbehind, +# upstream bug #2412, in upstream after 10.33 +Patch12: pcre2-10.33-Fix-bug-in-recent-patch-for-lookbehinds-within-looka.patch # Fix an incorrect computation of a group length when a branch exceeds 65535, # upstream bug #2428, in upstream after 10.33 -Patch11: pcre2-10.33-Fix-incorrect-computation-of-group-length-when-one-b.patch +Patch13: pcre2-10.33-Fix-incorrect-computation-of-group-length-when-one-b.patch # Fix reporting rightmost consulted characters, in upstream after 10.33 -Patch12: pcre2-10.33-Fix-allusedtext-bug-rightmost-consulted-character-in.patch -# Test a regression in a lookbehind after a condition, bug #1743863, -# upstream bug #2433, not in the upstream -Patch13: pcre2-10.33-Test-a-regression-in-a-lookbehind-after-a-condition.patch +Patch14: pcre2-10.33-Fix-allusedtext-bug-rightmost-consulted-character-in.patch +# Fix a mismatch with a lookbehind after a condition, bug #1743863, +# upstream bug #2433, in upstream after 10.33, fixes a bug introduced in +# Fix-lookbehind-within-lookahead-within-lookbehind-mi.patch +Patch15: pcre2-10.33-Fix-bug-introduced-in-commit-1133.-Lookbehinds-that-.patch BuildRequires: autoconf BuildRequires: automake BuildRequires: coreutils @@ -178,6 +185,8 @@ Utilities demonstrating PCRE2 capabilities like pcre2grep or pcre2test. %patch11 -p1 %patch12 -p1 %patch13 -p1 +%patch14 -p1 +%patch15 -p1 # Because of multilib patch libtoolize --copy --force autoreconf -vif @@ -276,6 +285,11 @@ make %{?_smp_mflags} check VERBOSE=yes %{_mandir}/man1/pcre2test.* %changelog +* Tue Aug 27 2019 Petr Pisar - 10.33-13 +- Readd a fix for a mismatch with a lookbehind within a lookahead within + a lookbehind and fix the regression in matching a lookbehind after + a condition (bug #1743863) + * Mon Aug 26 2019 Petr Pisar - 10.33-12 - Revert a fix for a mismatch with a lookbehind within a lookahead within a lookbehind (bug #1743863)