]> granicus.if.org Git - php/commitdiff
Merge branch 'PHP-7.4'
authorChristoph M. Becker <cmbecker69@gmx.de>
Mon, 27 Apr 2020 08:07:54 +0000 (10:07 +0200)
committerChristoph M. Becker <cmbecker69@gmx.de>
Mon, 27 Apr 2020 08:28:00 +0000 (10:28 +0200)
* PHP-7.4:
  Fix #79065: DOM classes do not expose properties to Reflection

1  2 
ext/dom/php_dom.c
ext/dom/tests/bug79065.phpt

index c7b2103a0f5cb098c0a9d914401c9e427d843e38,ad297ca7788fb67474786460079790f677e44927..67961b303a936f687c0f4b91854c5eea94e31a0d
@@@ -385,9 -410,31 +385,31 @@@ static int dom_property_exists(zend_obj
  }
  /* }}} */
  
 -static HashTable *dom_get_properties(zval *object)
+ /* {{{ dom_get_properties */
 -      dom_object *obj = Z_DOMOBJ_P(object);
++static HashTable *dom_get_properties(zend_object *object)
+ {
 -static HashTable* dom_get_debug_info_helper(zval *object, int *is_temp) /* {{{ */
++      dom_object *obj = php_dom_obj_from_obj(object);
+       HashTable *props = zend_std_get_properties(object);
+       if (obj->prop_handler != NULL) {
+               zend_string *key;
+               dom_prop_handler *hnd;
+               ZEND_HASH_FOREACH_STR_KEY_PTR(obj->prop_handler, key, hnd) {
+                       zval val;
+                       if (hnd->read_func(obj, &val) == SUCCESS) {
+                               zend_hash_update(props, key, &val);
+                       }
+               } ZEND_HASH_FOREACH_END();
+       }
+       return props;
+ }
+ /* }}} */
 +static HashTable* dom_get_debug_info_helper(zend_object *object, int *is_temp) /* {{{ */
  {
 -      dom_object                      *obj = Z_DOMOBJ_P(object);
 +      dom_object                      *obj = php_dom_obj_from_obj(object);
        HashTable                       *debug_info,
                                                *prop_handlers = obj->prop_handler,
                                                *std_props;
index 0000000000000000000000000000000000000000,9f3f49b7c80c719b5ca6dbf2d471ab74e5f1dea2..5b92d5c7493ff5a105ccb0b1b072a880f25ef292
mode 000000,100644..100644
--- /dev/null
@@@ -1,0 -1,30 +1,30 @@@
 -int(35)
 -int(35)
+ --TEST--
+ Bug #79065 (DOM classes do not expose properties to Reflection)
+ --SKIPIF--
+ <?php
+ if (!extension_loaded('dom')) die('skip dom extension not available');
+ ?>
+ --FILE--
+ <?php
+ $dom = new DOMDocument;
+ $dom->loadHTML('<b>test</b>');
+ var_dump(count(get_object_vars($dom)));
+ $ro = new ReflectionObject($dom);
+ var_dump(count($ro->getProperties()));
+ var_dump($ro->hasProperty("textContent"));
+ $rp = $ro->getProperty("textContent");
+ var_dump($rp);
+ var_dump($rp->getValue($dom));
+ ?>
+ --EXPECTF--
++int(38)
++int(38)
+ bool(true)
+ object(ReflectionProperty)#%d (2) {
+   ["name"]=>
+   string(11) "textContent"
+   ["class"]=>
+   string(11) "DOMDocument"
+ }
+ string(4) "test"