44 lines
1.7 KiB
Diff
44 lines
1.7 KiB
Diff
From 936fef2a4480b21f5c43b207181097736fb311e3 Mon Sep 17 00:00:00 2001
|
|
From: Zoltan Herczeg <hzmester@freemail.hu>
|
|
Date: Wed, 22 Nov 2023 11:50:38 +0000
|
|
Subject: [PATCH] Fix backref iterators when PCRE2_MATCH_UNSET_BACKREF is set
|
|
in JIT
|
|
|
|
---
|
|
src/pcre2_jit_compile.c | 4 +++-
|
|
src/pcre2_jit_test.c | 1 +
|
|
2 files changed, 4 insertions(+), 1 deletion(-)
|
|
|
|
diff --git a/src/pcre2_jit_compile.c b/src/pcre2_jit_compile.c
|
|
index 8d64e1c..8110d8c 100644
|
|
--- a/src/pcre2_jit_compile.c
|
|
+++ b/src/pcre2_jit_compile.c
|
|
@@ -9539,9 +9539,11 @@ if (!minimize)
|
|
if (ref)
|
|
OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_SP), OVECTOR(offset));
|
|
OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), STACK(0), SLJIT_IMM, 0);
|
|
+
|
|
if (ref)
|
|
{
|
|
- add_jump(compiler, &backtrack->topbacktracks, CMP(SLJIT_EQUAL, TMP1, 0, SLJIT_MEM1(SLJIT_SP), OVECTOR(1)));
|
|
+ if (!common->unset_backref)
|
|
+ add_jump(compiler, &backtrack->topbacktracks, CMP(SLJIT_EQUAL, TMP1, 0, SLJIT_MEM1(SLJIT_SP), OVECTOR(1)));
|
|
zerolength = CMP(SLJIT_EQUAL, TMP1, 0, SLJIT_MEM1(SLJIT_SP), OVECTOR(offset + 1));
|
|
}
|
|
else
|
|
diff --git a/src/pcre2_jit_test.c b/src/pcre2_jit_test.c
|
|
index b27cec7..8bff3dc 100644
|
|
--- a/src/pcre2_jit_test.c
|
|
+++ b/src/pcre2_jit_test.c
|
|
@@ -595,6 +595,7 @@ static struct regression_test_case regression_test_cases[] = {
|
|
{ CMU | PCRE2_DUPNAMES, A, 0, 0, "(?:(?<A>AA)|(?<A>BB))\\k<A>{1,3}M", "aaaaaaaabbbbaabbbbm" },
|
|
{ CMU | PCRE2_DUPNAMES, A, 0, 0, "(?:(?<A>AA)|(?<A>BB))\\k<A>{0,3}?M", "aaaaaabbbbbbaabbbbbbbbbbm" },
|
|
{ CMU | PCRE2_DUPNAMES, A, 0, 0, "(?:(?<A>AA)|(?<A>BB))\\k<A>{2,3}?", "aaaabbbbaaaabbbbbbbbbb" },
|
|
+ { MU | PCRE2_MATCH_UNSET_BACKREF, A, 0, 0, "(a)|\\1+c", "xxc" },
|
|
|
|
/* Assertions. */
|
|
{ MU, A, 0, 0, "(?=xx|yy|zz)\\w{4}", "abczzdefg" },
|
|
--
|
|
2.33.0
|
|
|