summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorph10 <ph10@6239d852-aaf2-0410-a92c-79f79f948069>2019-08-10 11:34:50 +0000
committerph10 <ph10@6239d852-aaf2-0410-a92c-79f79f948069>2019-08-10 11:34:50 +0000
commitec098f6b898334be0674dbadc9fd67a0532fa0eb (patch)
tree692fa0381c41f3903a45a6f08ab346f049590ba5
parentc277d094e4d01ae9afad8bdd4d7537033a695a4f (diff)
downloadpcre2-ec098f6b898334be0674dbadc9fd67a0532fa0eb.tar.gz
Fix allusedtext bug, rightmost consulted character incorrect in negative
lookaheads. git-svn-id: svn://vcs.exim.org/pcre2/code/trunk@1157 6239d852-aaf2-0410-a92c-79f79f948069
-rw-r--r--ChangeLog4
-rw-r--r--src/pcre2_match.c1
-rw-r--r--testdata/testinput154
-rw-r--r--testdata/testinput22
-rw-r--r--testdata/testoutput158
-rw-r--r--testdata/testoutput22
6 files changed, 19 insertions, 2 deletions
diff --git a/ChangeLog b/ChangeLog
index 260ec79..65385a3 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -129,6 +129,10 @@ that is remembered as a minimum length), the whole group's length was
incorrectly recorded as 65535, leading to incorrect "no match" when start-up
optimizations were in force.
+29. The "rightmost consulted character" value was not always correct; in
+particular, if a pattern ended with a negative lookahead, characters that were
+inspected in that lookahead were not included.
+
Version 10.33 16-April-2019
---------------------------
diff --git a/src/pcre2_match.c b/src/pcre2_match.c
index 26fc01e..4471183 100644
--- a/src/pcre2_match.c
+++ b/src/pcre2_match.c
@@ -5971,6 +5971,7 @@ in rrc. */
#define LBL(val) case val: goto L_RM##val;
RETURN_SWITCH:
+if (Feptr > mb->last_used_ptr) mb->last_used_ptr = Feptr;
if (Frdepth == 0) return rrc; /* Exit from the top level */
F = (heapframe *)((char *)F - Fback_frame); /* Backtrack */
mb->cb->callout_flags |= PCRE2_CALLOUT_BACKTRACK; /* Note for callouts */
diff --git a/testdata/testinput15 b/testdata/testinput15
index 2cb712d..5dd6897 100644
--- a/testdata/testinput15
+++ b/testdata/testinput15
@@ -231,4 +231,8 @@
/(*LIMIT_HEAP=21)\[(a)]{60}/expand
\[a]{60}
+/b(?<!ax)(?!cx)/allusedtext
+ abc
+ abcz
+
# End of testinput15
diff --git a/testdata/testinput2 b/testdata/testinput2
index 4377f80..7b44fb0 100644
--- a/testdata/testinput2
+++ b/testdata/testinput2
@@ -4584,7 +4584,7 @@ B)x/alt_verbnames,mark
/abcd/null_context
abcd\=null_context
-\= Expect error
+\= Expect error - not allowed together
abcd\=null_context,find_limits
abcd\=allusedtext,startchar
diff --git a/testdata/testoutput15 b/testdata/testoutput15
index c51cda7..d854412 100644
--- a/testdata/testoutput15
+++ b/testdata/testoutput15
@@ -525,4 +525,12 @@ No match
\[a]{60}
Failed: error -63: heap limit exceeded
+/b(?<!ax)(?!cx)/allusedtext
+ abc
+ 0: abc
+ < >
+ abcz
+ 0: abcz
+ < >>
+
# End of testinput15
diff --git a/testdata/testoutput2 b/testdata/testoutput2
index 0fd2187..0803d9e 100644
--- a/testdata/testoutput2
+++ b/testdata/testoutput2
@@ -14803,7 +14803,7 @@ No match
/abcd/null_context
abcd\=null_context
0: abcd
-\= Expect error
+\= Expect error - not allowed together
abcd\=null_context,find_limits
** Not allowed together: find_limits null_context
abcd\=allusedtext,startchar