Browse Source

MFB: fix #44214

experimental/first_unicode_implementation
Nuno Lopes 19 years ago
parent
commit
cc2e43cde1
  1. 4
      ext/pcre/php_pcre.c
  2. 31
      ext/pcre/tests/bug44214.phpt
  3. 25
      ext/pcre/tests/bug44214_2.phpt

4
ext/pcre/php_pcre.c

@ -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;
}

31
ext/pcre/tests/bug44214.phpt

@ -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) {
[0]=>
string(3) "aaa"
}
[1]=>
array(1) {
[0]=>
string(3) "aaa"
}
}

25
ext/pcre/tests/bug44214_2.phpt

@ -0,0 +1,25 @@
--TEST--
Bug #44214-2 (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[0];
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]=>
string(3) "aaa"
[1]=>
string(3) "aaa"
}
Loading…
Cancel
Save