diff options
author | Rob Richards <rrichards@php.net> | 2007-08-06 16:22:24 +0000 |
---|---|---|
committer | Rob Richards <rrichards@php.net> | 2007-08-06 16:22:24 +0000 |
commit | 9abc90728dbb96cce14b5e354e77cada286538fe (patch) | |
tree | 96b887fcd2fb4604f11cd7a3820b1658c816d09d | |
parent | 12ddff7032f9d49bcc8eb94db3440fd081245bff (diff) | |
download | php-git-9abc90728dbb96cce14b5e354e77cada286538fe.tar.gz |
MFH: fix bug #42082 (NodeList length zero should be empty). (Hannes)
add and update tests
-rw-r--r-- | ext/dom/php_dom.c | 15 | ||||
-rw-r--r-- | ext/dom/tests/bug35342.phpt | 3 | ||||
-rw-r--r-- | ext/dom/tests/bug42082.phpt | 27 |
3 files changed, 44 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); diff --git a/ext/dom/tests/bug35342.phpt b/ext/dom/tests/bug35342.phpt index 553822e997..3248c73398 100644 --- a/ext/dom/tests/bug35342.phpt +++ b/ext/dom/tests/bug35342.phpt @@ -10,8 +10,11 @@ $dom->loadXML("<root><foo>foobar</foo><foo>foobar#2</foo></root>"); $nodelist = $dom->getElementsByTagName("foo"); var_dump($nodelist->length, isset($nodelist->length), isset($nodelist->foo)); +var_dump(empty($nodelist->length), empty($nodelist->foo)); ?> --EXPECT-- int(2) bool(true) bool(false) +bool(false) +bool(true) diff --git a/ext/dom/tests/bug42082.phpt b/ext/dom/tests/bug42082.phpt new file mode 100644 index 0000000000..3e20a6b137 --- /dev/null +++ b/ext/dom/tests/bug42082.phpt @@ -0,0 +1,27 @@ +--TEST-- +Bug #42082 (NodeList length zero should be empty) +--FILE-- +<?php +$doc = new DOMDocument(); +$xpath = new DOMXPath($doc); +$nodes = $xpath->query('*'); +var_dump($nodes); +var_dump($nodes->length); +$length = $nodes->length; +var_dump(empty($nodes->length), empty($lenght)); + +$doc->loadXML("<element></element>"); +var_dump($doc->firstChild->nodeValue, empty($doc->firstChild->nodeValue), isset($doc->firstChild->nodeValue)); +var_dump(empty($doc->nodeType), empty($doc->firstChild->nodeType)) +?> +--EXPECTF-- +object(DOMNodeList)#%d (0) { +} +int(0) +bool(true) +bool(true) +string(0) "" +bool(true) +bool(true) +bool(false) +bool(false) |