diff options
Diffstat (limited to 'ext/standard/array.c')
| -rw-r--r-- | ext/standard/array.c | 31 | 
1 files changed, 12 insertions, 19 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));  	}    | 
