com php-src: Merge branch 'PHP-7.1': Zend/zend_builtin_func tions.c Zend/zend_hash.h

[email protected] (Nikita Popov)
Newsgroups php.cvs
Message-ID <[email protected]>
Commit:    795a4c1bb384a7e0d56705d43e95b9bfcc3265b5
Author:    Nikita Popov <[email protected]>         Thu, 2 Feb 2017 18:35:35 +0100
Parents:   b2a4af7b58d2b06177fb4ea451056a8d9a28fbd0 e81f30ad1d003c5250b1025c963ed0a178d4c51a
Branches:  master

Link:       http://git.php.net/?p=php-src.git;a=commitdiff;h=795a4c1bb384a7e0d56705d43e95b9bfcc3265b5

Log:
Merge branch 'PHP-7.1'

Changed paths:
  MM  Zend/zend_builtin_functions.c
  MM  Zend/zend_hash.h


Diff:
diff --cc Zend/zend_builtin_functions.c
index 0f3e321,12f9f29..4ba9dc4
--- a/Zend/zend_builtin_functions.c
+++ b/Zend/zend_builtin_functions.c
@@@ -1250,45 -1264,24 +1250,41 @@@ ZEND_FUNCTION(get_object_vars
  	} else {
  		array_init_size(return_value, zend_hash_num_elements(properties));
  
 -		ZEND_HASH_FOREACH_STR_KEY_VAL_IND(properties, key, value) {
 -			if (key) {
 -				if (zend_check_property_access(zobj, key) == SUCCESS) {
 -					if (Z_ISREF_P(value) && Z_REFCOUNT_P(value) == 1) {
 -						value = Z_REFVAL_P(value);
 -					}
 -					if (Z_REFCOUNTED_P(value)) {
 -						Z_ADDREF_P(value);
 -					}
 -					if (ZSTR_VAL(key)[0] == 0) {
 -						const char *prop_name, *class_name;
 -						size_t prop_len;
 -						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_symbtable_add_new(Z_ARRVAL_P(return_value), key, value);
 -					}
 +		ZEND_HASH_FOREACH_KEY_VAL(properties, num_key, key, value) {
 +			zend_bool unmangle = 0;
 +			if (Z_TYPE_P(value) == IS_INDIRECT) {
 +				value = Z_INDIRECT_P(value);
 +				if (UNEXPECTED(Z_ISUNDEF_P(value))) {
 +					continue;
 +				}
 +
 +				ZEND_ASSERT(key);
 +				if (zend_check_property_access(zobj, key) == FAILURE) {
 +					continue;
  				}
 +				unmangle = 1;
 +			}
 +
 +			if (Z_ISREF_P(value) && Z_REFCOUNT_P(value) == 1) {
 +				value = Z_REFVAL_P(value);
 +			}
 +			Z_TRY_ADDREF_P(value);
 +
 +			if (UNEXPECTED(!key)) {
 +				/* This case is only possible due to loopholes, e.g. ArrayObject */
 +				zend_hash_index_add(Z_ARRVAL_P(return_value), num_key, value);
 +			} else if (unmangle && ZSTR_VAL(key)[0] == 0) {
 +				const char *prop_name, *class_name;
 +				size_t prop_len;
 +				zend_unmangle_property_name_ex(key, &class_name, &prop_name, &prop_len);
 +				/* We assume here that a mangled property name is never
 +				 * numeric. This is probably a safe assumption, but
 +				 * theoretically someone might write an extension with
 +				 * private, numeric properties. Well, too bad.
 +				 */
 +				zend_hash_str_add_new(Z_ARRVAL_P(return_value), prop_name, prop_len, value);
 +			} else {
- 				if (ZEND_HANDLE_NUMERIC(key, num_key)) {
- 					zend_hash_index_add(Z_ARRVAL_P(return_value), num_key, value);
- 				} else {
- 					zend_hash_add_new(Z_ARRVAL_P(return_value), key, value);
- 				}
++				zend_symbtable_add_new(Z_ARRVAL_P(return_value), key, value);
  			}
  		} ZEND_HASH_FOREACH_END();
  	}
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.