From 634fef42d64ceb435e15c6a08139aab3bf7403b8 Mon Sep 17 00:00:00 2001 From: Nuno Lopes Date: Sat, 8 Mar 2008 13:01:59 +0000 Subject: [PATCH] fix bug #44214: crash with preg_replace_callback and global variables --- ext/pcre/php_pcre.c | 4 ++-- ext/pcre/tests/bug44214.phpt | 31 +++++++++++++++++++++++++++++++ ext/pcre/tests/bug44214_2.phpt | 25 +++++++++++++++++++++++++ 3 files changed, 58 insertions(+), 2 deletions(-) create mode 100644 ext/pcre/tests/bug44214.phpt create mode 100644 ext/pcre/tests/bug44214_2.phpt 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" +} -- 2.40.0