Fix anchoring bug in conditionals with only one branch.
This commit is contained in:
parent
50f0de6015
commit
59c2175ed9
|
@ -174,6 +174,11 @@ not used in PCRE2.
|
|||
from distribution tarballs, owing to a typo in Makefile.am which had
|
||||
testoutput8-16-3 twice. Now fixed.
|
||||
|
||||
39. If the only branch in a conditional subpattern was anchored, the whole
|
||||
subpattern was treated as anchored, when it should not have been, since the
|
||||
assumed empty second branch cannot be anchored. Demonstrated by test patterns
|
||||
such as /(?(1)^())b/ or /(?(?=^))b/.
|
||||
|
||||
|
||||
Version 10.31 12-February-2018
|
||||
------------------------------
|
||||
|
|
|
@ -7864,10 +7864,11 @@ do {
|
|||
if (!is_anchored(scode, bracket_map, cb, atomcount, TRUE)) return FALSE;
|
||||
}
|
||||
|
||||
/* Condition */
|
||||
/* Condition. If there is no second branch, it can't be anchored. */
|
||||
|
||||
else if (op == OP_COND)
|
||||
{
|
||||
if (scode[GET(scode,1)] != OP_ALT) return FALSE;
|
||||
if (!is_anchored(scode, bracket_map, cb, atomcount, inassert))
|
||||
return FALSE;
|
||||
}
|
||||
|
|
|
@ -5459,4 +5459,19 @@ a)"xI
|
|||
|
||||
/(?x-i-i)/
|
||||
|
||||
/(?(?=^))b/I
|
||||
abc
|
||||
|
||||
/(?(?=^)|)b/I
|
||||
abc
|
||||
|
||||
/(?(?=^)|^)b/I
|
||||
bbc
|
||||
\= Expect no match
|
||||
abc
|
||||
|
||||
/(?(1)^|^())/I
|
||||
|
||||
/(?(1)^())b/I
|
||||
|
||||
# End of testinput2
|
||||
|
|
|
@ -16631,6 +16631,46 @@ Failed: error 194 at offset 3: invalid hyphen in option setting
|
|||
/(?x-i-i)/
|
||||
Failed: error 194 at offset 5: invalid hyphen in option setting
|
||||
|
||||
/(?(?=^))b/I
|
||||
Capturing subpattern count = 0
|
||||
Last code unit = 'b'
|
||||
Subject length lower bound = 1
|
||||
abc
|
||||
0: b
|
||||
|
||||
/(?(?=^)|)b/I
|
||||
Capturing subpattern count = 0
|
||||
First code unit = 'b'
|
||||
Subject length lower bound = 1
|
||||
abc
|
||||
0: b
|
||||
|
||||
/(?(?=^)|^)b/I
|
||||
Capturing subpattern count = 0
|
||||
Compile options: <none>
|
||||
Overall options: anchored
|
||||
First code unit = 'b'
|
||||
Subject length lower bound = 1
|
||||
bbc
|
||||
0: b
|
||||
\= Expect no match
|
||||
abc
|
||||
No match
|
||||
|
||||
/(?(1)^|^())/I
|
||||
Capturing subpattern count = 1
|
||||
Max back reference = 1
|
||||
May match empty string
|
||||
Compile options: <none>
|
||||
Overall options: anchored
|
||||
Subject length lower bound = 0
|
||||
|
||||
/(?(1)^())b/I
|
||||
Capturing subpattern count = 1
|
||||
Max back reference = 1
|
||||
Last code unit = 'b'
|
||||
Subject length lower bound = 1
|
||||
|
||||
# End of testinput2
|
||||
Error -70: PCRE2_ERROR_BADDATA (unknown error number)
|
||||
Error -62: bad serialized data
|
||||
|
|
Loading…
Reference in New Issue