Reworked the recursive pattern matching in the JIT compiler to follow the interpreter changes.
This commit is contained in:
parent
73735b81a3
commit
b55ef12cc1
|
@ -56,6 +56,9 @@ reference \1 precedes the group (abc). This fixes oss-fuzz issue 865.
|
||||||
pcre2test to use it to output the frame size when the "framesize" modifier is
|
pcre2test to use it to output the frame size when the "framesize" modifier is
|
||||||
given.
|
given.
|
||||||
|
|
||||||
|
7. Reworked the recursive pattern matching in the JIT compiler to follow the
|
||||||
|
interpreter changes.
|
||||||
|
|
||||||
|
|
||||||
Version 10.23 14-February-2017
|
Version 10.23 14-February-2017
|
||||||
------------------------------
|
------------------------------
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -707,7 +707,7 @@ static struct regression_test_case regression_test_cases[] = {
|
||||||
{ MU, A, 0, 0, "(?1)(((a(*ACCEPT)))b)", "axaa" },
|
{ MU, A, 0, 0, "(?1)(((a(*ACCEPT)))b)", "axaa" },
|
||||||
{ MU, A, 0, 0, "(?1)(?(DEFINE) (((ac(*ACCEPT)))b) )", "akaac" },
|
{ MU, A, 0, 0, "(?1)(?(DEFINE) (((ac(*ACCEPT)))b) )", "akaac" },
|
||||||
{ MU, A, 0, 0, "(a+)b(?1)b\\1", "abaaabaaaaa" },
|
{ MU, A, 0, 0, "(a+)b(?1)b\\1", "abaaabaaaaa" },
|
||||||
// { MU, A, 0, 0 | F_NOMATCH, "(?(DEFINE)(aa|a))(?1)ab", "aab" },
|
{ MU, A, 0, 0, "(?(DEFINE)(aa|a))(?1)ab", "aab" },
|
||||||
{ MU, A, 0, 0, "(?(DEFINE)(a\\Kb))(?1)+ababc", "abababxabababc" },
|
{ MU, A, 0, 0, "(?(DEFINE)(a\\Kb))(?1)+ababc", "abababxabababc" },
|
||||||
{ MU, A, 0, 0, "(a\\Kb)(?1)+ababc", "abababxababababc" },
|
{ MU, A, 0, 0, "(a\\Kb)(?1)+ababc", "abababxababababc" },
|
||||||
{ MU, A, 0, 0 | F_NOMATCH, "(a\\Kb)(?1)+ababc", "abababxababababxc" },
|
{ MU, A, 0, 0 | F_NOMATCH, "(a\\Kb)(?1)+ababc", "abababxababababxc" },
|
||||||
|
@ -722,7 +722,7 @@ static struct regression_test_case regression_test_cases[] = {
|
||||||
{ MU, A, 0, 0, "(?P<Name>a(?(R&Name)a|b))(?1)", "aab abb abaa" },
|
{ MU, A, 0, 0, "(?P<Name>a(?(R&Name)a|b))(?1)", "aab abb abaa" },
|
||||||
{ MU, A, 0, 0, "((?(R)a|(?1)){3})", "XaaaaaaaaaX" },
|
{ MU, A, 0, 0, "((?(R)a|(?1)){3})", "XaaaaaaaaaX" },
|
||||||
{ MU, A, 0, 0, "((?:(?(R)a|(?1))){3})", "XaaaaaaaaaX" },
|
{ MU, A, 0, 0, "((?:(?(R)a|(?1))){3})", "XaaaaaaaaaX" },
|
||||||
// { MU, A, 0, 0, "((?(R)a|(?1)){1,3})aaaaaa", "aaaaaaaaXaaaaaaaaa" },
|
{ MU, A, 0, 0, "((?(R)a|(?1)){1,3})aaaaaa", "aaaaaaaaXaaaaaaaaa" },
|
||||||
{ MU, A, 0, 0, "((?(R)a|(?1)){1,3}?)M", "aaaM" },
|
{ MU, A, 0, 0, "((?(R)a|(?1)){1,3}?)M", "aaaM" },
|
||||||
|
|
||||||
/* 16 bit specific tests. */
|
/* 16 bit specific tests. */
|
||||||
|
@ -848,7 +848,6 @@ static struct regression_test_case regression_test_cases[] = {
|
||||||
{ MU, A, 0, 0, "((a?)+)+b", "aaaaaaaaaaaa b" },
|
{ MU, A, 0, 0, "((a?)+)+b", "aaaaaaaaaaaa b" },
|
||||||
|
|
||||||
/* Deep recursion: Stack limit reached. */
|
/* Deep recursion: Stack limit reached. */
|
||||||
// { M, A, 0, 0 | F_NOMATCH, "a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?aaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaa" },
|
|
||||||
{ M, A, 0, 0 | F_NOMATCH, "a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?aaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaa" },
|
{ M, A, 0, 0 | F_NOMATCH, "a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?aaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaa" },
|
||||||
{ M, A, 0, 0 | F_NOMATCH, "(?:a+)+b", "aaaaaaaaaaaaaaaaaaaaaaaa b" },
|
{ M, A, 0, 0 | F_NOMATCH, "(?:a+)+b", "aaaaaaaaaaaaaaaaaaaaaaaa b" },
|
||||||
{ M, A, 0, 0 | F_NOMATCH, "(?:a+?)+?b", "aaaaaaaaaaaaaaaaaaaaaaaa b" },
|
{ M, A, 0, 0 | F_NOMATCH, "(?:a+?)+?b", "aaaaaaaaaaaaaaaaaaaaaaaa b" },
|
||||||
|
|
|
@ -4959,7 +4959,7 @@ a)"xI
|
||||||
\=ovector=7777777777
|
\=ovector=7777777777
|
||||||
|
|
||||||
/(?1)(A(*COMMIT)|B)D/
|
/(?1)(A(*COMMIT)|B)D/
|
||||||
BAXBAD\=no_jit
|
BAXBAD\=no_jit
|
||||||
|
|
||||||
"(?1){2}(a)"B
|
"(?1){2}(a)"B
|
||||||
|
|
||||||
|
@ -4979,27 +4979,27 @@ a)"xI
|
||||||
# update. They require backtracking into recursions.
|
# update. They require backtracking into recursions.
|
||||||
|
|
||||||
/^(.|(.)(?1)\2)$/
|
/^(.|(.)(?1)\2)$/
|
||||||
a\=no_jit
|
a
|
||||||
aba\=no_jit
|
aba
|
||||||
abcba\=no_jit
|
abcba
|
||||||
ababa\=no_jit
|
ababa
|
||||||
abcdcba\=no_jit
|
abcdcba
|
||||||
|
|
||||||
/^((.)(?1)\2|.?)$/
|
/^((.)(?1)\2|.?)$/
|
||||||
a\=no_jit
|
a
|
||||||
aba\=no_jit
|
aba
|
||||||
abba\=no_jit
|
abba
|
||||||
abcba\=no_jit
|
abcba
|
||||||
ababa\=no_jit
|
ababa
|
||||||
abccba\=no_jit
|
abccba
|
||||||
abcdcba\=no_jit
|
abcdcba
|
||||||
abcddcba\=no_jit
|
abcddcba
|
||||||
|
|
||||||
/^(.)(\1|a(?2))/
|
/^(.)(\1|a(?2))/
|
||||||
bab\=no_jit
|
bab
|
||||||
|
|
||||||
/^(.|(.)(?1)?\2)$/
|
/^(.|(.)(?1)?\2)$/
|
||||||
abcba\=no_jit
|
abcba
|
||||||
|
|
||||||
# The first of these, when run by Perl, give the mark 'aa', which is wrong.
|
# The first of these, when run by Perl, give the mark 'aa', which is wrong.
|
||||||
|
|
||||||
|
|
|
@ -15426,7 +15426,7 @@ Subject length lower bound = 11
|
||||||
** Invalid value in 'ovector=7777777777'
|
** Invalid value in 'ovector=7777777777'
|
||||||
|
|
||||||
/(?1)(A(*COMMIT)|B)D/
|
/(?1)(A(*COMMIT)|B)D/
|
||||||
BAXBAD\=no_jit
|
BAXBAD\=no_jit
|
||||||
0: BAD
|
0: BAD
|
||||||
1: A
|
1: A
|
||||||
|
|
||||||
|
@ -15484,67 +15484,67 @@ Subject length lower bound = 11
|
||||||
# update. They require backtracking into recursions.
|
# update. They require backtracking into recursions.
|
||||||
|
|
||||||
/^(.|(.)(?1)\2)$/
|
/^(.|(.)(?1)\2)$/
|
||||||
a\=no_jit
|
a
|
||||||
0: a
|
0: a
|
||||||
1: a
|
1: a
|
||||||
aba\=no_jit
|
aba
|
||||||
0: aba
|
0: aba
|
||||||
1: aba
|
1: aba
|
||||||
2: a
|
2: a
|
||||||
abcba\=no_jit
|
abcba
|
||||||
0: abcba
|
0: abcba
|
||||||
1: abcba
|
1: abcba
|
||||||
2: a
|
2: a
|
||||||
ababa\=no_jit
|
ababa
|
||||||
0: ababa
|
0: ababa
|
||||||
1: ababa
|
1: ababa
|
||||||
2: a
|
2: a
|
||||||
abcdcba\=no_jit
|
abcdcba
|
||||||
0: abcdcba
|
0: abcdcba
|
||||||
1: abcdcba
|
1: abcdcba
|
||||||
2: a
|
2: a
|
||||||
|
|
||||||
/^((.)(?1)\2|.?)$/
|
/^((.)(?1)\2|.?)$/
|
||||||
a\=no_jit
|
a
|
||||||
0: a
|
0: a
|
||||||
1: a
|
1: a
|
||||||
aba\=no_jit
|
aba
|
||||||
0: aba
|
0: aba
|
||||||
1: aba
|
1: aba
|
||||||
2: a
|
2: a
|
||||||
abba\=no_jit
|
abba
|
||||||
0: abba
|
0: abba
|
||||||
1: abba
|
1: abba
|
||||||
2: a
|
2: a
|
||||||
abcba\=no_jit
|
abcba
|
||||||
0: abcba
|
0: abcba
|
||||||
1: abcba
|
1: abcba
|
||||||
2: a
|
2: a
|
||||||
ababa\=no_jit
|
ababa
|
||||||
0: ababa
|
0: ababa
|
||||||
1: ababa
|
1: ababa
|
||||||
2: a
|
2: a
|
||||||
abccba\=no_jit
|
abccba
|
||||||
0: abccba
|
0: abccba
|
||||||
1: abccba
|
1: abccba
|
||||||
2: a
|
2: a
|
||||||
abcdcba\=no_jit
|
abcdcba
|
||||||
0: abcdcba
|
0: abcdcba
|
||||||
1: abcdcba
|
1: abcdcba
|
||||||
2: a
|
2: a
|
||||||
abcddcba\=no_jit
|
abcddcba
|
||||||
0: abcddcba
|
0: abcddcba
|
||||||
1: abcddcba
|
1: abcddcba
|
||||||
2: a
|
2: a
|
||||||
|
|
||||||
/^(.)(\1|a(?2))/
|
/^(.)(\1|a(?2))/
|
||||||
bab\=no_jit
|
bab
|
||||||
0: bab
|
0: bab
|
||||||
1: b
|
1: b
|
||||||
2: ab
|
2: ab
|
||||||
|
|
||||||
/^(.|(.)(?1)?\2)$/
|
/^(.|(.)(?1)?\2)$/
|
||||||
abcba\=no_jit
|
abcba
|
||||||
0: abcba
|
0: abcba
|
||||||
1: abcba
|
1: abcba
|
||||||
2: a
|
2: a
|
||||||
|
|
Loading…
Reference in New Issue