59 lines
1.5 KiB
Diff
59 lines
1.5 KiB
Diff
Date: Thu, 18 Feb 2021 09:46:08 +0000
|
|
Subject: [PATCH] Fix \K within recursion bug in interpreter.
|
|
|
|
Conflict:delete Changelog
|
|
Reference:https://github.com/PhilipHazel/pcre2/commit/2c4d3942e4dd0dbbfccc43b9cb28d8258afaaca4
|
|
|
|
---
|
|
src/pcre2_match.c | 4 +++-
|
|
testdata/testinput1 | 3 +++
|
|
testdata/testoutput1 | 4 ++++
|
|
3 files changed, 10 insertions(+), 1 deletion(-)
|
|
|
|
diff --git a/src/pcre2_match.c b/src/pcre2_match.c
|
|
index e3f78c2..7d9cad0 100644
|
|
--- a/src/pcre2_match.c
|
|
+++ b/src/pcre2_match.c
|
|
@@ -818,10 +818,12 @@ fprintf(stderr, "++ op=%d\n", *Fecode);
|
|
|
|
/* N is now the frame of the recursion; the previous frame is at the
|
|
OP_RECURSE position. Go back there, copying the current subject position
|
|
- and mark, and move on past the OP_RECURSE. */
|
|
+ and mark, and the start_match position (\K might have changed it), and
|
|
+ then move on past the OP_RECURSE. */
|
|
|
|
P->eptr = Feptr;
|
|
P->mark = Fmark;
|
|
+ P->start_match = Fstart_match;
|
|
F = P;
|
|
Fecode += 1 + LINK_SIZE;
|
|
continue;
|
|
diff --git a/testdata/testinput1 b/testdata/testinput1
|
|
index 8409791..ae1e17e 100644
|
|
--- a/testdata/testinput1
|
|
+++ b/testdata/testinput1
|
|
@@ -6436,4 +6436,7 @@ ef) x/x,mark
|
|
/a{65536/
|
|
>a{65536<
|
|
|
|
+/a\K.(?0)*/
|
|
+ abac
|
|
+
|
|
# End of testinput1
|
|
diff --git a/testdata/testoutput1 b/testdata/testoutput1
|
|
index 666ae8c..a65eb0e 100644
|
|
--- a/testdata/testoutput1
|
|
+++ b/testdata/testoutput1
|
|
@@ -10198,4 +10198,8 @@ No match
|
|
>a{65536<
|
|
0: a{65536
|
|
|
|
+/a\K.(?0)*/
|
|
+ abac
|
|
+ 0: c
|
|
+
|
|
# End of testinput1
|
|
--
|
|
2.27.0
|
|
|