diff options
author | ph10 <ph10@6239d852-aaf2-0410-a92c-79f79f948069> | 2019-01-29 14:34:59 +0000 |
---|---|---|
committer | ph10 <ph10@6239d852-aaf2-0410-a92c-79f79f948069> | 2019-01-29 14:34:59 +0000 |
commit | bead5867ac8a234fa05e8d8aa4674d236c282f82 (patch) | |
tree | 9a1cce7f35dde997b8edc5d3723fc610d7b5b4f8 | |
parent | 384089ff6fef977f77aad8fa5048fd185f978a5d (diff) | |
download | pcre2-bead5867ac8a234fa05e8d8aa4674d236c282f82.tar.gz |
Fix bug in VERSION conditional test in DFA matching.
git-svn-id: svn://vcs.exim.org/pcre2/code/trunk@1062 6239d852-aaf2-0410-a92c-79f79f948069
-rw-r--r-- | ChangeLog | 4 | ||||
-rw-r--r-- | src/pcre2_dfa_match.c | 2 | ||||
-rw-r--r-- | testdata/testinput6 | 10 | ||||
-rw-r--r-- | testdata/testoutput6 | 14 |
4 files changed, 29 insertions, 1 deletions
@@ -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 |