From: Xinchen Hui Date: Wed, 5 Mar 2014 10:17:16 +0000 (+0800) Subject: Fixed refcounted handling X-Git-Tag: POST_PHPNG_MERGE~412^2~417^2~1 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=70b788771243a13bcbdbc930137ae4fd6b446742;p=php Fixed refcounted handling --- diff --git a/ext/standard/array.c b/ext/standard/array.c index aefaef1d87..9c741ed613 100644 --- a/ext/standard/array.c +++ b/ext/standard/array.c @@ -411,6 +411,15 @@ static int php_array_natural_general_compare(const void *a, const void *b, int f fval = &f->val; sval = &s->val; + + if (Z_ISREF_P(fval)) { + fval = Z_REFVAL_P(fval); + } + + if (Z_ISREF_P(sval)) { + sval = Z_REFVAL_P(sval); + } + ZVAL_COPY_VALUE(&first, fval); ZVAL_COPY_VALUE(&second, sval); @@ -2605,20 +2614,18 @@ PHP_FUNCTION(array_column) zkeyval = zend_hash_index_find(ht, Z_LVAL_P(zkey)); } - if (zkeyval && Z_TYPE_P(zkeyval) == IS_STRING) { + if (Z_REFCOUNTED_P(zcolval)) { Z_ADDREF_P(zcolval); + } + if (zkeyval && Z_TYPE_P(zkeyval) == IS_STRING) { add_assoc_zval(return_value, Z_STRVAL_P(zkeyval), zcolval); } else if (zkeyval && Z_TYPE_P(zkeyval) == IS_LONG) { add_index_zval(return_value, Z_LVAL_P(zkeyval), zcolval); } else if (zkeyval && Z_TYPE_P(zkeyval) == IS_OBJECT) { - Z_ADDREF_P(zcolval); SEPARATE_ZVAL(zkeyval); convert_to_string(zkeyval); add_assoc_zval(return_value, Z_STRVAL_P(zkeyval), zcolval); } else { - if (Z_REFCOUNTED_P(zcolval)) { - Z_ADDREF_P(zcolval); - } add_next_index_zval(return_value, zcolval); } }