diff options
author | Dmitry Stogov <dmitry@php.net> | 2005-10-11 06:46:18 +0000 |
---|---|---|
committer | Dmitry Stogov <dmitry@php.net> | 2005-10-11 06:46:18 +0000 |
commit | 866908ca97d554cee91964695e4bc0be1f36d824 (patch) | |
tree | 4b250f696107e0effe1098dbc1a61b4ab0462a27 /ext/pcre | |
parent | 2892b13bb9108bb42921ef69f8cf1dcbd30dc9d2 (diff) | |
download | php-git-866908ca97d554cee91964695e4bc0be1f36d824.tar.gz |
Fixed bug #34790 (preg_match_all(), named capturing groups, variable assignment/return => crash)
Diffstat (limited to 'ext/pcre')
-rw-r--r-- | ext/pcre/php_pcre.c | 1 | ||||
-rwxr-xr-x | ext/pcre/tests/bug34790.phpt | 23 |
2 files changed, 24 insertions, 0 deletions
diff --git a/ext/pcre/php_pcre.c b/ext/pcre/php_pcre.c index a0846214ba..e10b6f4988 100644 --- a/ext/pcre/php_pcre.c +++ b/ext/pcre/php_pcre.c @@ -620,6 +620,7 @@ static void php_pcre_match(INTERNAL_FUNCTION_PARAMETERS, int global) if (subpat_names[i]) { zend_hash_update(Z_ARRVAL_P(subpats), subpat_names[i], strlen(subpat_names[i])+1, &match_sets[i], sizeof(zval *), NULL); + ZVAL_ADDREF(match_sets[i]); } zend_hash_next_index_insert(Z_ARRVAL_P(subpats), &match_sets[i], sizeof(zval *), NULL); } diff --git a/ext/pcre/tests/bug34790.phpt b/ext/pcre/tests/bug34790.phpt new file mode 100755 index 0000000000..c375ae5ac8 --- /dev/null +++ b/ext/pcre/tests/bug34790.phpt @@ -0,0 +1,23 @@ +--TEST-- +Bug #34790 (preg_match_all(), named capturing groups, variable assignment/return => crash) +--FILE-- +<?php +function func1(){ + $string = 'what the word and the other word the'; + preg_match_all('/(?P<word>the)/', $string, $matches); + return $matches['word']; +} +$words = func1(); +var_dump($words); +?> +--EXPECT-- +array(4) { + [0]=> + string(3) "the" + [1]=> + string(3) "the" + [2]=> + string(3) "the" + [3]=> + string(3) "the" +} |