summaryrefslogtreecommitdiff
path: root/ext/dom/php_dom.c
diff options
context:
space:
mode:
authorChristoph M. Becker <cmbecker69@gmx.de>2020-04-27 10:07:54 +0200
committerChristoph M. Becker <cmbecker69@gmx.de>2020-04-27 10:28:00 +0200
commitecc6b8cc29ff33ea6ea2c21ef755732e1d2dc109 (patch)
tree6feb90d222485f2a5331bf1a8fd62bb688822700 /ext/dom/php_dom.c
parentf578d57ee977e8c2a6d4727d894423550ffa42e5 (diff)
parent6bc8f7e5a9949b2ba79376abd1ed13d0b4d0ae3c (diff)
downloadphp-git-ecc6b8cc29ff33ea6ea2c21ef755732e1d2dc109.tar.gz
Merge branch 'PHP-7.4'
* PHP-7.4: Fix #79065: DOM classes do not expose properties to Reflection
Diffstat (limited to 'ext/dom/php_dom.c')
-rw-r--r--ext/dom/php_dom.c23
1 files changed, 23 insertions, 0 deletions
diff --git a/ext/dom/php_dom.c b/ext/dom/php_dom.c
index c7b2103a0f..67961b303a 100644
--- a/ext/dom/php_dom.c
+++ b/ext/dom/php_dom.c
@@ -385,6 +385,28 @@ static int dom_property_exists(zend_object *object, zend_string *name, int check
}
/* }}} */
+/* {{{ dom_get_properties */
+static HashTable *dom_get_properties(zend_object *object)
+{
+ 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 = php_dom_obj_from_obj(object);
@@ -568,6 +590,7 @@ PHP_MINIT_FUNCTION(dom)
dom_object_handlers.get_property_ptr_ptr = dom_get_property_ptr_ptr;
dom_object_handlers.clone_obj = dom_objects_store_clone_obj;
dom_object_handlers.has_property = dom_property_exists;
+ dom_object_handlers.get_properties = dom_get_properties;
dom_object_handlers.get_debug_info = dom_get_debug_info;
memcpy(&dom_nnodemap_object_handlers, &dom_object_handlers, sizeof(zend_object_handlers));