]> granicus.if.org Git - php/commitdiff
MFH: fix bug #42082 (NodeList length zero should be empty). (Hannes)
authorRob Richards <rrichards@php.net>
Mon, 6 Aug 2007 16:22:24 +0000 (16:22 +0000)
committerRob Richards <rrichards@php.net>
Mon, 6 Aug 2007 16:22:24 +0000 (16:22 +0000)
add and update tests

ext/dom/php_dom.c
ext/dom/tests/bug35342.phpt
ext/dom/tests/bug42082.phpt [new file with mode: 0644]

index 396e11714c9aa9fc4d7f05b4720d2ca9f4daaa45..83f1cb9b7c37fb34a9a54a5bcd9a2e3407211041 100644 (file)
@@ -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);
index 553822e997cbff23fd663a6b9939575897b2c1de..3248c7339835e4d225428cd8952e699c30ba2ebd 100644 (file)
@@ -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 (file)
index 0000000..3e20a6b
--- /dev/null
@@ -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)