Fix \Q\E quantification bug.
This commit is contained in:
parent
a98121a212
commit
f77339a3ca
|
@ -218,6 +218,10 @@ followed by a caseful back reference, could lose the caselessness of the first
|
||||||
repeated back reference (example: /(Z)(a)\2{1,2}?(?-i)\1X/i should match ZaAAZX
|
repeated back reference (example: /(Z)(a)\2{1,2}?(?-i)\1X/i should match ZaAAZX
|
||||||
but didn't).
|
but didn't).
|
||||||
|
|
||||||
|
35. If \Q was preceded by a quantified item, and the following \E was followed
|
||||||
|
by '?' or '+', and there was at least one literal character between them, an
|
||||||
|
internal error "unexpected repeat" occurred (example: /.+\QX\E+/).
|
||||||
|
|
||||||
|
|
||||||
Version 10.22 29-July-2016
|
Version 10.22 29-July-2016
|
||||||
--------------------------
|
--------------------------
|
||||||
|
|
|
@ -2327,6 +2327,7 @@ while (ptr < ptrend)
|
||||||
parsed_pattern = manage_callouts(thisptr, &previous_callout, options,
|
parsed_pattern = manage_callouts(thisptr, &previous_callout, options,
|
||||||
parsed_pattern, cb);
|
parsed_pattern, cb);
|
||||||
PARSED_LITERAL(c, parsed_pattern);
|
PARSED_LITERAL(c, parsed_pattern);
|
||||||
|
meta_quantifier = 0;
|
||||||
}
|
}
|
||||||
continue; /* Next character */
|
continue; /* Next character */
|
||||||
}
|
}
|
||||||
|
@ -2405,10 +2406,10 @@ while (ptr < ptrend)
|
||||||
continue; /* Next character in pattern */
|
continue; /* Next character in pattern */
|
||||||
}
|
}
|
||||||
|
|
||||||
/* At the point we must process everything that must not change the
|
/* Not a verb name character. At this point we must process everything that
|
||||||
qualification state. This is mainly comments, but we handle \Q and \E here as
|
must not change the quantification state. This is mainly comments, but we
|
||||||
well, so that an item such as A\Q\E+ is treated as A+, as in Perl. An
|
handle \Q and \E here as well, so that an item such as A\Q\E+ is treated as
|
||||||
isolated \E is ignored. */
|
A+, as in Perl. An isolated \E is ignored. */
|
||||||
|
|
||||||
if (c == CHAR_BACKSLASH && ptr < ptrend)
|
if (c == CHAR_BACKSLASH && ptr < ptrend)
|
||||||
{
|
{
|
||||||
|
|
|
@ -4923,12 +4923,16 @@ a)"xI
|
||||||
%(*:(:(svvvvvvvvvv:]*[ Z!*;[]*[^[]*!^[+.+{{2,7}' _\\\\\\\\\\\\\)?.:.. *w////\\\Q\\\\\\\\\\\\\\\T\\\\\+/?/////'+\\\EEE?/////'+/*+/[^K]?]//(w)%never_backslash_c,alt_verbnames,auto_callout
|
%(*:(:(svvvvvvvvvv:]*[ Z!*;[]*[^[]*!^[+.+{{2,7}' _\\\\\\\\\\\\\)?.:.. *w////\\\Q\\\\\\\\\\\\\\\T\\\\\+/?/////'+\\\EEE?/////'+/*+/[^K]?]//(w)%never_backslash_c,alt_verbnames,auto_callout
|
||||||
|
|
||||||
/./newline=crlf
|
/./newline=crlf
|
||||||
\=ph
|
\=ph
|
||||||
|
|
||||||
/(\x0e00\000000\xc)/replace=\P,substitute_extended
|
/(\x0e00\000000\xc)/replace=\P,substitute_extended
|
||||||
\x0e00\000000\xc
|
\x0e00\000000\xc
|
||||||
|
|
||||||
//replace=0
|
//replace=0
|
||||||
\=offset=7
|
\=offset=7
|
||||||
|
|
||||||
|
".+\QX\E+"B,no_auto_possess
|
||||||
|
|
||||||
|
".+\QX\E+"B,auto_callout,no_auto_possess
|
||||||
|
|
||||||
# End of testinput2
|
# End of testinput2
|
||||||
|
|
|
@ -15375,17 +15375,38 @@ Failed: error 109 at offset 6: quantifier does not follow a repeatable item
|
||||||
%(*:(:(svvvvvvvvvv:]*[ Z!*;[]*[^[]*!^[+.+{{2,7}' _\\\\\\\\\\\\\)?.:.. *w////\\\Q\\\\\\\\\\\\\\\T\\\\\+/?/////'+\\\EEE?/////'+/*+/[^K]?]//(w)%never_backslash_c,alt_verbnames,auto_callout
|
%(*:(:(svvvvvvvvvv:]*[ Z!*;[]*[^[]*!^[+.+{{2,7}' _\\\\\\\\\\\\\)?.:.. *w////\\\Q\\\\\\\\\\\\\\\T\\\\\+/?/////'+\\\EEE?/////'+/*+/[^K]?]//(w)%never_backslash_c,alt_verbnames,auto_callout
|
||||||
|
|
||||||
/./newline=crlf
|
/./newline=crlf
|
||||||
\=ph
|
\=ph
|
||||||
No match
|
No match
|
||||||
|
|
||||||
/(\x0e00\000000\xc)/replace=\P,substitute_extended
|
/(\x0e00\000000\xc)/replace=\P,substitute_extended
|
||||||
\x0e00\000000\xc
|
\x0e00\000000\xc
|
||||||
Failed: error -57 at offset 2 in replacement: bad escape sequence in replacement string
|
Failed: error -57 at offset 2 in replacement: bad escape sequence in replacement string
|
||||||
|
|
||||||
//replace=0
|
//replace=0
|
||||||
\=offset=7
|
\=offset=7
|
||||||
Failed: error -33: bad offset value
|
Failed: error -33: bad offset value
|
||||||
|
|
||||||
|
".+\QX\E+"B,no_auto_possess
|
||||||
|
------------------------------------------------------------------
|
||||||
|
Bra
|
||||||
|
Any+
|
||||||
|
X+
|
||||||
|
Ket
|
||||||
|
End
|
||||||
|
------------------------------------------------------------------
|
||||||
|
|
||||||
|
".+\QX\E+"B,auto_callout,no_auto_possess
|
||||||
|
------------------------------------------------------------------
|
||||||
|
Bra
|
||||||
|
Callout 255 0 4
|
||||||
|
Any+
|
||||||
|
Callout 255 4 4
|
||||||
|
X+
|
||||||
|
Callout 255 8 0
|
||||||
|
Ket
|
||||||
|
End
|
||||||
|
------------------------------------------------------------------
|
||||||
|
|
||||||
# End of testinput2
|
# End of testinput2
|
||||||
Error -63: PCRE2_ERROR_BADDATA (unknown error number)
|
Error -63: PCRE2_ERROR_BADDATA (unknown error number)
|
||||||
Error -62: bad serialized data
|
Error -62: bad serialized data
|
||||||
|
|
Loading…
Reference in New Issue