diff --git a/ext/dom/attr.c b/ext/dom/attr.c index 057d0d52e94..5929d88c7f2 100644 --- a/ext/dom/attr.c +++ b/ext/dom/attr.c @@ -92,6 +92,12 @@ int dom_attr_name_read(dom_object *obj, zval **retval TSRMLS_DC) xmlAttrPtr attrp; attrp = (xmlAttrPtr) dom_object_get_node(obj); + + if (attrp == NULL) { + php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC); + return FAILURE; + } + ALLOC_ZVAL(*retval); ZVAL_STRING(*retval, (char *) (attrp->name), 1); @@ -131,6 +137,11 @@ int dom_attr_value_read(dom_object *obj, zval **retval TSRMLS_DC) attrp = (xmlAttrPtr) dom_object_get_node(obj); + if (attrp == NULL) { + php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC); + return FAILURE; + } + ALLOC_ZVAL(*retval); @@ -152,6 +163,11 @@ int dom_attr_value_write(dom_object *obj, zval *newval TSRMLS_DC) attrp = (xmlAttrPtr) dom_object_get_node(obj); + if (attrp == NULL) { + php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC); + return FAILURE; + } + if (attrp->children) { node_list_unlink(attrp->children TSRMLS_CC); } @@ -190,6 +206,11 @@ int dom_attr_owner_element_read(dom_object *obj, zval **retval TSRMLS_DC) nodep = dom_object_get_node(obj); + if (nodep == NULL) { + php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC); + return FAILURE; + } + nodeparent = nodep->parent; if (!nodeparent) { return FAILURE; diff --git a/ext/dom/characterdata.c b/ext/dom/characterdata.c index 65a5518bd05..d917ede44b0 100644 --- a/ext/dom/characterdata.c +++ b/ext/dom/characterdata.c @@ -56,6 +56,11 @@ int dom_characterdata_data_read(dom_object *obj, zval **retval TSRMLS_DC) nodep = dom_object_get_node(obj); + if (nodep == NULL) { + php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC); + return FAILURE; + } + ALLOC_ZVAL(*retval); if ((content = xmlNodeGetContent(nodep)) != NULL) { @@ -75,6 +80,11 @@ int dom_characterdata_data_write(dom_object *obj, zval *newval TSRMLS_DC) nodep = dom_object_get_node(obj); + if (nodep == NULL) { + php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC); + return FAILURE; + } + if (newval->type != IS_STRING) { if(newval->refcount > 1) { value_copy = *newval; @@ -108,6 +118,11 @@ int dom_characterdata_length_read(dom_object *obj, zval **retval TSRMLS_DC) nodep = dom_object_get_node(obj); + if (nodep == NULL) { + php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC); + return FAILURE; + } + ALLOC_ZVAL(*retval); content = xmlNodeGetContent(nodep); diff --git a/ext/dom/document.c b/ext/dom/document.c index e6d84c8788c..c53b7bdb3c3 100644 --- a/ext/dom/document.c +++ b/ext/dom/document.c @@ -101,6 +101,11 @@ int dom_document_doctype_read(dom_object *obj, zval **retval TSRMLS_DC) docp = (xmlDocPtr) dom_object_get_node(obj); + if (docp == NULL) { + php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC); + return FAILURE; + } + dtdptr = xmlGetIntSubset(docp); if (!dtdptr) { return FAILURE; @@ -148,6 +153,11 @@ int dom_document_document_element_read(dom_object *obj, zval **retval TSRMLS_DC) docp = (xmlDocPtr) dom_object_get_node(obj); + if (docp == NULL) { + php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC); + return FAILURE; + } + root = xmlDocGetRootElement(docp); if (!root) { return FAILURE; @@ -195,6 +205,12 @@ int dom_document_encoding_read(dom_object *obj, zval **retval TSRMLS_DC) char *encoding; docp = (xmlDocPtr) dom_object_get_node(obj); + + if (docp == NULL) { + php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC); + return FAILURE; + } + encoding = (char *) docp->encoding; ALLOC_ZVAL(*retval); @@ -215,6 +231,11 @@ int dom_document_encoding_write(dom_object *obj, zval *newval TSRMLS_DC) docp = (xmlDocPtr) dom_object_get_node(obj); + if (docp == NULL) { + php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC); + return FAILURE; + } + if (newval->type != IS_STRING) { if(newval->refcount > 1) { value_copy = *newval; @@ -258,6 +279,12 @@ int dom_document_standalone_read(dom_object *obj, zval **retval TSRMLS_DC) int standalone; docp = (xmlDocPtr) dom_object_get_node(obj); + + if (docp == NULL) { + php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC); + return FAILURE; + } + ALLOC_ZVAL(*retval); standalone = docp->standalone; ZVAL_BOOL(*retval, standalone); @@ -273,6 +300,11 @@ int dom_document_standalone_write(dom_object *obj, zval *newval TSRMLS_DC) docp = (xmlDocPtr) dom_object_get_node(obj); + if (docp == NULL) { + php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC); + return FAILURE; + } + if(newval->refcount > 1) { value_copy = *newval; zval_copy_ctor(&value_copy); @@ -313,6 +345,12 @@ int dom_document_version_read(dom_object *obj, zval **retval TSRMLS_DC) char *version; docp = (xmlDocPtr) dom_object_get_node(obj); + + if (docp == NULL) { + php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC); + return FAILURE; + } + version = (char *) docp->version; ALLOC_ZVAL(*retval); @@ -331,6 +369,12 @@ int dom_document_version_write(dom_object *obj, zval *newval TSRMLS_DC) xmlDoc *docp; docp = (xmlDocPtr) dom_object_get_node(obj); + + if (docp == NULL) { + php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC); + return FAILURE; + } + if (docp->version != NULL) { xmlFree((xmlChar *) docp->version ); } @@ -626,6 +670,11 @@ int dom_document_document_uri_read(dom_object *obj, zval **retval TSRMLS_DC) docp = (xmlDocPtr) dom_object_get_node(obj); + if (docp == NULL) { + php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC); + return FAILURE; + } + ALLOC_ZVAL(*retval); url = (char *) docp->URL; if (url != NULL) { @@ -643,6 +692,12 @@ int dom_document_document_uri_write(dom_object *obj, zval *newval TSRMLS_DC) xmlDoc *docp; docp = (xmlDocPtr) dom_object_get_node(obj); + + if (docp == NULL) { + php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC); + return FAILURE; + } + if (docp->URL != NULL) { xmlFree((xmlChar *) docp->URL); } @@ -1025,8 +1080,6 @@ PHP_FUNCTION(dom_document_create_element_ns) DOM_GET_OBJ(docp, id, xmlDocPtr, intern); - DOM_GET_THIS_OBJ(docp, id, xmlDocPtr, intern); - errorcode = dom_check_qname(name, &localname, &prefix, uri_len, name_len); if (errorcode == 0) { diff --git a/ext/dom/documenttype.c b/ext/dom/documenttype.c index 571b17e3d8b..2e0323e8105 100644 --- a/ext/dom/documenttype.c +++ b/ext/dom/documenttype.c @@ -50,6 +50,12 @@ int dom_documenttype_name_read(dom_object *obj, zval **retval TSRMLS_DC) xmlDtdPtr dtdptr; dtdptr = (xmlDtdPtr) dom_object_get_node(obj); + + if (dtdptr == NULL) { + php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC); + return FAILURE; + } + ALLOC_ZVAL(*retval); ZVAL_STRING(*retval, (char *) (dtdptr->name), 1); @@ -73,6 +79,11 @@ int dom_documenttype_entities_read(dom_object *obj, zval **retval TSRMLS_DC) doctypep = (xmlDtdPtr) dom_object_get_node(obj); + if (doctypep == NULL) { + php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC); + return FAILURE; + } + MAKE_STD_ZVAL(*retval); php_dom_create_interator(*retval, DOM_NAMEDNODEMAP TSRMLS_CC); @@ -101,6 +112,11 @@ int dom_documenttype_notations_read(dom_object *obj, zval **retval TSRMLS_DC) doctypep = (xmlDtdPtr) dom_object_get_node(obj); + if (doctypep == NULL) { + php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC); + return FAILURE; + } + MAKE_STD_ZVAL(*retval); php_dom_create_interator(*retval, DOM_NAMEDNODEMAP TSRMLS_CC); @@ -127,6 +143,11 @@ int dom_documenttype_public_id_read(dom_object *obj, zval **retval TSRMLS_DC) dtdptr = (xmlDtdPtr) dom_object_get_node(obj); + if (dtdptr == NULL) { + php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC); + return FAILURE; + } + ALLOC_ZVAL(*retval); if (dtdptr->ExternalID) { ZVAL_STRING(*retval, (char *) (dtdptr->ExternalID), 1); @@ -152,6 +173,11 @@ int dom_documenttype_system_id_read(dom_object *obj, zval **retval TSRMLS_DC) dtdptr = (xmlDtdPtr) dom_object_get_node(obj); + if (dtdptr == NULL) { + php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC); + return FAILURE; + } + ALLOC_ZVAL(*retval); if (dtdptr->SystemID) { ZVAL_STRING(*retval, (char *) (dtdptr->SystemID), 1); @@ -180,6 +206,11 @@ int dom_documenttype_internal_subset_read(dom_object *obj, zval **retval TSRMLS_ dtdptr = (xmlDtdPtr) dom_object_get_node(obj); + if (dtdptr == NULL) { + php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC); + return FAILURE; + } + ALLOC_ZVAL(*retval); if (dtdptr->doc != NULL && ((intsubset = dtdptr->doc->intSubset) != NULL)) { diff --git a/ext/dom/element.c b/ext/dom/element.c index 3c6bfa183b0..ac5cd0311dd 100644 --- a/ext/dom/element.c +++ b/ext/dom/element.c @@ -109,6 +109,12 @@ int dom_element_tag_name_read(dom_object *obj, zval **retval TSRMLS_DC) xmlChar *qname; nodep = dom_object_get_node(obj); + + if (nodep == NULL) { + php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC); + return FAILURE; + } + ALLOC_ZVAL(*retval); ns = nodep->ns; if (ns != NULL && ns->prefix) { diff --git a/ext/dom/entity.c b/ext/dom/entity.c index c8327808cd5..9e7420dac47 100644 --- a/ext/dom/entity.c +++ b/ext/dom/entity.c @@ -52,6 +52,11 @@ int dom_entity_public_id_read(dom_object *obj, zval **retval TSRMLS_DC) nodep = (xmlEntity *) dom_object_get_node(obj); + if (nodep == NULL) { + php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC); + return FAILURE; + } + ALLOC_ZVAL(*retval); if (nodep->etype != XML_EXTERNAL_GENERAL_UNPARSED_ENTITY) { ZVAL_NULL(*retval); @@ -77,6 +82,11 @@ int dom_entity_system_id_read(dom_object *obj, zval **retval TSRMLS_DC) nodep = (xmlEntity *) dom_object_get_node(obj); + if (nodep == NULL) { + php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC); + return FAILURE; + } + ALLOC_ZVAL(*retval); if (nodep->etype != XML_EXTERNAL_GENERAL_UNPARSED_ENTITY) { ZVAL_NULL(*retval); @@ -103,6 +113,11 @@ int dom_entity_notation_name_read(dom_object *obj, zval **retval TSRMLS_DC) nodep = (xmlEntity *) dom_object_get_node(obj); + if (nodep == NULL) { + php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC); + return FAILURE; + } + ALLOC_ZVAL(*retval); if (nodep->etype != XML_EXTERNAL_GENERAL_UNPARSED_ENTITY) { ZVAL_NULL(*retval); diff --git a/ext/dom/node.c b/ext/dom/node.c index b0aa096d1b6..d6843364fae 100644 --- a/ext/dom/node.c +++ b/ext/dom/node.c @@ -86,6 +86,11 @@ int dom_node_node_name_read(dom_object *obj, zval **retval TSRMLS_DC) nodep = dom_object_get_node(obj); + if (nodep == NULL) { + php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC); + return FAILURE; + } + switch (nodep->type) { case XML_ATTRIBUTE_NODE: case XML_ELEMENT_NODE: @@ -170,6 +175,12 @@ int dom_node_node_value_read(dom_object *obj, zval **retval TSRMLS_DC) char *str = NULL; nodep = dom_object_get_node(obj); + + if (nodep == NULL) { + php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC); + return FAILURE; + } + /* Access to Element node is implemented as a convience method */ switch (nodep->type) { case XML_ATTRIBUTE_NODE: @@ -209,6 +220,11 @@ int dom_node_node_value_write(dom_object *obj, zval *newval TSRMLS_DC) nodep = dom_object_get_node(obj); + if (nodep == NULL) { + php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC); + return FAILURE; + } + /* Access to Element node is implemented as a convience method */ switch (nodep->type) { case XML_ELEMENT_NODE: @@ -255,6 +271,11 @@ int dom_node_node_type_read(dom_object *obj, zval **retval TSRMLS_DC) nodep = dom_object_get_node(obj); + if (nodep == NULL) { + php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC); + return FAILURE; + } + ALLOC_ZVAL(*retval); /* Specs dictate that they are both type XML_DOCUMENT_TYPE_NODE */ @@ -283,6 +304,11 @@ int dom_node_parent_node_read(dom_object *obj, zval **retval TSRMLS_DC) nodep = dom_object_get_node(obj); + if (nodep == NULL) { + php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC); + return FAILURE; + } + nodeparent = nodep->parent; if (!nodeparent) { return FAILURE; @@ -313,6 +339,11 @@ int dom_node_child_nodes_read(dom_object *obj, zval **retval TSRMLS_DC) nodep = dom_object_get_node(obj); + if (nodep == NULL) { + php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC); + return FAILURE; + } + ALLOC_ZVAL(*retval); if (dom_node_children_valid(nodep) == FAILURE) { @@ -342,6 +373,11 @@ int dom_node_first_child_read(dom_object *obj, zval **retval TSRMLS_DC) nodep = dom_object_get_node(obj); + if (nodep == NULL) { + php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC); + return FAILURE; + } + if (dom_node_children_valid(nodep) == SUCCESS) { first = nodep->children; } @@ -375,6 +411,11 @@ int dom_node_last_child_read(dom_object *obj, zval **retval TSRMLS_DC) nodep = dom_object_get_node(obj); + if (nodep == NULL) { + php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC); + return FAILURE; + } + if (dom_node_children_valid(nodep) == SUCCESS) { last = nodep->last; } @@ -408,6 +449,11 @@ int dom_node_previous_sibling_read(dom_object *obj, zval **retval TSRMLS_DC) nodep = dom_object_get_node(obj); + if (nodep == NULL) { + php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC); + return FAILURE; + } + prevsib = nodep->prev; if (!prevsib) { return FAILURE; @@ -438,6 +484,11 @@ int dom_node_next_sibling_read(dom_object *obj, zval **retval TSRMLS_DC) nodep = dom_object_get_node(obj); + if (nodep == NULL) { + php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC); + return FAILURE; + } + nextsib = nodep->next; if (!nextsib) { return FAILURE; @@ -468,6 +519,11 @@ int dom_node_attributes_read(dom_object *obj, zval **retval TSRMLS_DC) nodep = dom_object_get_node(obj); + if (nodep == NULL) { + php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC); + return FAILURE; + } + ALLOC_ZVAL(*retval); if (nodep->type == XML_ELEMENT_NODE) { @@ -498,6 +554,11 @@ int dom_node_owner_document_read(dom_object *obj, zval **retval TSRMLS_DC) nodep = dom_object_get_node(obj); + if (nodep == NULL) { + php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC); + return FAILURE; + } + if (nodep->type == XML_DOCUMENT_NODE || nodep->type == XML_HTML_DOCUMENT_NODE) { ALLOC_ZVAL(*retval); ZVAL_NULL(*retval); @@ -534,6 +595,11 @@ int dom_node_namespace_uri_read(dom_object *obj, zval **retval TSRMLS_DC) nodep = dom_object_get_node(obj); + if (nodep == NULL) { + php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC); + return FAILURE; + } + switch (nodep->type) { case XML_ELEMENT_NODE: case XML_ATTRIBUTE_NODE: @@ -575,6 +641,11 @@ int dom_node_prefix_read(dom_object *obj, zval **retval TSRMLS_DC) nodep = dom_object_get_node(obj); + if (nodep == NULL) { + php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC); + return FAILURE; + } + switch (nodep->type) { case XML_ELEMENT_NODE: case XML_ATTRIBUTE_NODE: @@ -611,6 +682,11 @@ int dom_node_prefix_write(dom_object *obj, zval *newval TSRMLS_DC) nodep = dom_object_get_node(obj); + if (nodep == NULL) { + php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC); + return FAILURE; + } + switch (nodep->type) { case XML_ELEMENT_NODE: case XML_ATTRIBUTE_NODE: @@ -682,6 +758,11 @@ int dom_node_local_name_read(dom_object *obj, zval **retval TSRMLS_DC) nodep = dom_object_get_node(obj); + if (nodep == NULL) { + php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC); + return FAILURE; + } + ALLOC_ZVAL(*retval); if (nodep->type == XML_ELEMENT_NODE || nodep->type == XML_ATTRIBUTE_NODE || nodep->type == XML_NAMESPACE_DECL) { @@ -709,6 +790,11 @@ int dom_node_base_uri_read(dom_object *obj, zval **retval TSRMLS_DC) nodep = dom_object_get_node(obj); + if (nodep == NULL) { + php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC); + return FAILURE; + } + ALLOC_ZVAL(*retval); baseuri = xmlNodeGetBase(nodep->doc, nodep); @@ -738,6 +824,11 @@ int dom_node_text_content_read(dom_object *obj, zval **retval TSRMLS_DC) nodep = dom_object_get_node(obj); + if (nodep == NULL) { + php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC); + return FAILURE; + } + str = xmlNodeGetContent(nodep); ALLOC_ZVAL(*retval); diff --git a/ext/dom/notation.c b/ext/dom/notation.c index 01e8f6db954..f43d6ae12cf 100644 --- a/ext/dom/notation.c +++ b/ext/dom/notation.c @@ -51,6 +51,12 @@ int dom_notation_public_id_read(dom_object *obj, zval **retval TSRMLS_DC) xmlNotationPtr nodep; nodep = (xmlNotationPtr) dom_object_get_node(obj); + + if (nodep == NULL) { + php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC); + return FAILURE; + } + ALLOC_ZVAL(*retval); if (nodep->PublicID) { ZVAL_STRING(*retval, (char *) (nodep->PublicID), 1); @@ -75,6 +81,12 @@ int dom_notation_system_id_read(dom_object *obj, zval **retval TSRMLS_DC) xmlNotationPtr nodep; nodep = (xmlNotationPtr) dom_object_get_node(obj); + + if (nodep == NULL) { + php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC); + return FAILURE; + } + ALLOC_ZVAL(*retval); if (nodep->SystemID) { ZVAL_STRING(*retval, (char *) (nodep->PublicID), 1); diff --git a/ext/dom/processinginstruction.c b/ext/dom/processinginstruction.c index c73d2d23ae3..b17e11bc9b2 100644 --- a/ext/dom/processinginstruction.c +++ b/ext/dom/processinginstruction.c @@ -86,6 +86,11 @@ int dom_processinginstruction_target_read(dom_object *obj, zval **retval TSRMLS_ nodep = dom_object_get_node(obj); + if (nodep == NULL) { + php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC); + return FAILURE; + } + ALLOC_ZVAL(*retval); ZVAL_STRING(*retval, (char *) (nodep->name), 1); @@ -108,6 +113,11 @@ int dom_processinginstruction_data_read(dom_object *obj, zval **retval TSRMLS_DC nodep = dom_object_get_node(obj); + if (nodep == NULL) { + php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC); + return FAILURE; + } + ALLOC_ZVAL(*retval); @@ -128,6 +138,11 @@ int dom_processinginstruction_data_write(dom_object *obj, zval *newval TSRMLS_DC nodep = dom_object_get_node(obj); + if (nodep == NULL) { + php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC); + return FAILURE; + } + if (newval->type != IS_STRING) { if(newval->refcount > 1) { value_copy = *newval; diff --git a/ext/dom/text.c b/ext/dom/text.c index 05fca65ded7..85230c89c61 100644 --- a/ext/dom/text.c +++ b/ext/dom/text.c @@ -85,6 +85,11 @@ int dom_text_whole_text_read(dom_object *obj, zval **retval TSRMLS_DC) node = dom_object_get_node(obj); + if (node == NULL) { + php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC); + return FAILURE; + } + ALLOC_ZVAL(*retval); wholetext = xmlNodeListGetString(node->doc, node, 1); ZVAL_STRING(*retval, wholetext, 1);