summaryrefslogtreecommitdiff
path: root/ext/standard/array.c
diff options
context:
space:
mode:
Diffstat (limited to 'ext/standard/array.c')
-rw-r--r--ext/standard/array.c10
1 files changed, 4 insertions, 6 deletions
diff --git a/ext/standard/array.c b/ext/standard/array.c
index b05900656d..527f6a3df1 100644
--- a/ext/standard/array.c
+++ b/ext/standard/array.c
@@ -3099,17 +3099,15 @@ PHP_FUNCTION(array_column)
zkeyval = zend_hash_index_find(ht, Z_LVAL_P(zkey));
}
- if (Z_REFCOUNTED_P(zcolval)) {
- Z_ADDREF_P(zcolval);
- }
+ Z_TRY_ADDREF_P(zcolval);
if (zkeyval && Z_TYPE_P(zkeyval) == IS_STRING) {
zend_symtable_update(Z_ARRVAL_P(return_value), Z_STR_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) {
- SEPARATE_ZVAL(zkeyval);
- convert_to_string(zkeyval);
- zend_symtable_update(Z_ARRVAL_P(return_value), Z_STR_P(zkeyval), zcolval);
+ zend_string *key = zval_get_string(zkeyval);
+ zend_symtable_update(Z_ARRVAL_P(return_value), key, zcolval);
+ zend_string_release(key);
} else {
add_next_index_zval(return_value, zcolval);
}