diff --git a/ChangeLog b/ChangeLog index 49d091f..10641ac 100644 --- a/ChangeLog +++ b/ChangeLog @@ -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 ------------------------------- diff --git a/src/pcre2_dfa_match.c b/src/pcre2_dfa_match.c index 3f7d04e..685b9b6 100644 --- a/src/pcre2_dfa_match.c +++ b/src/pcre2_dfa_match.c @@ -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 diff --git a/testdata/testinput6 b/testdata/testinput6 index 71218a3..15dfb74 100644 --- a/testdata/testinput6 +++ b/testdata/testinput6 @@ -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 diff --git a/testdata/testoutput6 b/testdata/testoutput6 index f78f600..042ca42 100644 --- a/testdata/testoutput6 +++ b/testdata/testoutput6 @@ -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