iliaa Sat Oct 7 19:59:19 2006 UTC
Modified files: (Branch: PHP_5_2)
/php-src/ext/dom dom_iterators.c
Log:
Added missing safety checks (Problem identified by Coverity scan)
http://cvs.php.net/viewvc.cgi/php-src/ext/dom/dom_iterators.c?r1=1.9.2.3.2.3&r2=1.9.2.3.2.4&diff_format=u
Index: php-src/ext/dom/dom_iterators.c
diff -u php-src/ext/dom/dom_iterators.c:1.9.2.3.2.3
php-src/ext/dom/dom_iterators.c:1.9.2.3.2.4
--- php-src/ext/dom/dom_iterators.c:1.9.2.3.2.3 Wed May 17 16:35:50 2006
+++ php-src/ext/dom/dom_iterators.c Sat Oct 7 19:59:19 2006
@@ -17,7 +17,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: dom_iterators.c,v 1.9.2.3.2.3 2006/05/17 16:35:50 rrichards Exp $ */
+/* $Id: dom_iterators.c,v 1.9.2.3.2.4 2006/10/07 19:59:19 iliaa Exp $ */
#ifdef HAVE_CONFIG_H
#include "config.h"
@@ -170,6 +170,8 @@
intern = (dom_object *)zend_object_store_get_object(curobj
TSRMLS_CC);
if (intern != NULL && intern->ptr != NULL) {
curnode = (xmlNodePtr)((php_libxml_node_ptr
*)intern->ptr)->node;
+ } else {
+ return HASH_KEY_NON_EXISTANT;
}
namelen = xmlStrlen(curnode->name);
@@ -220,8 +222,10 @@
if (basenode && (basenode->type ==
XML_DOCUMENT_NODE ||
basenode->type ==
XML_HTML_DOCUMENT_NODE)) {
basenode =
xmlDocGetRootElement((xmlDoc *) basenode);
- } else {
+ } else if (basenode) {
basenode = basenode->children;
+ } else {
+ goto err;
}
curnode =
dom_get_elements_by_tag_name_ns_raw(basenode, objmap->ns, objmap->local,
&previndex, iter->index);
}
@@ -234,7 +238,7 @@
}
}
}
-
+err:
zval_ptr_dtor((zval**)&curobj);
if (curnode) {
MAKE_STD_ZVAL(curattr);
@@ -287,6 +291,9 @@
}
} else {
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) {
curnode = (xmlNodePtr)
nodep->properties;
@@ -310,7 +317,7 @@
}
}
}
-
+err:
if (curnode) {
MAKE_STD_ZVAL(curattr);
curattr = php_dom_create_object(curnode, &ret, NULL, curattr,
objmap->baseobj TSRMLS_CC);
--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php