From: Marcus Boerger Date: Mon, 10 Nov 2003 21:03:04 +0000 (+0000) Subject: Bugfix #26010 (Bug on get_object_vars() function) X-Git-Tag: php-5.0.0b3RC1~725 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=7cc93e121b6fca38200a26645d9410167d3e2b06;p=php Bugfix #26010 (Bug on get_object_vars() function) --- diff --git a/Zend/zend_builtin_functions.c b/Zend/zend_builtin_functions.c index 30e4b63d68..d4839a7168 100644 --- a/Zend/zend_builtin_functions.c +++ b/Zend/zend_builtin_functions.c @@ -691,7 +691,12 @@ ZEND_FUNCTION(get_class_vars) ZEND_FUNCTION(get_object_vars) { zval **obj; - zval *tmp; + zval **value; + HashTable *properties; + HashPosition pos; + char *key; + uint key_len; + ulong num_index; if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &obj) == FAILURE) { ZEND_WRONG_PARAM_COUNT(); @@ -705,8 +710,16 @@ ZEND_FUNCTION(get_object_vars) } array_init(return_value); - zend_hash_copy(return_value->value.ht, Z_OBJ_HT_PP(obj)->get_properties(*obj TSRMLS_CC), - (copy_ctor_func_t) zval_add_ref, (void *) &tmp, sizeof(zval *)); + + properties = Z_OBJ_HT_PP(obj)->get_properties(*obj TSRMLS_CC); + zend_hash_internal_pointer_reset_ex(properties, &pos); + + while (zend_hash_get_current_data_ex(properties, (void **) &value, &pos) == SUCCESS) { + if (zend_hash_get_current_key_ex(properties, &key, &key_len, &num_index, 0, &pos) == HASH_KEY_IS_STRING && key[0]) { + add_assoc_zval_ex(return_value, key, key_len, *value); + } + zend_hash_move_forward_ex(properties, &pos); + } } /* }}} */