pcre2/pcre2-10.30-Fix-incorrect-first-matching-character-when-a-backre.patch

92 lines
2.3 KiB
Diff

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