diff options
author | Nikita Popov <nikita.ppv@gmail.com> | 2017-02-02 18:33:26 +0100 |
---|---|---|
committer | Nikita Popov <nikita.ppv@gmail.com> | 2017-02-02 18:33:42 +0100 |
commit | e81f30ad1d003c5250b1025c963ed0a178d4c51a (patch) | |
tree | 49d37d3e8cb1b17e1f562bd1b13fa36ef66d2982 /Zend/zend_builtin_functions.c | |
parent | 2d1955796ea00ce8f718502d583394ad0d05d266 (diff) | |
parent | dd9cf23457e21d2bda29dc92d437b9dbd14027b2 (diff) | |
download | php-git-e81f30ad1d003c5250b1025c963ed0a178d4c51a.tar.gz |
Merge branch 'PHP-7.0' into PHP-7.1
Diffstat (limited to 'Zend/zend_builtin_functions.c')
-rw-r--r-- | Zend/zend_builtin_functions.c | 16 |
1 files changed, 14 insertions, 2 deletions
diff --git a/Zend/zend_builtin_functions.c b/Zend/zend_builtin_functions.c index 6f333cb041..12f9f29636 100644 --- a/Zend/zend_builtin_functions.c +++ b/Zend/zend_builtin_functions.c @@ -1223,6 +1223,8 @@ ZEND_FUNCTION(get_object_vars) HashTable *properties; zend_string *key; zend_object *zobj; + zend_ulong index; + zend_bool fast_copy = 0; ZEND_PARSE_PARAMETERS_START(1, 1) Z_PARAM_OBJECT(obj) @@ -1241,7 +1243,17 @@ ZEND_FUNCTION(get_object_vars) zobj = Z_OBJ_P(obj); if (!zobj->ce->default_properties_count && properties == zobj->properties && !ZEND_HASH_GET_APPLY_COUNT(properties)) { - /* fast copy */ + fast_copy = 1; + /* Check if the object has a numeric property, See Bug 73998 */ + ZEND_HASH_FOREACH_STR_KEY(properties, key) { + if (key && ZEND_HANDLE_NUMERIC(key, index)) { + fast_copy = 0; + break; + } + } ZEND_HASH_FOREACH_END(); + } + + if (fast_copy) { if (EXPECTED(zobj->handlers == &std_object_handlers)) { if (EXPECTED(!(GC_FLAGS(properties) & IS_ARRAY_IMMUTABLE))) { GC_REFCOUNT(properties)++; @@ -1267,7 +1279,7 @@ ZEND_FUNCTION(get_object_vars) zend_unmangle_property_name_ex(key, &class_name, &prop_name, &prop_len); zend_hash_str_add_new(Z_ARRVAL_P(return_value), prop_name, prop_len, value); } else { - zend_hash_add_new(Z_ARRVAL_P(return_value), key, value); + zend_symbtable_add_new(Z_ARRVAL_P(return_value), key, value); } } } |