summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRob Richards <rrichards@php.net>2003-12-02 15:17:02 +0000
committerRob Richards <rrichards@php.net>2003-12-02 15:17:02 +0000
commit6fa6d3c4707b1fa1327292e1197445114304ab61 (patch)
treeafb96a4df4ef0cee46e4022e3a8725e42c4252f7
parent49af06e7b42db83caa26bc9dfafa8187ab392823 (diff)
downloadphp-git-6fa6d3c4707b1fa1327292e1197445114304ab61.tar.gz
check node type for ->attributes and ->childNodes
-rw-r--r--ext/dom/node.c28
-rw-r--r--ext/dom/php_dom.c1
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: