diff options
Diffstat (limited to 'ext/dom/php_dom.c')
-rw-r--r-- | ext/dom/php_dom.c | 15 |
1 files changed, 14 insertions, 1 deletions
diff --git a/ext/dom/php_dom.c b/ext/dom/php_dom.c index 396e11714c..83f1cb9b7c 100644 --- a/ext/dom/php_dom.c +++ b/ext/dom/php_dom.c @@ -411,7 +411,20 @@ static int dom_property_exists(zval *object, zval *member, int check_empty TSRML ret = zend_hash_find((HashTable *)obj->prop_handler, Z_STRVAL_P(member), Z_STRLEN_P(member)+1, (void **) &hnd); } if (ret == SUCCESS) { - retval = 1; + zval *tmp; + + if (check_empty == 2) { + retval = 1; + } else if (hnd->read_func(obj, &tmp TSRMLS_CC) == SUCCESS) { + tmp->refcount = 1; + tmp->is_ref = 0; + if (check_empty == 1) { + retval = zend_is_true(tmp); + } else if (check_empty == 0) { + retval = (Z_TYPE_P(tmp) != IS_NULL); + } + zval_ptr_dtor(&tmp); + } } else { std_hnd = zend_get_std_object_handlers(); retval = std_hnd->has_property(object, member, check_empty TSRMLS_CC); |