mirror of
https://github.com/php/php-src.git
synced 2026-04-26 01:18:19 +02:00
Fixed bug #38132 (ReflectionClass::getStaticProperties() retains \0 in key
names).
This commit is contained in:
@@ -11,6 +11,8 @@ PHP NEWS
|
||||
|
||||
- Fixed bug #38194 (ReflectionClass::isSubclassOf() returns TRUE for the class
|
||||
itself). (Ilia)
|
||||
- Fixed bug #38132 (ReflectionClass::getStaticProperties() retains \0 in key
|
||||
names). (Ilia)
|
||||
|
||||
24 Jul 2006, PHP 5.2.0RC1
|
||||
- Updated bundled MySQL client library to version 5.0.22 in the Windows
|
||||
|
||||
@@ -2623,17 +2623,42 @@ ZEND_METHOD(reflection_class, __construct)
|
||||
Returns an associative array containing all static property values of the class */
|
||||
ZEND_METHOD(reflection_class, getStaticProperties)
|
||||
{
|
||||
zval *tmp_copy;
|
||||
reflection_object *intern;
|
||||
zend_class_entry *ce;
|
||||
|
||||
HashPosition pos;
|
||||
zval **value;
|
||||
|
||||
METHOD_NOTSTATIC_NUMPARAMS(reflection_class_ptr, 0);
|
||||
GET_REFLECTION_OBJECT_PTR(ce);
|
||||
|
||||
zend_update_class_constants(ce TSRMLS_CC);
|
||||
|
||||
array_init(return_value);
|
||||
zend_hash_copy(Z_ARRVAL_P(return_value), CE_STATIC_MEMBERS(ce), (copy_ctor_func_t) zval_add_ref, (void *) &tmp_copy, sizeof(zval *));
|
||||
|
||||
zend_hash_internal_pointer_reset_ex(CE_STATIC_MEMBERS(ce), &pos);
|
||||
|
||||
while (zend_hash_get_current_data_ex(CE_STATIC_MEMBERS(ce), (void **) &value, &pos) == SUCCESS) {
|
||||
uint key_len;
|
||||
char *key;
|
||||
ulong num_index;
|
||||
|
||||
if (zend_hash_get_current_key_ex(CE_STATIC_MEMBERS(ce), &key, &key_len, &num_index, 0, &pos) != FAILURE && key) {
|
||||
zval_add_ref(value);
|
||||
|
||||
if (*key == '\0') {
|
||||
*key++;
|
||||
key_len--;
|
||||
|
||||
}
|
||||
if (*key == '*' && *(key+1) == '\0') {
|
||||
*(key+1) = *key++;
|
||||
key_len--;
|
||||
}
|
||||
|
||||
zend_hash_update(Z_ARRVAL_P(return_value), key, key_len, value, sizeof(zval *), NULL);
|
||||
}
|
||||
zend_hash_move_forward_ex(CE_STATIC_MEMBERS(ce), &pos);
|
||||
}
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
|
||||
Executable
+33
@@ -0,0 +1,33 @@
|
||||
--TEST--
|
||||
Reflection Bug #38132 (ReflectionClass::getStaticProperties() retains \0 in key names)
|
||||
--SKIPIF--
|
||||
<?php extension_loaded('reflection') or die('skip'); ?>
|
||||
--FILE--
|
||||
<?php
|
||||
class foo {
|
||||
static protected $bar = 'baz';
|
||||
static public $a = 'a';
|
||||
}
|
||||
|
||||
$class = new ReflectionClass('foo');
|
||||
$properties = $class->getStaticProperties();
|
||||
var_dump($properties, array_keys($properties));
|
||||
var_dump(isset($properties['*bar'])); // false
|
||||
var_dump(isset($properties["\0*\0bar"])); // true
|
||||
|
||||
?>
|
||||
--EXPECT--
|
||||
array(2) {
|
||||
["*bar"]=>
|
||||
string(3) "baz"
|
||||
["a"]=>
|
||||
string(1) "a"
|
||||
}
|
||||
array(2) {
|
||||
[0]=>
|
||||
string(4) "*bar"
|
||||
[1]=>
|
||||
string(1) "a"
|
||||
}
|
||||
bool(true)
|
||||
bool(false)
|
||||
Reference in New Issue
Block a user