diff options
| author | Arpad Ray <arraypad@gmail.com> | 2013-07-20 11:05:13 +0100 | 
|---|---|---|
| committer | Arpad Ray <arraypad@gmail.com> | 2013-07-20 11:05:13 +0100 | 
| commit | b963249456b043dba4a73cc6591d0eef11cebfbb (patch) | |
| tree | d1435912851663d143add6d1f037bb890b622355 | |
| parent | a015fa83a735da7342dd7ae172c4516265bed41d (diff) | |
| download | php-git-b963249456b043dba4a73cc6591d0eef11cebfbb.tar.gz | |
Fixed bug #65291 - get_defined_constants() crash with __CLASS__ in trait
Also fix and test for get_defined_constants(true)
| -rw-r--r-- | Zend/tests/bug65291.phpt | 1 | ||||
| -rw-r--r-- | Zend/zend_builtin_functions.c | 9 | 
2 files changed, 8 insertions, 2 deletions
| diff --git a/Zend/tests/bug65291.phpt b/Zend/tests/bug65291.phpt index 9e5cca5c35..7bc76331c0 100644 --- a/Zend/tests/bug65291.phpt +++ b/Zend/tests/bug65291.phpt @@ -17,6 +17,7 @@ class Tester  $foo = Tester::testStaticFunction();  get_defined_constants(); +get_defined_constants(true);  echo $foo;  ?> diff --git a/Zend/zend_builtin_functions.c b/Zend/zend_builtin_functions.c index 1aba64e102..dc496e9ed5 100644 --- a/Zend/zend_builtin_functions.c +++ b/Zend/zend_builtin_functions.c @@ -1998,11 +1998,16 @@ ZEND_FUNCTION(get_defined_constants)  		while (zend_hash_get_current_data_ex(EG(zend_constants), (void **) &val, &pos) != FAILURE) {  			zval *const_val; +			if (!val->name) { +				/* skip special constants */ +				goto next_constant; +			} +  			if (val->module_number == PHP_USER_CONSTANT) {  				module_number = i;  			} else if (val->module_number > i || val->module_number < 0) {  				/* should not happen */ -				goto bad_module_id; +				goto next_constant;  			} else {  				module_number = val->module_number;  			} @@ -2019,7 +2024,7 @@ ZEND_FUNCTION(get_defined_constants)  			INIT_PZVAL(const_val);  			add_assoc_zval_ex(modules[module_number], val->name, val->name_len, const_val); -bad_module_id: +next_constant:  			zend_hash_move_forward_ex(EG(zend_constants), &pos);  		}  		efree(module_names); | 
