com php-src: Review a few more SEPARATE_ZVAL_IF_NOT_REF usages: Zend/zend_execute_API.c Zend/zend_type s.h ext/filter/filter.c
ext/filter/tests/filter_var _array_with_ref.phpt ext/mbstring/php_mbregex.c ext/session/session.c ext/spl/spl_array.c

From: Date: Thu, 09 Oct 2014 10:51:05 +0000
Subject: com php-src: Review a few more SEPARATE_ZVAL_IF_NOT_REF usages: Zend/zend_execute_API.c Zend/zend_type s.h ext/filter/filter.c
ext/filter/tests/filter_var _array_with_ref.phpt ext/mbstring/php_mbregex.c ext/session/session.c ext/spl/spl_array.c
Groups: php.cvs 
Request: Send a blank email to php-cvs+get-82209@lists.php.net to get a copy of this message
Commit: 43f1c94ddace679cac008b674ef983199a951542 Author: Nikita Popov <nikic@php.net> Thu, 9 Oct 2014 12:51:05 +0200 Parents: e919caca86d78a25d4de10d2df2e1c4357ac4408 Branches: master Link: http://git.php.net/?p=php-src.git;a=commitdiff;h=43f1c94ddace679cac008b674ef983199a951542 Log: Review a few more SEPARATE_ZVAL_IF_NOT_REF usages Changed paths: M Zend/zend_execute_API.c M Zend/zend_types.h M ext/filter/filter.c A ext/filter/tests/filter_var_array_with_ref.phpt M ext/mbstring/php_mbregex.c M ext/session/session..c M ext/spl/spl_array.c Diff: diff --git a/Zend/zend_execute_API.c b/Zend/zend_execute_API.c index f6bd9d1..cd2cc98 100644 --- a/Zend/zend_execute_API.c +++ b/Zend/zend_execute_API.c @@ -521,7 +521,7 @@ ZEND_API int zval_update_constant_ex(zval *p, zend_bool inline_change, zend_clas } else if (Z_TYPE_P(p) == IS_CONSTANT) { int refcount; - SEPARATE_ZVAL_IF_NOT_REF(p); + SEPARATE_ZVAL_NOREF(p); MARK_CONSTANT_VISITED(p); refcount = Z_REFCOUNTED_P(p) ? Z_REFCOUNT_P(p) : 1; const_value = zend_get_constant_ex(Z_STR_P(p), scope, Z_CONST_FLAGS_P(p) TSRMLS_CC); @@ -599,7 +599,7 @@ ZEND_API int zval_update_constant_ex(zval *p, zend_bool inline_change, zend_clas if (Z_REFCOUNTED_P(p)) Z_SET_REFCOUNT_P(p, refcount); } else if (Z_TYPE_P(p) == IS_CONSTANT_AST) { zval tmp; - SEPARATE_ZVAL_IF_NOT_REF(p); + SEPARATE_ZVAL_NOREF(p); zend_ast_evaluate(&tmp, Z_ASTVAL_P(p), scope TSRMLS_CC); if (inline_change) { diff --git a/Zend/zend_types.h b/Zend/zend_types.h index b7e8068..811133a 100644 --- a/Zend/zend_types.h +++ b/Zend/zend_types.h @@ -783,6 +783,7 @@ static zend_always_inline uint32_t zval_delref_p(zval* pz) { #define SEPARATE_ZVAL_NOREF(zv) do { \ zval *_zv = (zv); \ + ZEND_ASSERT(Z_TYPE_P(_zv) != IS_REFERENCE); \ if (Z_COPYABLE_P(_zv) || \ Z_IMMUTABLE_P(_zv)) { \ if (Z_REFCOUNT_P(_zv) > 1) { \ diff --git a/ext/filter/filter.c b/ext/filter/filter.c index 7ef65bc..ec3c007 100644 --- a/ext/filter/filter.c +++ b/ext/filter/filter.c @@ -491,7 +491,8 @@ static void php_zval_filter_recursive(zval *value, zend_long filter, zend_long f } ZEND_HASH_FOREACH_VAL(Z_ARRVAL_P(value), element) { - SEPARATE_ZVAL_IF_NOT_REF(element); + ZVAL_DEREF(element); + SEPARATE_ZVAL_NOREF(element); if (Z_TYPE_P(element) == IS_ARRAY) { Z_ARRVAL_P(element)->u.v.nApplyCount++; php_zval_filter_recursive(element, filter, flags, options, charset, copy TSRMLS_CC); diff --git a/ext/filter/tests/filter_var_array_with_ref.phpt b/ext/filter/tests/filter_var_array_with_ref.phpt new file mode 100644 index 0000000..cd202ed --- /dev/null +++ b/ext/filter/tests/filter_var_array_with_ref.phpt @@ -0,0 +1,23 @@ +--TEST-- +filter_var_array() on array with reference +--FILE-- +<?php + +$array = ["123foo"]; +$array2 = [&$array]; +var_dump(filter_var_array($array2, FILTER_VALIDATE_INT)); +var_dump($array); + +?> +--EXPECTF-- +array(1) { + [0]=> + &array(1) { + [0]=> + bool(false) + } +} +array(1) { + [0]=> + bool(false) +} diff --git a/ext/mbstring/php_mbregex.c b/ext/mbstring/php_mbregex.c index de0bc76..8be88c3 100644 --- a/ext/mbstring/php_mbregex.c +++ b/ext/mbstring/php_mbregex.c @@ -1343,8 +1343,7 @@ PHP_FUNCTION(mb_ereg_search_init) zval_ptr_dtor(&MBREX(search_str)); } - ZVAL_COPY(&MBREX(search_str), arg_str); - SEPARATE_ZVAL_IF_NOT_REF(&MBREX(search_str)); + ZVAL_DUP(&MBREX(search_str), arg_str); MBREX(search_pos) = 0; diff --git a/ext/session/session.c b/ext/session/session.c index 63bb00e..dae965b 100644 --- a/ext/session/session.c +++ b/ext/session/session.c @@ -2105,10 +2105,7 @@ static PHP_FUNCTION(session_unset) } IF_SESSION_VARS() { - HashTable *ht_sess_var; - - SEPARATE_ZVAL_IF_NOT_REF(&PS(http_session_vars)); - ht_sess_var = Z_ARRVAL_P(Z_REFVAL(PS(http_session_vars))); + HashTable *ht_sess_var = Z_ARRVAL_P(Z_REFVAL(PS(http_session_vars))); /* Clean $_SESSION. */ zend_hash_clean(ht_sess_var); diff --git a/ext/spl/spl_array.c b/ext/spl/spl_array.c index 211180a..8aab4c4 100644 --- a/ext/spl/spl_array.c +++ b/ext/spl/spl_array.c @@ -1144,7 +1144,7 @@ static void spl_array_it_rewind(zend_object_iterator *iter TSRMLS_DC) /* {{{ */ static void spl_array_set_array(zval *object, spl_array_object *intern, zval *array, zend_long ar_flags, int just_array TSRMLS_DC) { if (Z_TYPE_P(array) == IS_ARRAY) { - SEPARATE_ZVAL_IF_NOT_REF(array); + SEPARATE_ARRAY(array); } if (Z_TYPE_P(array) == IS_OBJECT && (Z_OBJ_HT_P(array) == &spl_handler_ArrayObject || Z_OBJ_HT_P(array) == &spl_handler_ArrayIterator)) {

« previous php.cvs (#82209) next »