mirror of
https://github.com/php/php-src.git
synced 2024-09-22 02:17:32 +00:00
Added missing safety checks (Problem identified by Coverity scan)
This commit is contained in:
parent
12f7021e12
commit
98b16064b4
@ -170,6 +170,8 @@ static int php_dom_iterator_current_key(zend_object_iterator *iter, char **str_k
|
|||||||
intern = (dom_object *)zend_object_store_get_object(curobj TSRMLS_CC);
|
intern = (dom_object *)zend_object_store_get_object(curobj TSRMLS_CC);
|
||||||
if (intern != NULL && intern->ptr != NULL) {
|
if (intern != NULL && intern->ptr != NULL) {
|
||||||
curnode = (xmlNodePtr)((php_libxml_node_ptr *)intern->ptr)->node;
|
curnode = (xmlNodePtr)((php_libxml_node_ptr *)intern->ptr)->node;
|
||||||
|
} else {
|
||||||
|
return HASH_KEY_NON_EXISTANT;
|
||||||
}
|
}
|
||||||
|
|
||||||
namelen = xmlStrlen(curnode->name);
|
namelen = xmlStrlen(curnode->name);
|
||||||
@ -220,8 +222,10 @@ static void php_dom_iterator_move_forward(zend_object_iterator *iter TSRMLS_DC)
|
|||||||
if (basenode && (basenode->type == XML_DOCUMENT_NODE ||
|
if (basenode && (basenode->type == XML_DOCUMENT_NODE ||
|
||||||
basenode->type == XML_HTML_DOCUMENT_NODE)) {
|
basenode->type == XML_HTML_DOCUMENT_NODE)) {
|
||||||
basenode = xmlDocGetRootElement((xmlDoc *) basenode);
|
basenode = xmlDocGetRootElement((xmlDoc *) basenode);
|
||||||
} else {
|
} else if (basenode) {
|
||||||
basenode = basenode->children;
|
basenode = basenode->children;
|
||||||
|
} else {
|
||||||
|
goto err;
|
||||||
}
|
}
|
||||||
curnode = dom_get_elements_by_tag_name_ns_raw(basenode, objmap->ns, objmap->local, &previndex, iter->index);
|
curnode = dom_get_elements_by_tag_name_ns_raw(basenode, objmap->ns, objmap->local, &previndex, iter->index);
|
||||||
}
|
}
|
||||||
@ -234,7 +238,7 @@ static void php_dom_iterator_move_forward(zend_object_iterator *iter TSRMLS_DC)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
err:
|
||||||
zval_ptr_dtor((zval**)&curobj);
|
zval_ptr_dtor((zval**)&curobj);
|
||||||
if (curnode) {
|
if (curnode) {
|
||||||
MAKE_STD_ZVAL(curattr);
|
MAKE_STD_ZVAL(curattr);
|
||||||
@ -287,6 +291,9 @@ zend_object_iterator *php_dom_get_iterator(zend_class_entry *ce, zval *object, i
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
nodep = (xmlNode *)dom_object_get_node(objmap->baseobj);
|
nodep = (xmlNode *)dom_object_get_node(objmap->baseobj);
|
||||||
|
if (!nodep) {
|
||||||
|
goto err;
|
||||||
|
}
|
||||||
if (objmap->nodetype == XML_ATTRIBUTE_NODE || objmap->nodetype == XML_ELEMENT_NODE) {
|
if (objmap->nodetype == XML_ATTRIBUTE_NODE || objmap->nodetype == XML_ELEMENT_NODE) {
|
||||||
if (objmap->nodetype == XML_ATTRIBUTE_NODE) {
|
if (objmap->nodetype == XML_ATTRIBUTE_NODE) {
|
||||||
curnode = (xmlNodePtr) nodep->properties;
|
curnode = (xmlNodePtr) nodep->properties;
|
||||||
@ -310,7 +317,7 @@ zend_object_iterator *php_dom_get_iterator(zend_class_entry *ce, zval *object, i
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
err:
|
||||||
if (curnode) {
|
if (curnode) {
|
||||||
MAKE_STD_ZVAL(curattr);
|
MAKE_STD_ZVAL(curattr);
|
||||||
curattr = php_dom_create_object(curnode, &ret, NULL, curattr, objmap->baseobj TSRMLS_CC);
|
curattr = php_dom_create_object(curnode, &ret, NULL, curattr, objmap->baseobj TSRMLS_CC);
|
||||||
|
Loading…
Reference in New Issue
Block a user