]> granicus.if.org Git - php/commitdiff
Bugfix #26010 (Bug on get_object_vars() function)
authorMarcus Boerger <helly@php.net>
Mon, 10 Nov 2003 21:03:04 +0000 (21:03 +0000)
committerMarcus Boerger <helly@php.net>
Mon, 10 Nov 2003 21:03:04 +0000 (21:03 +0000)
Zend/zend_builtin_functions.c

index 30e4b63d684d39990ca83ebd7e995df4db2c6b9a..d4839a7168034a033543901bf205cd59c787c7db 100644 (file)
@@ -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);
+       }
 }
 /* }}} */