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.
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
-------------------------------

View File

@ -2760,7 +2760,7 @@ for (;;)
/* There is also an always-true condition */
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,
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
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

14
testdata/testoutput6 vendored
View File

@ -7794,4 +7794,18 @@ No match
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