- Fixed bug #49074 (private class static fields can be modified by using reflection)

This commit is contained in:
Jani Taskinen 2009-08-01 00:48:04 +00:00
parent 8608857c1a
commit edbf332cea
2 changed files with 12 additions and 4 deletions

View file

@ -3030,6 +3030,7 @@ ZEND_METHOD(reflection_class, getStaticProperties)
if (zend_parse_parameters_none() == FAILURE) {
return;
}
GET_REFLECTION_OBJECT_PTR(ce);
zend_update_class_constants(ce TSRMLS_CC);
@ -3045,12 +3046,17 @@ ZEND_METHOD(reflection_class, getStaticProperties)
if (zend_hash_get_current_key_ex(CE_STATIC_MEMBERS(ce), &key, &key_len, &num_index, 0, &pos) != FAILURE && key) {
char *prop_name, *class_name;
zval *prop_copy;
zend_unmangle_property_name(key, key_len-1, &class_name, &prop_name);
zval_add_ref(value);
/* copy: enforce read only access */
ALLOC_ZVAL(prop_copy);
*prop_copy = **value;
zval_copy_ctor(prop_copy);
INIT_PZVAL(prop_copy);
zend_hash_update(Z_ARRVAL_P(return_value), prop_name, strlen(prop_name)+1, value, sizeof(zval *), NULL);
add_assoc_zval(return_value, prop_name, prop_copy);
}
zend_hash_move_forward_ex(CE_STATIC_MEMBERS(ce), &pos);
}