Fix NULL defer in extended substition for \p, \P, or \X.
This commit is contained in:
parent
1622a48e70
commit
ac6a8e58cb
@ -204,6 +204,10 @@ when the newline type is CRLF.
|
||||
31. Fix a bug in pcre2test that caused a crash when a locale was set either in
|
||||
the current pattern or a previous one and a wide character was matched.
|
||||
|
||||
32. The appearance of \p, \P, or \X in a substitution string when
|
||||
PCRE2_SUBSTITUTE_EXTENDED was set caused a segmentation fault (NULL
|
||||
dereference).
|
||||
|
||||
|
||||
Version 10.22 29-July-2016
|
||||
--------------------------
|
||||
|
@ -1352,10 +1352,10 @@ entry, ptr is pointing at the character after \. On exit, it points after the
|
||||
final code unit of the escape sequence.
|
||||
|
||||
This function is also called from pcre2_substitute() to handle escape sequences
|
||||
in replacement strings. In this case, the cb argument is NULL, and only
|
||||
sequences that define a data character are recognised. The isclass argument is
|
||||
not relevant, but the options argument is the final value of the compiled
|
||||
pattern's options.
|
||||
in replacement strings. In this case, the cb argument is NULL, and in the case
|
||||
of escapes that have further processing, only sequences that define a data
|
||||
character are recognised. The isclass argument is not relevant; the options
|
||||
argument is the final value of the compiled pattern's options.
|
||||
|
||||
Arguments:
|
||||
ptrptr points to the input position pointer
|
||||
@ -1405,7 +1405,7 @@ else if ((i = escapes[c - ESCAPES_FIRST]) != 0)
|
||||
if (i > 0) c = (uint32_t)i; else /* Positive is a data character */
|
||||
{
|
||||
escape = -i; /* Else return a special escape */
|
||||
if (escape == ESC_P || escape == ESC_p || escape == ESC_X)
|
||||
if (cb != NULL && (escape == ESC_P || escape == ESC_p || escape == ESC_X))
|
||||
cb->external_flags |= PCRE2_HASBKPORX; /* Note \P, \p, or \X */
|
||||
}
|
||||
}
|
||||
|
3
testdata/testinput2
vendored
3
testdata/testinput2
vendored
@ -4925,4 +4925,7 @@ a)"xI
|
||||
/./newline=crlf
|
||||
\=ph
|
||||
|
||||
/(\x0e00\000000\xc)/replace=\P,substitute_extended
|
||||
\x0e00\000000\xc
|
||||
|
||||
# End of testinput2
|
||||
|
4
testdata/testoutput2
vendored
4
testdata/testoutput2
vendored
@ -15378,6 +15378,10 @@ Failed: error 109 at offset 6: quantifier does not follow a repeatable item
|
||||
\=ph
|
||||
No match
|
||||
|
||||
/(\x0e00\000000\xc)/replace=\P,substitute_extended
|
||||
\x0e00\000000\xc
|
||||
Failed: error -57 at offset 2 in replacement: bad escape sequence in replacement string
|
||||
|
||||
# End of testinput2
|
||||
Error -63: PCRE2_ERROR_BADDATA (unknown error number)
|
||||
Error -62: bad serialized data
|
||||
|
Loading…
Reference in New Issue
Block a user