Fix bug in VERSION conditional test in DFA matching.

This commit is contained in:
Philip.Hazel 2019-01-29 14:34:59 +00:00
parent f33fc9b85c
commit 86349f8814
4 changed files with 29 additions and 1 deletions

View File

@ -114,6 +114,10 @@ the option applies only to unrecognized or malformed escape sequences.
28. Fix word boundary in JIT compiler. Patch by Mike Munday. 28. Fix word boundary in JIT compiler. Patch by Mike Munday.
29. The pcre2_dfa_match() function was incorrectly handling conditional version
tests such as (?(VERSION>=0)...) when the version test was true. Incorrect
processing or a crash could result.
Version 10.32 10-September-2018 Version 10.32 10-September-2018
------------------------------- -------------------------------

View File

@ -2760,7 +2760,7 @@ for (;;)
/* There is also an always-true condition */ /* There is also an always-true condition */
else if (condcode == OP_TRUE) else if (condcode == OP_TRUE)
{ ADD_ACTIVE(state_offset + LINK_SIZE + 2 + IMM2_SIZE, 0); } { ADD_ACTIVE(state_offset + LINK_SIZE + 2, 0); }
/* The only supported version of OP_RREF is for the value RREF_ANY, /* The only supported version of OP_RREF is for the value RREF_ANY,
which means "test if in any recursion". We can't test for specifically which means "test if in any recursion". We can't test for specifically

10
testdata/testinput6 vendored
View File

@ -4962,4 +4962,14 @@
/foobar/g /foobar/g
the foobar thing foobar again\=copy_matched_subject the foobar thing foobar again\=copy_matched_subject
/(?(VERSION>=0)^B0W)/
B0W-W0W
\= Expect no match
0
/(?(VERSION>=1000)^B0W|W0W)/
B0W-W0W
\= Expect no match
0
# End of testinput6 # End of testinput6

14
testdata/testoutput6 vendored
View File

@ -7794,4 +7794,18 @@ No match
0: foobar 0: foobar
0: foobar 0: foobar
/(?(VERSION>=0)^B0W)/
B0W-W0W
0: B0W
\= Expect no match
0
No match
/(?(VERSION>=1000)^B0W|W0W)/
B0W-W0W
0: W0W
\= Expect no match
0
No match
# End of testinput6 # End of testinput6