Fix incorrect first matching character when a backreference with zero minimum repeat starts a pattern
This commit is contained in:
parent
347d7363ce
commit
f4e05051d1
@ -0,0 +1,91 @@
|
|||||||
|
From b5343d4a647d25640e16bfa1f813c39a7f2059a6 Mon Sep 17 00:00:00 2001
|
||||||
|
From: ph10 <ph10@6239d852-aaf2-0410-a92c-79f79f948069>
|
||||||
|
Date: Tue, 12 Dec 2017 15:01:51 +0000
|
||||||
|
Subject: [PATCH] Fix incorrect first matching character when a backreference
|
||||||
|
with zero minimum repeat starts a pattern (possibly after assertions).
|
||||||
|
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@888 6239d852-aaf2-0410-a92c-79f79f948069
|
||||||
|
|
||||||
|
Petr Písař: Ported to 10.30.
|
||||||
|
---
|
||||||
|
src/pcre2_compile.c | 2 +-
|
||||||
|
testdata/testinput2 | 10 ++++++++++
|
||||||
|
testdata/testoutput2 | 28 ++++++++++++++++++++++++++++
|
||||||
|
|
||||||
|
diff --git a/src/pcre2_compile.c b/src/pcre2_compile.c
|
||||||
|
index 0b91d14..ad17338 100644
|
||||||
|
--- a/src/pcre2_compile.c
|
||||||
|
+++ b/src/pcre2_compile.c
|
||||||
|
@@ -7135,7 +7135,7 @@ for (;; pptr++)
|
||||||
|
later. */
|
||||||
|
|
||||||
|
HANDLE_SINGLE_REFERENCE:
|
||||||
|
- if (firstcuflags == REQ_UNSET) firstcuflags = REQ_NONE;
|
||||||
|
+ if (firstcuflags == REQ_UNSET) zerofirstcuflags = firstcuflags = REQ_NONE;
|
||||||
|
*code++ = ((options & PCRE2_CASELESS) != 0)? OP_REFI : OP_REF;
|
||||||
|
PUT2INC(code, 0, meta_arg);
|
||||||
|
|
||||||
|
diff --git a/testdata/testinput2 b/testdata/testinput2
|
||||||
|
index 022df20..695f0a4 100644
|
||||||
|
--- a/testdata/testinput2
|
||||||
|
+++ b/testdata/testinput2
|
||||||
|
@@ -5375,4 +5375,14 @@ a)"xI
|
||||||
|
|
||||||
|
/[\d-[:print:]]/
|
||||||
|
|
||||||
|
+# Perl gets the second of these wrong, giving no match.
|
||||||
|
+
|
||||||
|
+"(?<=(a))\1?b"I
|
||||||
|
+ ab
|
||||||
|
+ aaab
|
||||||
|
+
|
||||||
|
+"(?=(a))\1?b"I
|
||||||
|
+ ab
|
||||||
|
+ aaab
|
||||||
|
+
|
||||||
|
# End of testinput2
|
||||||
|
diff --git a/testdata/testoutput2 b/testdata/testoutput2
|
||||||
|
index 2d9e347..31ccfbe 100644
|
||||||
|
--- a/testdata/testoutput2
|
||||||
|
+++ b/testdata/testoutput2
|
||||||
|
@@ -16340,6 +16340,34 @@ Failed: error 150 at offset 3: invalid range in character class
|
||||||
|
/[\d-[:print:]]/
|
||||||
|
Failed: error 150 at offset 3: invalid range in character class
|
||||||
|
|
||||||
|
+# Perl gets the second of these wrong, giving no match.
|
||||||
|
+
|
||||||
|
+"(?<=(a))\1?b"I
|
||||||
|
+Capturing subpattern count = 1
|
||||||
|
+Max back reference = 1
|
||||||
|
+Max lookbehind = 1
|
||||||
|
+Last code unit = 'b'
|
||||||
|
+Subject length lower bound = 1
|
||||||
|
+ ab
|
||||||
|
+ 0: b
|
||||||
|
+ 1: a
|
||||||
|
+ aaab
|
||||||
|
+ 0: ab
|
||||||
|
+ 1: a
|
||||||
|
+
|
||||||
|
+"(?=(a))\1?b"I
|
||||||
|
+Capturing subpattern count = 1
|
||||||
|
+Max back reference = 1
|
||||||
|
+Starting code units: a
|
||||||
|
+Last code unit = 'b'
|
||||||
|
+Subject length lower bound = 1
|
||||||
|
+ ab
|
||||||
|
+ 0: ab
|
||||||
|
+ 1: a
|
||||||
|
+ aaab
|
||||||
|
+ 0: ab
|
||||||
|
+ 1: a
|
||||||
|
+
|
||||||
|
# End of testinput2
|
||||||
|
Error -65: PCRE2_ERROR_BADDATA (unknown error number)
|
||||||
|
Error -62: bad serialized data
|
||||||
|
--
|
||||||
|
2.13.6
|
||||||
|
|
@ -59,6 +59,9 @@ Patch5: pcre2-10.30-Fix-pcre2_jit_match-early-check.patch
|
|||||||
# Allow pcre2grep match counter to handle values larger than 2147483647,
|
# Allow pcre2grep match counter to handle values larger than 2147483647,
|
||||||
# upstream bug #2208, in upstream after 10.30
|
# upstream bug #2208, in upstream after 10.30
|
||||||
Patch6: pcre2-10.30-Change-pcre2grep-line-number-and-count-variables-to-.patch
|
Patch6: pcre2-10.30-Change-pcre2grep-line-number-and-count-variables-to-.patch
|
||||||
|
# Fix incorrect first matching character when a backreference with zero minimum
|
||||||
|
# repeat starts a pattern, upstream bug #2209, in upstream after 10.30
|
||||||
|
Patch7: pcre2-10.30-Fix-incorrect-first-matching-character-when-a-backre.patch
|
||||||
BuildRequires: autoconf
|
BuildRequires: autoconf
|
||||||
BuildRequires: automake
|
BuildRequires: automake
|
||||||
BuildRequires: coreutils
|
BuildRequires: coreutils
|
||||||
@ -139,6 +142,7 @@ Utilities demonstrating PCRE2 capabilities like pcre2grep or pcre2test.
|
|||||||
%patch4 -p1
|
%patch4 -p1
|
||||||
%patch5 -p1
|
%patch5 -p1
|
||||||
%patch6 -p1
|
%patch6 -p1
|
||||||
|
%patch7 -p1
|
||||||
# Because of multilib patch
|
# Because of multilib patch
|
||||||
libtoolize --copy --force
|
libtoolize --copy --force
|
||||||
autoreconf -vif
|
autoreconf -vif
|
||||||
@ -246,6 +250,8 @@ make %{?_smp_mflags} check VERBOSE=yes
|
|||||||
- Fix pcre2_jit_match() to properly check the pattern was JIT-compiled
|
- Fix pcre2_jit_match() to properly check the pattern was JIT-compiled
|
||||||
- Allow pcre2grep match counter to handle values larger than 2147483647,
|
- Allow pcre2grep match counter to handle values larger than 2147483647,
|
||||||
(upstream bug #2208)
|
(upstream bug #2208)
|
||||||
|
- Fix incorrect first matching character when a backreference with zero minimum
|
||||||
|
repeat starts a pattern (upstream bug #2209)
|
||||||
|
|
||||||
* Mon Nov 13 2017 Petr Pisar <ppisar@redhat.com> - 10.30-3
|
* Mon Nov 13 2017 Petr Pisar <ppisar@redhat.com> - 10.30-3
|
||||||
- Fix multi-line matching in pcre2grep tool (upstream bug #2187)
|
- Fix multi-line matching in pcre2grep tool (upstream bug #2187)
|
||||||
|
Loading…
Reference in New Issue
Block a user