From ebd85732fa6adfce92b255be4492fb123472c7a3 Mon Sep 17 00:00:00 2001 From: Rob Richards Date: Mon, 6 Aug 2007 16:21:45 +0000 Subject: [PATCH] fix bug #42082 (NodeList length zero should be empty). (Hannes) add and update tests --- ext/dom/php_dom.c | 15 ++++++++++++++- ext/dom/tests/bug35342.phpt | 5 ++++- ext/dom/tests/bug42082.phpt | 38 +++++++++++++++++++++++++++++++++++++ 3 files changed, 56 insertions(+), 2 deletions(-) create mode 100644 ext/dom/tests/bug42082.phpt diff --git a/ext/dom/php_dom.c b/ext/dom/php_dom.c index ee7b881f96..17d29bc82c 100644 --- a/ext/dom/php_dom.c +++ b/ext/dom/php_dom.c @@ -387,7 +387,20 @@ static int dom_property_exists(zval *object, zval *member, int check_empty TSRML ret = zend_u_hash_find(obj->prop_handler, Z_TYPE_P(member), Z_UNIVAL_P(member), Z_UNILEN_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 b32a3eb375..750f199048 100644 --- a/ext/dom/tests/bug35342.phpt +++ b/ext/dom/tests/bug35342.phpt @@ -1,5 +1,5 @@ --TEST-- -Bug # 35342: isset(DOMNodeList->length) returns false +Bug #35342 isset(DOMNodeList->length) returns false --SKIPIF-- --FILE-- @@ -10,8 +10,11 @@ $dom->loadXML(b"foobarfoobar#2"); $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..6c044bcc24 --- /dev/null +++ b/ext/dom/tests/bug42082.phpt @@ -0,0 +1,38 @@ +--TEST-- +Bug #42082 (NodeList length zero should be empty) +--FILE-- +query('*'); +var_dump($nodes); +var_dump($nodes->length); +$length = $nodes->length; +var_dump(empty($nodes->length), empty($lenght)); + +$doc->loadXML(""); +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) +--UEXPECTF-- +object(DOMNodeList)#%d (0) { +} +int(0) +bool(true) +bool(true) +unicode(0) "" +bool(true) +bool(true) +bool(false) +bool(false) -- 2.40.0