From: Nuno Lopes Date: Sat, 8 Mar 2008 13:01:59 +0000 (+0000) Subject: fix bug #44214: crash with preg_replace_callback and global variables X-Git-Tag: BEFORE_NEW_PARAMETER_PARSE~664 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=634fef42d64ceb435e15c6a08139aab3bf7403b8;p=php fix bug #44214: crash with preg_replace_callback and global variables --- diff --git a/ext/pcre/php_pcre.c b/ext/pcre/php_pcre.c index 512c88da71..5a32bd0d81 100644 --- a/ext/pcre/php_pcre.c +++ b/ext/pcre/php_pcre.c @@ -841,8 +841,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; } diff --git a/ext/pcre/tests/bug44214.phpt b/ext/pcre/tests/bug44214.phpt new file mode 100644 index 0000000000..90e4c86453 --- /dev/null +++ b/ext/pcre/tests/bug44214.phpt @@ -0,0 +1,31 @@ +--TEST-- +Bug #44214 (crash with preg_replace_callback() and global variable) +--FILE-- + +--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" + } +} diff --git a/ext/pcre/tests/bug44214_2.phpt b/ext/pcre/tests/bug44214_2.phpt new file mode 100644 index 0000000000..d78846cc83 --- /dev/null +++ b/ext/pcre/tests/bug44214_2.phpt @@ -0,0 +1,25 @@ +--TEST-- +Bug #44214-2 (crash with preg_replace_callback() and global variable) +--FILE-- + +--EXPECT-- +string(31) "xxx bbb ccc ddd eee ccc xxx bbb" +array(2) { + [0]=> + string(3) "aaa" + [1]=> + string(3) "aaa" +}