Browse Source

Fixed bug #65291 - get_defined_constants() crash with __CLASS__ in trait

Also fix and test for get_defined_constants(true)
pull/389/head
Arpad Ray 13 years ago
parent
commit
b963249456
  1. 1
      Zend/tests/bug65291.phpt
  2. 9
      Zend/zend_builtin_functions.c

1
Zend/tests/bug65291.phpt

@ -17,6 +17,7 @@ class Tester
$foo = Tester::testStaticFunction();
get_defined_constants();
get_defined_constants(true);
echo $foo;
?>

9
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);

Loading…
Cancel
Save