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.c39
1 files changed, 22 insertions, 17 deletions
diff --git a/ext/standard/array.c b/ext/standard/array.c
index f40160d3bd..ce4c4d5939 100644
--- a/ext/standard/array.c
+++ b/ext/standard/array.c
@@ -498,13 +498,14 @@ static int php_array_natural_general_compare(const void *a, const void *b, int f
{
Bucket *f = (Bucket *) a;
Bucket *s = (Bucket *) b;
- zend_string *str1 = zval_get_string(&f->val);
- zend_string *str2 = zval_get_string(&s->val);
+ zend_string *tmp_str1, *tmp_str2;
+ zend_string *str1 = zval_get_tmp_string(&f->val, &tmp_str1);
+ zend_string *str2 = zval_get_tmp_string(&s->val, &tmp_str2);
int result = strnatcmp_ex(ZSTR_VAL(str1), ZSTR_LEN(str1), ZSTR_VAL(str2), ZSTR_LEN(str2), fold_case);
- zend_string_release(str1);
- zend_string_release(str2);
+ zend_tmp_string_release(tmp_str1);
+ zend_tmp_string_release(tmp_str2);
return result;
}
/* }}} */
@@ -2713,9 +2714,10 @@ PHP_FUNCTION(array_fill_keys)
if (Z_TYPE_P(entry) == IS_LONG) {
zend_hash_index_update(Z_ARRVAL_P(return_value), Z_LVAL_P(entry), val);
} else {
- zend_string *key = zval_get_string(entry);
+ zend_string *tmp_key;
+ zend_string *key = zval_get_tmp_string(entry, &tmp_key);
zend_symtable_update(Z_ARRVAL_P(return_value), key, val);
- zend_string_release(key);
+ zend_tmp_string_release(tmp_key);
}
} ZEND_HASH_FOREACH_END();
}
@@ -4203,9 +4205,10 @@ PHP_FUNCTION(array_column)
} else if (Z_TYPE_P(zkeyval) == IS_LONG) {
add_index_zval(return_value, Z_LVAL_P(zkeyval), zcolval);
} else if (Z_TYPE_P(zkeyval) == IS_OBJECT) {
- zend_string *key = zval_get_string(zkeyval);
+ zend_string *tmp_key;
+ zend_string *key = zval_get_tmp_string(zkeyval, &tmp_key);
zend_symtable_update(Z_ARRVAL_P(return_value), key, zcolval);
- zend_string_release(key);
+ zend_tmp_string_release(tmp_key);
} else {
add_next_index_zval(return_value, zcolval);
}
@@ -4483,9 +4486,10 @@ PHP_FUNCTION(array_unique)
if (Z_TYPE_P(val) == IS_STRING) {
retval = zend_hash_add_empty_element(&seen, Z_STR_P(val));
} else {
- zend_string *str_val = zval_get_string(val);
+ zend_string *tmp_str_val;
+ zend_string *str_val = zval_get_tmp_string(val, &tmp_str_val);
retval = zend_hash_add_empty_element(&seen, str_val);
- zend_string_release(str_val);
+ zend_tmp_string_release(tmp_str_val);
}
if (retval) {
@@ -5367,7 +5371,7 @@ PHP_FUNCTION(array_diff)
uint32_t num;
HashTable exclude;
zval *value;
- zend_string *str, *key;
+ zend_string *str, *tmp_str, *key;
zend_long idx;
zval dummy;
@@ -5405,16 +5409,16 @@ PHP_FUNCTION(array_diff)
zend_hash_init(&exclude, num, NULL, NULL, 0);
for (i = 1; i < argc; i++) {
ZEND_HASH_FOREACH_VAL_IND(Z_ARRVAL(args[i]), value) {
- str = zval_get_string(value);
+ str = zval_get_tmp_string(value, &tmp_str);
zend_hash_add(&exclude, str, &dummy);
- zend_string_release(str);
+ zend_tmp_string_release(tmp_str);
} ZEND_HASH_FOREACH_END();
}
/* copy all elements of first array that are not in exclude set */
array_init_size(return_value, zend_hash_num_elements(Z_ARRVAL(args[0])));
ZEND_HASH_FOREACH_KEY_VAL_IND(Z_ARRVAL(args[0]), idx, key, value) {
- str = zval_get_string(value);
+ str = zval_get_tmp_string(value, &tmp_str);
if (!zend_hash_exists(&exclude, str)) {
if (key) {
value = zend_hash_add_new(Z_ARRVAL_P(return_value), key, value);
@@ -5423,7 +5427,7 @@ PHP_FUNCTION(array_diff)
}
zval_add_ref(value);
}
- zend_string_release(str);
+ zend_tmp_string_release(tmp_str);
} ZEND_HASH_FOREACH_END();
zend_hash_destroy(&exclude);
@@ -6316,10 +6320,11 @@ PHP_FUNCTION(array_combine)
entry_values = zend_hash_index_update(Z_ARRVAL_P(return_value),
Z_LVAL_P(entry_keys), entry_values);
} else {
- zend_string *key = zval_get_string(entry_keys);
+ zend_string *tmp_key;
+ zend_string *key = zval_get_tmp_string(entry_keys, &tmp_key);
entry_values = zend_symtable_update(Z_ARRVAL_P(return_value),
key, entry_values);
- zend_string_release(key);
+ zend_tmp_string_release(tmp_key);
}
zval_add_ref(entry_values);
pos_values++;