Fix \) in (*verb) "name" bug.
This commit is contained in:
parent
4a4326638d
commit
a7c9027ae6
|
@ -376,6 +376,10 @@ of a pattern is no longer transferred to the options that are returned by
|
||||||
PCRE2_INFO_ALLOPTIONS. In fact, this was an anachronism that should have
|
PCRE2_INFO_ALLOPTIONS. In fact, this was an anachronism that should have
|
||||||
changed when the effects of those options were all moved to compile time.
|
changed when the effects of those options were all moved to compile time.
|
||||||
|
|
||||||
|
109. An escaped closing parenthesis in the "name" part of a (*verb) when
|
||||||
|
PCRE2_ALT_VERBNAMES was set caused pcre2_compile() to malfunction. This bug
|
||||||
|
was found by the LLVM fuzzer.
|
||||||
|
|
||||||
|
|
||||||
Version 10.20 30-June-2015
|
Version 10.20 30-June-2015
|
||||||
--------------------------
|
--------------------------
|
||||||
|
|
|
@ -2978,6 +2978,7 @@ Arguments:
|
||||||
ptrptr pointer to the input pointer
|
ptrptr pointer to the input pointer
|
||||||
codeptr pointer to the compiled code pointer
|
codeptr pointer to the compiled code pointer
|
||||||
errorcodeptr pointer to the error code
|
errorcodeptr pointer to the error code
|
||||||
|
options the options bits
|
||||||
utf TRUE if processing UTF
|
utf TRUE if processing UTF
|
||||||
cb compile data block
|
cb compile data block
|
||||||
|
|
||||||
|
@ -3375,10 +3376,29 @@ for (; ptr < cb->end_pattern; ptr++)
|
||||||
{
|
{
|
||||||
if ((options & PCRE2_NO_AUTO_CAPTURE) == 0) cb->bracount++;
|
if ((options & PCRE2_NO_AUTO_CAPTURE) == 0) cb->bracount++;
|
||||||
}
|
}
|
||||||
else /* (*something) - just skip to closing ket */
|
|
||||||
|
/* (*something) - just skip to closing ket unless PCRE2_ALT_VERBNAMES is
|
||||||
|
set, in which case we have to process escapes in the string after the
|
||||||
|
name. */
|
||||||
|
|
||||||
|
else
|
||||||
{
|
{
|
||||||
ptr += 2;
|
ptr += 2;
|
||||||
while (ptr < cb->end_pattern && *ptr != CHAR_RIGHT_PARENTHESIS) ptr++;
|
while (MAX_255(*ptr) && (cb->ctypes[*ptr] & ctype_word) != 0) ptr++;
|
||||||
|
if (*ptr == CHAR_COLON)
|
||||||
|
{
|
||||||
|
ptr++;
|
||||||
|
if ((options & PCRE2_ALT_VERBNAMES) != 0)
|
||||||
|
{
|
||||||
|
if (process_verb_name(&ptr, NULL, &errorcode, options, utf, cb) < 0)
|
||||||
|
goto FAILED;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
while (ptr < cb->end_pattern && *ptr != CHAR_RIGHT_PARENTHESIS)
|
||||||
|
ptr++;
|
||||||
|
}
|
||||||
|
}
|
||||||
nest_depth--;
|
nest_depth--;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -4735,4 +4735,6 @@ a)"xI
|
||||||
/#comment
|
/#comment
|
||||||
(?-x):?/extended
|
(?-x):?/extended
|
||||||
|
|
||||||
|
/(8(*:6^\x09x\xa6l\)6!|\xd0:[^:|)\x09d\Z\d{85*m(?'(?<1!)*\W[*\xff]!!h\w]*\xbe;/alt_bsux,alt_verbnames,allow_empty_class,dollar_endonly,extended,multiline,never_utf,no_dotstar_anchor,no_start_optimize
|
||||||
|
|
||||||
# End of testinput2
|
# End of testinput2
|
||||||
|
|
|
@ -15054,4 +15054,7 @@ Subject length lower bound = 0
|
||||||
/#comment
|
/#comment
|
||||||
(?-x):?/extended
|
(?-x):?/extended
|
||||||
|
|
||||||
|
/(8(*:6^\x09x\xa6l\)6!|\xd0:[^:|)\x09d\Z\d{85*m(?'(?<1!)*\W[*\xff]!!h\w]*\xbe;/alt_bsux,alt_verbnames,allow_empty_class,dollar_endonly,extended,multiline,never_utf,no_dotstar_anchor,no_start_optimize
|
||||||
|
Failed: error 124 at offset 49: letter or underscore expected after (?< or (?'
|
||||||
|
|
||||||
# End of testinput2
|
# End of testinput2
|
||||||
|
|
Loading…
Reference in New Issue