mirror of
https://github.com/php/php-src.git
synced 2024-09-23 10:57:26 +00:00
- Fixed bug #61388 (ReflectionObject:getProperties() issues invalid reads
when get_properties returns a hash table with (inaccessible) dynamic numeric properties).
This commit is contained in:
parent
a3699726f9
commit
773bedb13d
@ -3832,6 +3832,13 @@ static int _adddynproperty(zval **pptr TSRMLS_DC, int num_args, va_list args, ze
|
||||
zend_class_entry *ce = *va_arg(args, zend_class_entry**);
|
||||
zval *retval = va_arg(args, zval*), member;
|
||||
|
||||
/* under some circumstances, the properties hash table may contain numeric
|
||||
* properties (e.g. when casting from array). This is a WONT FIX bug, at
|
||||
* least for the moment. Ignore these */
|
||||
if (hash_key->nKeyLength == 0) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (hash_key->arKey[0] == '\0') {
|
||||
return 0; /* non public cannot be dynamic */
|
||||
}
|
||||
|
32
ext/reflection/tests/bug61388.phpt
Normal file
32
ext/reflection/tests/bug61388.phpt
Normal file
@ -0,0 +1,32 @@
|
||||
--TEST--
|
||||
ReflectionObject:getProperties() issues invalid reads when it get_properties returns a hash table with (inaccessible) dynamic numeric properties
|
||||
--FILE--
|
||||
<?php
|
||||
$x = new ArrayObject();
|
||||
$x[0] = 'test string 2';
|
||||
$x['test'] = 'test string 3';
|
||||
$reflObj = new ReflectionObject($x);
|
||||
print_r($reflObj->getProperties(ReflectionProperty::IS_PUBLIC));
|
||||
|
||||
$x = (object)array("a", "oo" => "b");
|
||||
$reflObj = new ReflectionObject($x);
|
||||
print_r($reflObj->getProperties(ReflectionProperty::IS_PUBLIC));
|
||||
--EXPECT--
|
||||
Array
|
||||
(
|
||||
[0] => ReflectionProperty Object
|
||||
(
|
||||
[name] => test
|
||||
[class] => ArrayObject
|
||||
)
|
||||
|
||||
)
|
||||
Array
|
||||
(
|
||||
[0] => ReflectionProperty Object
|
||||
(
|
||||
[name] => oo
|
||||
[class] => stdClass
|
||||
)
|
||||
|
||||
)
|
Loading…
Reference in New Issue
Block a user