diff options
author | Rob Richards <rrichards@php.net> | 2003-12-02 15:17:02 +0000 |
---|---|---|
committer | Rob Richards <rrichards@php.net> | 2003-12-02 15:17:02 +0000 |
commit | 6fa6d3c4707b1fa1327292e1197445114304ab61 (patch) | |
tree | afb96a4df4ef0cee46e4022e3a8725e42c4252f7 | |
parent | 49af06e7b42db83caa26bc9dfafa8187ab392823 (diff) | |
download | php-git-6fa6d3c4707b1fa1327292e1197445114304ab61.tar.gz |
check node type for ->attributes and ->childNodes
-rw-r--r-- | ext/dom/node.c | 28 | ||||
-rw-r--r-- | ext/dom/php_dom.c | 1 |
2 files changed, 22 insertions, 7 deletions
diff --git a/ext/dom/node.c b/ext/dom/node.c index e638ec003f..40ba5b3ab4 100644 --- a/ext/dom/node.c +++ b/ext/dom/node.c @@ -279,13 +279,20 @@ Since: */ int dom_node_child_nodes_read(dom_object *obj, zval **retval TSRMLS_DC) { + xmlNode *nodep; dom_object *intern; - ALLOC_ZVAL(*retval); - php_dom_create_interator(*retval, DOM_NODELIST TSRMLS_CC); + nodep = dom_object_get_node(obj); - intern = (dom_object *)zend_objects_get_address(*retval TSRMLS_CC); - dom_namednode_iter(obj, XML_ELEMENT_NODE, intern, NULL, NULL, NULL); + ALLOC_ZVAL(*retval); + + if (dom_node_children_valid(nodep) == FAILURE) { + ZVAL_NULL(*retval); + } else { + php_dom_create_interator(*retval, DOM_NODELIST TSRMLS_CC); + intern = (dom_object *)zend_objects_get_address(*retval TSRMLS_CC); + dom_namednode_iter(obj, XML_ELEMENT_NODE, intern, NULL, NULL, NULL); + } return SUCCESS; } @@ -427,13 +434,20 @@ Since: */ int dom_node_attributes_read(dom_object *obj, zval **retval TSRMLS_DC) { + xmlNode *nodep; dom_object *intern; + nodep = dom_object_get_node(obj); + ALLOC_ZVAL(*retval); - php_dom_create_interator(*retval, DOM_NAMEDNODEMAP TSRMLS_CC); - intern = (dom_object *)zend_objects_get_address(*retval TSRMLS_CC); - dom_namednode_iter(obj, XML_ATTRIBUTE_NODE, intern, NULL, NULL, NULL); + if (nodep->type == XML_ELEMENT_NODE) { + php_dom_create_interator(*retval, DOM_NAMEDNODEMAP TSRMLS_CC); + intern = (dom_object *)zend_objects_get_address(*retval TSRMLS_CC); + dom_namednode_iter(obj, XML_ATTRIBUTE_NODE, intern, NULL, NULL, NULL); + } else { + ZVAL_NULL(*retval); + } return SUCCESS; } diff --git a/ext/dom/php_dom.c b/ext/dom/php_dom.c index 53982b3571..33f9986422 100644 --- a/ext/dom/php_dom.c +++ b/ext/dom/php_dom.c @@ -103,6 +103,7 @@ int dom_node_children_valid(xmlNodePtr node) { case XML_COMMENT_NODE: case XML_TEXT_NODE: case XML_CDATA_SECTION_NODE: + case XML_NOTATION_NODE: return FAILURE; break; default: |