summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorph10 <ph10@6239d852-aaf2-0410-a92c-79f79f948069>2019-01-29 14:34:59 +0000
committerph10 <ph10@6239d852-aaf2-0410-a92c-79f79f948069>2019-01-29 14:34:59 +0000
commitbead5867ac8a234fa05e8d8aa4674d236c282f82 (patch)
tree9a1cce7f35dde997b8edc5d3723fc610d7b5b4f8
parent384089ff6fef977f77aad8fa5048fd185f978a5d (diff)
downloadpcre2-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--ChangeLog4
-rw-r--r--src/pcre2_dfa_match.c2
-rw-r--r--testdata/testinput610
-rw-r--r--testdata/testoutput614
4 files changed, 29 insertions, 1 deletions
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