@ -969,8 +969,8 @@ static int preg_do_repl_func(zval *function, char *subject, int *offsets, char *
result_len = offsets[1] - offsets[0];
*result = estrndup(&subject[offsets[0]], result_len);
}
zval_dtor(subpats);
FREE_ZVAL(subpats);
zval_ptr_dtor(&subpats);
return result_len;
@ -0,0 +1,31 @@
--TEST--
Bug #44214 (crash with preg_replace_callback() and global variable)
--FILE--
<?php
$string = 'aaa bbb ccc ddd eee ccc aaa bbb';
$array = array();
function myCallBack( $match ) {
global $array;
$array[] = $match;
return 'xxx';
var_dump(preg_replace_callback( '`a+`', 'myCallBack', $string));
var_dump($array);
?>
--EXPECT--
string(31) "xxx bbb ccc ddd eee ccc xxx bbb"
array(2) {
[0]=>
array(1) {
string(3) "aaa"
[1]=>
@ -0,0 +1,25 @@
Bug #44214-2 (crash with preg_replace_callback() and global variable)
$array[] = $match[0];