diff options
Diffstat (limited to 'ext/standard')
-rw-r--r-- | ext/standard/array.c | 31 | ||||
-rw-r--r-- | ext/standard/info.c | 3 | ||||
-rw-r--r-- | ext/standard/string.c | 3 | ||||
-rw-r--r-- | ext/standard/var.c | 6 |
4 files changed, 16 insertions, 27 deletions
diff --git a/ext/standard/array.c b/ext/standard/array.c index ef7656bd34..f1eca09fa3 100644 --- a/ext/standard/array.c +++ b/ext/standard/array.c @@ -876,7 +876,7 @@ PHP_FUNCTION(key) php_error(E_WARNING, "Variable passed to key() is not an array or object"); RETURN_FALSE; } - switch (zend_hash_get_current_key(target_hash, &string_key, &num_key)) { + switch (zend_hash_get_current_key(target_hash, &string_key, &num_key, 1)) { case HASH_KEY_IS_STRING: RETVAL_STRING(string_key, 0); break; @@ -1015,7 +1015,7 @@ static int php_array_walk(HashTable *target_hash, zval **userdata) /* Iterate through hash */ while(zend_hash_get_current_data(target_hash, (void **)&args[0]) == SUCCESS) { /* Set up the key */ - if (zend_hash_get_current_key(target_hash, &string_key, &num_key) == HASH_KEY_IS_LONG) { + if (zend_hash_get_current_key(target_hash, &string_key, &num_key, 1) == HASH_KEY_IS_LONG) { Z_TYPE_P(key) = IS_LONG; Z_LVAL_P(key) = num_key; } else { @@ -1213,7 +1213,7 @@ PHP_FUNCTION(extract) zend_hash_internal_pointer_reset(Z_ARRVAL_PP(var_array)); while(zend_hash_get_current_data(Z_ARRVAL_PP(var_array), (void **)&entry) == SUCCESS) { - if (zend_hash_get_current_key(Z_ARRVAL_PP(var_array), &varname, &lkey) == HASH_KEY_IS_STRING) { + if (zend_hash_get_current_key(Z_ARRVAL_PP(var_array), &varname, &lkey, 0) == HASH_KEY_IS_STRING) { if (_valid_var_name(varname)) { finalname = NULL; @@ -1253,8 +1253,6 @@ PHP_FUNCTION(extract) efree(finalname); } } - - efree(varname); } zend_hash_move_forward(Z_ARRVAL_PP(var_array)); @@ -1777,11 +1775,10 @@ PHP_FUNCTION(array_slice) (*entry)->refcount++; - switch (zend_hash_get_current_key(Z_ARRVAL_PP(input), &string_key, &num_key)) { + switch (zend_hash_get_current_key(Z_ARRVAL_PP(input), &string_key, &num_key, 0)) { case HASH_KEY_IS_STRING: zend_hash_update(Z_ARRVAL_P(return_value), string_key, strlen(string_key)+1, entry, sizeof(zval *), NULL); - efree(string_key); break; case HASH_KEY_IS_LONG: @@ -1805,7 +1802,7 @@ PHPAPI void php_array_merge(HashTable *dest, HashTable *src, int recursive) zend_hash_internal_pointer_reset(src); while(zend_hash_get_current_data(src, (void **)&src_entry) == SUCCESS) { - switch (zend_hash_get_current_key(src, &string_key, &num_key)) { + switch (zend_hash_get_current_key(src, &string_key, &num_key, 0)) { case HASH_KEY_IS_STRING: if (recursive && zend_hash_find(dest, string_key, strlen(string_key) + 1, @@ -1820,7 +1817,6 @@ PHPAPI void php_array_merge(HashTable *dest, HashTable *src, int recursive) zend_hash_update(dest, string_key, strlen(string_key)+1, src_entry, sizeof(zval *), NULL); } - efree(string_key); break; case HASH_KEY_IS_LONG: @@ -1922,7 +1918,7 @@ PHP_FUNCTION(array_keys) if (add_key) { MAKE_STD_ZVAL(new_val); - switch (zend_hash_get_current_key(Z_ARRVAL_PP(input), &string_key, &num_key)) { + switch (zend_hash_get_current_key(Z_ARRVAL_PP(input), &string_key, &num_key, 1)) { case HASH_KEY_IS_STRING: Z_TYPE_P(new_val) = IS_STRING; Z_STRVAL_P(new_val) = string_key; @@ -2075,11 +2071,10 @@ PHP_FUNCTION(array_reverse) while(zend_hash_get_current_data(Z_ARRVAL_PP(input), (void **)&entry) == SUCCESS) { (*entry)->refcount++; - switch (zend_hash_get_current_key(Z_ARRVAL_PP(input), &string_key, &num_key)) { + switch (zend_hash_get_current_key(Z_ARRVAL_PP(input), &string_key, &num_key, 0)) { case HASH_KEY_IS_STRING: zend_hash_update(Z_ARRVAL_P(return_value), string_key, strlen(string_key)+1, entry, sizeof(zval *), NULL); - efree(string_key); break; case HASH_KEY_IS_LONG: @@ -2186,7 +2181,7 @@ PHP_FUNCTION(array_flip) zend_hash_internal_pointer_reset(target_hash); while (zend_hash_get_current_data(target_hash, (void **)&entry) == SUCCESS) { MAKE_STD_ZVAL(data); - switch (zend_hash_get_current_key(target_hash, &string_key, &num_key)) { + switch (zend_hash_get_current_key(target_hash, &string_key, &num_key, 1)) { case HASH_KEY_IS_STRING: Z_STRVAL_P(data) = string_key; Z_STRLEN_P(data) = strlen(string_key); @@ -2726,7 +2721,7 @@ PHP_FUNCTION(array_rand) /* We can't use zend_hash_index_find() because the array may have string keys or gaps. */ zend_hash_internal_pointer_reset(Z_ARRVAL_PP(input)); - while (num_req_val && (key_type = zend_hash_get_current_key(Z_ARRVAL_PP(input), &string_key, &num_key)) != HASH_KEY_NON_EXISTANT) { + while (num_req_val && (key_type = zend_hash_get_current_key(Z_ARRVAL_PP(input), &string_key, &num_key, 0)) != HASH_KEY_NON_EXISTANT) { #ifdef HAVE_LRAND48 randval = lrand48(); @@ -2742,21 +2737,19 @@ PHP_FUNCTION(array_rand) /* If we are returning a single result, just do it. */ if (Z_TYPE_P(return_value) != IS_ARRAY) { if (key_type == HASH_KEY_IS_STRING) { - RETURN_STRING(string_key, 0); + RETURN_STRING(string_key, 1); } else { RETURN_LONG(num_key); } } else { /* Append the result to the return value. */ if (key_type == HASH_KEY_IS_STRING) - add_next_index_string(return_value, string_key, 0); + add_next_index_string(return_value, string_key, 1); else add_next_index_long(return_value, num_key); } num_req_val--; - } else if (key_type == HASH_KEY_IS_STRING) - efree(string_key); - + } num_avail--; zend_hash_move_forward(Z_ARRVAL_PP(input)); } diff --git a/ext/standard/info.c b/ext/standard/info.c index 17dedeea3c..ecd3ab0a10 100644 --- a/ext/standard/info.c +++ b/ext/standard/info.c @@ -82,10 +82,9 @@ static void php_print_gpcse_array(char *name, uint name_length ELS_DC) PUTS("<TD BGCOLOR=\"" PHP_ENTRY_NAME_COLOR "\"><B>"); PUTS(name); PUTS("[\""); - switch (zend_hash_get_current_key((*data)->value.ht, &string_key, &num_key)) { + switch (zend_hash_get_current_key((*data)->value.ht, &string_key, &num_key, 0)) { case HASH_KEY_IS_STRING: PUTS(string_key); - efree(string_key); break; case HASH_KEY_IS_LONG: php_printf("%ld",num_key); diff --git a/ext/standard/string.c b/ext/standard/string.c index 486a14d6bb..c07e564ada 100644 --- a/ext/standard/string.c +++ b/ext/standard/string.c @@ -1488,12 +1488,11 @@ static void php_strtr_array(zval *return_value,char *str,int slen,HashTable *has zend_hash_internal_pointer_reset_ex(hash, &hpos); while (zend_hash_get_current_data_ex(hash, (void **)&entry, &hpos) == SUCCESS) { - switch (zend_hash_get_current_key_ex(hash, &string_key, NULL, &num_key, &hpos)) { + switch (zend_hash_get_current_key_ex(hash, &string_key, NULL, &num_key, 0, &hpos)) { case HASH_KEY_IS_STRING: len = strlen(string_key); if (len > maxlen) maxlen = len; if (len < minlen) minlen = len; - efree(string_key); break; case HASH_KEY_IS_LONG: diff --git a/ext/standard/var.c b/ext/standard/var.c index 0eb531eefb..221ce20c27 100644 --- a/ext/standard/var.c +++ b/ext/standard/var.c @@ -259,7 +259,7 @@ void php_var_serialize(pval *buf, pval **struc, HashTable *var_hash) zend_hash_internal_pointer_reset_ex(HASH_OF(retval_ptr),&pos); for (;; zend_hash_move_forward_ex(HASH_OF(retval_ptr),&pos)) { - if ((i = zend_hash_get_current_key_ex(HASH_OF(retval_ptr), &key, NULL, &index, &pos)) == HASH_KEY_NON_EXISTANT) { + if ((i = zend_hash_get_current_key_ex(HASH_OF(retval_ptr), &key, NULL, &index, 0, &pos)) == HASH_KEY_NON_EXISTANT) { break; } @@ -319,12 +319,10 @@ void php_var_serialize(pval *buf, pval **struc, HashTable *var_hash) zend_hash_internal_pointer_reset_ex(myht, &pos); for (;; zend_hash_move_forward_ex(myht, &pos)) { - if ((i = zend_hash_get_current_key_ex(myht, &key, NULL, &index, &pos)) == HASH_KEY_NON_EXISTANT) { + if ((i = zend_hash_get_current_key_ex(myht, &key, NULL, &index, 0, &pos)) == HASH_KEY_NON_EXISTANT) { break; } if (zend_hash_get_current_data_ex(myht, (void **) (&data), &pos) != SUCCESS || !data /* || ((*data) == (*struc)) */) { - if (i == HASH_KEY_IS_STRING) - efree(key); continue; } |