diff options
| author | Xinchen Hui <laruence@gmail.com> | 2014-03-05 18:17:16 +0800 |
|---|---|---|
| committer | Xinchen Hui <laruence@gmail.com> | 2014-03-05 18:17:16 +0800 |
| commit | 70b788771243a13bcbdbc930137ae4fd6b446742 (patch) | |
| tree | 1331d81fa00ff81b06d471f6140152908004e949 | |
| parent | 74c2deecd8a7854e4cb12ab3e48379cde2c0b19c (diff) | |
| download | php-git-70b788771243a13bcbdbc930137ae4fd6b446742.tar.gz | |
Fixed refcounted handling
| -rw-r--r-- | ext/standard/array.c | 17 |
1 files changed, 12 insertions, 5 deletions
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); } } |
