From 539d8d9259cb574b03c6844e13c0edb40deb682c Mon Sep 17 00:00:00 2001 From: Niels Dossche <7771979+nielsdos@users.noreply.github.com> Date: Sat, 9 Mar 2024 18:05:28 +0100 Subject: [PATCH] Use common helper macro for getting the node in property handlers --- ext/dom/attr.c | 34 +---- ext/dom/characterdata.c | 26 +--- ext/dom/document.c | 103 ++++----------- ext/dom/documenttype.c | 63 +++------- ext/dom/dom_properties.h | 7 ++ ext/dom/element.c | 15 +-- ext/dom/entity.c | 22 +--- ext/dom/html_document.c | 7 +- ext/dom/node.c | 216 +++++++------------------------- ext/dom/notation.c | 15 +-- ext/dom/parentnode.c | 34 ++--- ext/dom/processinginstruction.c | 28 +---- ext/dom/text.c | 11 +- 13 files changed, 123 insertions(+), 458 deletions(-) diff --git a/ext/dom/attr.c b/ext/dom/attr.c index 1e39e5f1642..302e52acb83 100644 --- a/ext/dom/attr.c +++ b/ext/dom/attr.c @@ -24,6 +24,7 @@ #if defined(HAVE_LIBXML) && defined(HAVE_DOM) #include "php_dom.h" +#include "dom_properties.h" /* * class DOMAttr extends DOMNode @@ -77,12 +78,7 @@ Since: */ zend_result dom_attr_name_read(dom_object *obj, zval *retval) { - xmlAttrPtr attrp = (xmlAttrPtr) dom_object_get_node(obj); - - if (attrp == NULL) { - php_dom_throw_error(INVALID_STATE_ERR, true); - return FAILURE; - } + DOM_PROP_NODE(xmlAttrPtr, attrp, obj); if (php_dom_follow_spec_intern(obj)) { zend_string *str = dom_node_get_node_name_attribute_or_element((xmlNodePtr) attrp, false); @@ -117,14 +113,9 @@ Since: */ zend_result dom_attr_value_read(dom_object *obj, zval *retval) { - xmlAttrPtr attrp = (xmlAttrPtr) dom_object_get_node(obj); + DOM_PROP_NODE(xmlAttrPtr, attrp, obj); xmlChar *content; - if (attrp == NULL) { - php_dom_throw_error(INVALID_STATE_ERR, true); - return FAILURE; - } - /* Can't avoid a content copy because it's an attribute node */ if ((content = xmlNodeGetContent((xmlNodePtr) attrp)) != NULL) { ZVAL_STRING(retval, (char *) content); @@ -139,12 +130,7 @@ zend_result dom_attr_value_read(dom_object *obj, zval *retval) zend_result dom_attr_value_write(dom_object *obj, zval *newval) { - xmlAttrPtr attrp = (xmlAttrPtr) dom_object_get_node(obj); - - if (attrp == NULL) { - php_dom_throw_error(INVALID_STATE_ERR, true); - return FAILURE; - } + DOM_PROP_NODE(xmlAttrPtr, attrp, obj); /* Typed property, this is already a string */ ZEND_ASSERT(Z_TYPE_P(newval) == IS_STRING); @@ -171,16 +157,9 @@ Since: DOM Level 2 */ zend_result dom_attr_owner_element_read(dom_object *obj, zval *retval) { - xmlNodePtr nodep, nodeparent; + DOM_PROP_NODE(xmlNodePtr, nodep, obj); - nodep = dom_object_get_node(obj); - - if (nodep == NULL) { - php_dom_throw_error(INVALID_STATE_ERR, true); - return FAILURE; - } - - nodeparent = nodep->parent; + xmlNodePtr nodeparent = nodep->parent; if (!nodeparent) { ZVAL_NULL(retval); return SUCCESS; @@ -188,7 +167,6 @@ zend_result dom_attr_owner_element_read(dom_object *obj, zval *retval) php_dom_create_object(nodeparent, retval, obj); return SUCCESS; - } /* }}} */ diff --git a/ext/dom/characterdata.c b/ext/dom/characterdata.c index cef51c36367..6bd5811fdff 100644 --- a/ext/dom/characterdata.c +++ b/ext/dom/characterdata.c @@ -22,6 +22,7 @@ #include "php.h" #if defined(HAVE_LIBXML) && defined(HAVE_DOM) #include "php_dom.h" +#include "dom_properties.h" /* * class DOMCharacterData extends DOMNode @@ -55,26 +56,14 @@ Since: */ zend_result dom_characterdata_data_read(dom_object *obj, zval *retval) { - xmlNodePtr nodep = dom_object_get_node(obj); - - if (nodep == NULL) { - php_dom_throw_error(INVALID_STATE_ERR, true); - return FAILURE; - } - + DOM_PROP_NODE(xmlNodePtr, nodep, obj); php_dom_get_content_into_zval(nodep, retval, false); - return SUCCESS; } zend_result dom_characterdata_data_write(dom_object *obj, zval *newval) { - xmlNode *nodep = dom_object_get_node(obj); - - if (nodep == NULL) { - php_dom_throw_error(INVALID_STATE_ERR, true); - return FAILURE; - } + DOM_PROP_NODE(xmlNodePtr, nodep, obj); /* Typed property, this is already a string */ ZEND_ASSERT(Z_TYPE_P(newval) == IS_STRING); @@ -94,14 +83,9 @@ Since: */ zend_result dom_characterdata_length_read(dom_object *obj, zval *retval) { - xmlNodePtr nodep = dom_object_get_node(obj); + DOM_PROP_NODE(xmlNodePtr, nodep, obj); + long length = 0; - - if (nodep == NULL) { - php_dom_throw_error(INVALID_STATE_ERR, true); - return FAILURE; - } - if (nodep->content) { length = xmlUTF8Strlen(nodep->content); } diff --git a/ext/dom/document.c b/ext/dom/document.c index d2e1f529c1f..5e2457483f6 100644 --- a/ext/dom/document.c +++ b/ext/dom/document.c @@ -25,6 +25,7 @@ #include "namespace_compat.h" #include "xml_serializer.h" #include "internal_helpers.h" +#include "dom_properties.h" #include #ifdef LIBXML_SCHEMAS_ENABLED #include @@ -45,15 +46,9 @@ Since: */ zend_result dom_document_doctype_read(dom_object *obj, zval *retval) { - xmlDoc *docp = (xmlDocPtr) dom_object_get_node(obj); - xmlDtdPtr dtdptr; + DOM_PROP_NODE(xmlDocPtr, docp, obj); - if (docp == NULL) { - php_dom_throw_error(INVALID_STATE_ERR, true); - return FAILURE; - } - - dtdptr = xmlGetIntSubset(docp); + xmlDtdPtr dtdptr = xmlGetIntSubset(docp); if (!dtdptr) { ZVAL_NULL(retval); return SUCCESS; @@ -84,15 +79,9 @@ Since: */ zend_result dom_document_document_element_read(dom_object *obj, zval *retval) { - xmlDoc *docp = (xmlDocPtr) dom_object_get_node(obj); - xmlNode *root; + DOM_PROP_NODE(xmlDocPtr, docp, obj); - if (docp == NULL) { - php_dom_throw_error(INVALID_STATE_ERR, true); - return FAILURE; - } - - root = xmlDocGetRootElement(docp); + xmlNodePtr root = xmlDocGetRootElement(docp); if (!root) { ZVAL_NULL(retval); return SUCCESS; @@ -110,15 +99,9 @@ Since: DOM Level 3 */ zend_result dom_document_encoding_read(dom_object *obj, zval *retval) { - xmlDoc *docp = (xmlDocPtr) dom_object_get_node(obj); - char *encoding; + DOM_PROP_NODE(xmlDocPtr, docp, obj); - if (docp == NULL) { - php_dom_throw_error(INVALID_STATE_ERR, true); - return FAILURE; - } - - encoding = (char *) docp->encoding; + const char *encoding = (const char *) docp->encoding; if (encoding != NULL) { ZVAL_STRING(retval, encoding); @@ -131,13 +114,7 @@ zend_result dom_document_encoding_read(dom_object *obj, zval *retval) zend_result dom_document_encoding_write(dom_object *obj, zval *newval) { - xmlDoc *docp = (xmlDocPtr) dom_object_get_node(obj); - xmlCharEncodingHandlerPtr handler; - - if (docp == NULL) { - php_dom_throw_error(INVALID_STATE_ERR, true); - return FAILURE; - } + DOM_PROP_NODE(xmlDocPtr, docp, obj); /* Typed property, can only be IS_STRING or IS_NULL. */ ZEND_ASSERT(Z_TYPE_P(newval) == IS_STRING || Z_TYPE_P(newval) == IS_NULL); @@ -146,9 +123,9 @@ zend_result dom_document_encoding_write(dom_object *obj, zval *newval) goto invalid_encoding; } - zend_string *str = Z_STR_P(newval); + const zend_string *str = Z_STR_P(newval); - handler = xmlFindCharEncodingHandler(ZSTR_VAL(str)); + xmlCharEncodingHandlerPtr handler = xmlFindCharEncodingHandler(ZSTR_VAL(str)); if (handler != NULL) { xmlCharEncCloseFunc(handler); @@ -176,30 +153,16 @@ Since: DOM Level 3 */ zend_result dom_document_standalone_read(dom_object *obj, zval *retval) { - xmlDoc *docp; - - docp = (xmlDocPtr) dom_object_get_node(obj); - - if (docp == NULL) { - php_dom_throw_error(INVALID_STATE_ERR, true); - return FAILURE; - } - + DOM_PROP_NODE(xmlDocPtr, docp, obj); ZVAL_BOOL(retval, docp->standalone > 0); return SUCCESS; } zend_result dom_document_standalone_write(dom_object *obj, zval *newval) { - xmlDoc *docp = (xmlDocPtr) dom_object_get_node(obj); - zend_long standalone; + DOM_PROP_NODE(xmlDocPtr, docp, obj); - if (docp == NULL) { - php_dom_throw_error(INVALID_STATE_ERR, true); - return FAILURE; - } - - standalone = zval_get_long(newval); + zend_long standalone = zval_get_long(newval); docp->standalone = ZEND_NORMALIZE_BOOL(standalone); return SUCCESS; @@ -214,15 +177,9 @@ Since: DOM Level 3 */ zend_result dom_document_version_read(dom_object *obj, zval *retval) { - xmlDoc *docp = (xmlDocPtr) dom_object_get_node(obj); - char *version; + DOM_PROP_NODE(xmlDocPtr, docp, obj); - if (docp == NULL) { - php_dom_throw_error(INVALID_STATE_ERR, true); - return FAILURE; - } - - version = (char *) docp->version; + const char *version = (const char *) docp->version; if (version != NULL) { ZVAL_STRING(retval, version); @@ -235,15 +192,9 @@ zend_result dom_document_version_read(dom_object *obj, zval *retval) zend_result dom_document_version_write(dom_object *obj, zval *newval) { - xmlDoc *docp = (xmlDocPtr) dom_object_get_node(obj); - zend_string *str; + DOM_PROP_NODE(xmlDocPtr, docp, obj); - if (docp == NULL) { - php_dom_throw_error(INVALID_STATE_ERR, true); - return FAILURE; - } - - str = zval_try_get_string(newval); + zend_string *str = zval_try_get_string(newval); if (UNEXPECTED(!str)) { return FAILURE; } @@ -425,15 +376,9 @@ Since: DOM Level 3 */ zend_result dom_document_document_uri_read(dom_object *obj, zval *retval) { - xmlDoc *docp = (xmlDocPtr) dom_object_get_node(obj); - char *url; + DOM_PROP_NODE(xmlDocPtr, docp, obj); - if (docp == NULL) { - php_dom_throw_error(INVALID_STATE_ERR, true); - return FAILURE; - } - - url = (char *) docp->URL; + const char *url = (const char *) docp->URL; if (url != NULL) { ZVAL_STRING(retval, url); } else { @@ -449,15 +394,9 @@ zend_result dom_document_document_uri_read(dom_object *obj, zval *retval) zend_result dom_document_document_uri_write(dom_object *obj, zval *newval) { - xmlDoc *docp = (xmlDocPtr) dom_object_get_node(obj); - zend_string *str; + DOM_PROP_NODE(xmlDocPtr, docp, obj); - if (docp == NULL) { - php_dom_throw_error(INVALID_STATE_ERR, true); - return FAILURE; - } - - str = zval_try_get_string(newval); + zend_string *str = zval_try_get_string(newval); if (UNEXPECTED(!str)) { return FAILURE; } diff --git a/ext/dom/documenttype.c b/ext/dom/documenttype.c index 2715363c0d7..5fe9f3626ff 100644 --- a/ext/dom/documenttype.c +++ b/ext/dom/documenttype.c @@ -22,6 +22,7 @@ #include "php.h" #if defined(HAVE_LIBXML) && defined(HAVE_DOM) #include "php_dom.h" +#include "dom_properties.h" /* {{{ name string readonly=yes @@ -30,15 +31,8 @@ Since: */ zend_result dom_documenttype_name_read(dom_object *obj, zval *retval) { - xmlDtdPtr dtdptr = (xmlDtdPtr) dom_object_get_node(obj); - - if (dtdptr == NULL) { - php_dom_throw_error(INVALID_STATE_ERR, true); - return FAILURE; - } - + DOM_PROP_NODE(xmlDtdPtr, dtdptr, obj); ZVAL_STRING(retval, dtdptr->name ? (char *) (dtdptr->name) : ""); - return SUCCESS; } @@ -51,20 +45,13 @@ Since: */ zend_result dom_documenttype_entities_read(dom_object *obj, zval *retval) { - xmlDtdPtr doctypep = (xmlDtdPtr) dom_object_get_node(obj); - xmlHashTable *entityht; - dom_object *intern; - - if (doctypep == NULL) { - php_dom_throw_error(INVALID_STATE_ERR, true); - return FAILURE; - } + DOM_PROP_NODE(xmlDtdPtr, dtdptr, obj); php_dom_create_iterator(retval, DOM_DTD_NAMEDNODEMAP, php_dom_follow_spec_intern(obj)); - entityht = (xmlHashTable *) doctypep->entities; + xmlHashTable *entityht = (xmlHashTable *) dtdptr->entities; - intern = Z_DOMOBJ_P(retval); + dom_object *intern = Z_DOMOBJ_P(retval); dom_namednode_iter(obj, XML_ENTITY_NODE, intern, entityht, NULL, 0, NULL, 0); return SUCCESS; @@ -79,20 +66,13 @@ Since: */ zend_result dom_documenttype_notations_read(dom_object *obj, zval *retval) { - xmlDtdPtr doctypep = (xmlDtdPtr) dom_object_get_node(obj); - xmlHashTable *notationht; - dom_object *intern; - - if (doctypep == NULL) { - php_dom_throw_error(INVALID_STATE_ERR, true); - return FAILURE; - } + DOM_PROP_NODE(xmlDtdPtr, dtdptr, obj); php_dom_create_iterator(retval, DOM_DTD_NAMEDNODEMAP, php_dom_follow_spec_intern(obj)); - notationht = (xmlHashTable *) doctypep->notations; + xmlHashTable *notationht = (xmlHashTable *) dtdptr->notations; - intern = Z_DOMOBJ_P(retval); + dom_object *intern = Z_DOMOBJ_P(retval); dom_namednode_iter(obj, XML_NOTATION_NODE, intern, notationht, NULL, 0, NULL, 0); return SUCCESS; @@ -107,20 +87,15 @@ Since: DOM Level 2 */ zend_result dom_documenttype_public_id_read(dom_object *obj, zval *retval) { - xmlDtdPtr dtdptr = (xmlDtdPtr) dom_object_get_node(obj); - - if (dtdptr == NULL) { - php_dom_throw_error(INVALID_STATE_ERR, true); - return FAILURE; - } + DOM_PROP_NODE(xmlDtdPtr, dtdptr, obj); if (dtdptr->ExternalID) { ZVAL_STRING(retval, (char *) (dtdptr->ExternalID)); } else { ZVAL_EMPTY_STRING(retval); } - return SUCCESS; + return SUCCESS; } /* }}} */ @@ -132,18 +107,14 @@ Since: DOM Level 2 */ zend_result dom_documenttype_system_id_read(dom_object *obj, zval *retval) { - xmlDtdPtr dtdptr = (xmlDtdPtr) dom_object_get_node(obj); - - if (dtdptr == NULL) { - php_dom_throw_error(INVALID_STATE_ERR, true); - return FAILURE; - } + DOM_PROP_NODE(xmlDtdPtr, dtdptr, obj); if (dtdptr->SystemID) { ZVAL_STRING(retval, (char *) (dtdptr->SystemID)); } else { ZVAL_EMPTY_STRING(retval); } + return SUCCESS; } @@ -156,14 +127,9 @@ Since: DOM Level 2 */ zend_result dom_documenttype_internal_subset_read(dom_object *obj, zval *retval) { - xmlDtdPtr dtdptr = (xmlDtdPtr) dom_object_get_node(obj); + DOM_PROP_NODE(xmlDtdPtr, dtdptr, obj); + xmlDtdPtr intsubset; - - if (dtdptr == NULL) { - php_dom_throw_error(INVALID_STATE_ERR, true); - return FAILURE; - } - if (dtdptr->doc != NULL && ((intsubset = xmlGetIntSubset(dtdptr->doc)) != NULL)) { smart_str ret_buf = {0}; xmlNodePtr cur = intsubset->children; @@ -192,7 +158,6 @@ zend_result dom_documenttype_internal_subset_read(dom_object *obj, zval *retval) ZVAL_NULL(retval); return SUCCESS; - } /* }}} */ diff --git a/ext/dom/dom_properties.h b/ext/dom/dom_properties.h index 03525707b97..a580b024796 100644 --- a/ext/dom/dom_properties.h +++ b/ext/dom/dom_properties.h @@ -145,4 +145,11 @@ zend_result dom_xpath_register_node_ns_read(dom_object *obj, zval *retval); zend_result dom_xpath_register_node_ns_write(dom_object *obj, zval *newval); #endif +#define DOM_PROP_NODE(type, name, obj) \ + type name = (type) dom_object_get_node(obj); \ + if (UNEXPECTED(name == NULL)) { \ + php_dom_throw_error(INVALID_STATE_ERR, true); \ + return FAILURE; \ + } + #endif /* DOM_PROPERTIES_H */ diff --git a/ext/dom/element.c b/ext/dom/element.c index d553f6fd634..1b9038ef429 100644 --- a/ext/dom/element.c +++ b/ext/dom/element.c @@ -24,6 +24,7 @@ #include "php_dom.h" #include "namespace_compat.h" #include "internal_helpers.h" +#include "dom_properties.h" /* * class DOMElement extends DOMNode @@ -113,12 +114,7 @@ Since: */ zend_result dom_element_tag_name_read(dom_object *obj, zval *retval) { - xmlNodePtr nodep = dom_object_get_node(obj); - - if (nodep == NULL) { - php_dom_throw_error(INVALID_STATE_ERR, true); - return FAILURE; - } + DOM_PROP_NODE(xmlNodePtr, nodep, obj); bool uppercase = php_dom_follow_spec_intern(obj) && php_dom_ns_is_html_and_document_is_html(nodep); @@ -132,12 +128,7 @@ zend_result dom_element_tag_name_read(dom_object *obj, zval *retval) static zend_result dom_element_reflected_attribute_read(dom_object *obj, zval *retval, const char *name) { - xmlNodePtr nodep = dom_object_get_node(obj); - - if (nodep == NULL) { - php_dom_throw_error(INVALID_STATE_ERR, true); - return FAILURE; - } + DOM_PROP_NODE(xmlNodePtr, nodep, obj); xmlChar *content = xmlGetNoNsProp(nodep, (const xmlChar *) name); if (content == NULL) { diff --git a/ext/dom/entity.c b/ext/dom/entity.c index 662572f64c2..95448f5ff2f 100644 --- a/ext/dom/entity.c +++ b/ext/dom/entity.c @@ -22,6 +22,7 @@ #include "php.h" #if defined(HAVE_LIBXML) && defined(HAVE_DOM) #include "php_dom.h" +#include "dom_properties.h" /* @@ -38,12 +39,7 @@ Since: */ zend_result dom_entity_public_id_read(dom_object *obj, zval *retval) { - xmlEntity *nodep = (xmlEntity *) dom_object_get_node(obj); - - if (nodep == NULL) { - php_dom_throw_error(INVALID_STATE_ERR, true); - return FAILURE; - } + DOM_PROP_NODE(xmlEntityPtr, nodep, obj); if (nodep->etype != XML_EXTERNAL_GENERAL_UNPARSED_ENTITY || !nodep->ExternalID) { ZVAL_NULL(retval); @@ -63,12 +59,7 @@ Since: */ zend_result dom_entity_system_id_read(dom_object *obj, zval *retval) { - xmlEntity *nodep = (xmlEntity *) dom_object_get_node(obj); - - if (nodep == NULL) { - php_dom_throw_error(INVALID_STATE_ERR, true); - return FAILURE; - } + DOM_PROP_NODE(xmlEntityPtr, nodep, obj); if (nodep->etype != XML_EXTERNAL_GENERAL_UNPARSED_ENTITY) { ZVAL_NULL(retval); @@ -88,12 +79,7 @@ Since: */ zend_result dom_entity_notation_name_read(dom_object *obj, zval *retval) { - xmlEntity *nodep = (xmlEntity *) dom_object_get_node(obj); - - if (nodep == NULL) { - php_dom_throw_error(INVALID_STATE_ERR, true); - return FAILURE; - } + DOM_PROP_NODE(xmlEntityPtr, nodep, obj); if (nodep->etype != XML_EXTERNAL_GENERAL_UNPARSED_ENTITY) { ZVAL_NULL(retval); diff --git a/ext/dom/html_document.c b/ext/dom/html_document.c index 29dc5381148..1a05280f2c7 100644 --- a/ext/dom/html_document.c +++ b/ext/dom/html_document.c @@ -24,6 +24,7 @@ #include "html5_parser.h" #include "html5_serializer.h" #include "namespace_compat.h" +#include "dom_properties.h" #include #include #include @@ -1313,11 +1314,7 @@ PHP_METHOD(DOM_HTMLDocument, saveHTML) zend_result dom_html_document_encoding_write(dom_object *obj, zval *newval) { - xmlDoc *docp = (xmlDocPtr) dom_object_get_node(obj); - if (docp == NULL) { - php_dom_throw_error(INVALID_STATE_ERR, true); - return FAILURE; - } + DOM_PROP_NODE(xmlDocPtr, docp, obj); /* Typed property, can only be IS_STRING or IS_NULL. */ ZEND_ASSERT(Z_TYPE_P(newval) == IS_STRING || Z_TYPE_P(newval) == IS_NULL); diff --git a/ext/dom/node.c b/ext/dom/node.c index abda6cccce9..1f36b222b54 100644 --- a/ext/dom/node.c +++ b/ext/dom/node.c @@ -24,6 +24,7 @@ #include "php_dom.h" #include "namespace_compat.h" #include "internal_helpers.h" +#include "dom_properties.h" /* * class DOMNode @@ -77,12 +78,7 @@ Since: */ zend_result dom_node_node_name_read(dom_object *obj, zval *retval) { - xmlNode *nodep = dom_object_get_node(obj); - - if (nodep == NULL) { - php_dom_throw_error(INVALID_STATE_ERR, true); - return FAILURE; - } + DOM_PROP_NODE(xmlNodePtr, nodep, obj); bool uppercase = false; @@ -143,12 +139,7 @@ Since: */ zend_result dom_node_node_value_read(dom_object *obj, zval *retval) { - xmlNode *nodep = dom_object_get_node(obj); - - if (nodep == NULL) { - php_dom_throw_error(INVALID_STATE_ERR, true); - return FAILURE; - } + DOM_PROP_NODE(xmlNodePtr, nodep, obj); /* Access to Element node is implemented as a convenience method */ switch (nodep->type) { @@ -186,15 +177,9 @@ zend_result dom_node_node_value_read(dom_object *obj, zval *retval) zend_result dom_node_node_value_write(dom_object *obj, zval *newval) { - xmlNode *nodep = dom_object_get_node(obj); - zend_string *str; + DOM_PROP_NODE(xmlNodePtr, nodep, obj); - if (nodep == NULL) { - php_dom_throw_error(INVALID_STATE_ERR, true); - return FAILURE; - } - - str = zval_try_get_string(newval); + zend_string *str = zval_try_get_string(newval); if (UNEXPECTED(!str)) { return FAILURE; } @@ -236,14 +221,7 @@ Since: */ zend_result dom_node_node_type_read(dom_object *obj, zval *retval) { - xmlNode *nodep; - - nodep = dom_object_get_node(obj); - - if (nodep == NULL) { - php_dom_throw_error(INVALID_STATE_ERR, true); - return FAILURE; - } + DOM_PROP_NODE(xmlNodePtr, nodep, obj); /* Specs dictate that they are both type XML_DOCUMENT_TYPE_NODE */ if (nodep->type == XML_DTD_NODE) { @@ -259,12 +237,7 @@ zend_result dom_node_node_type_read(dom_object *obj, zval *retval) static zend_result dom_node_parent_get(dom_object *obj, zval *retval, bool only_element) { - xmlNodePtr nodep = dom_object_get_node(obj); - - if (nodep == NULL) { - php_dom_throw_error(INVALID_STATE_ERR, true); - return FAILURE; - } + DOM_PROP_NODE(xmlNodePtr, nodep, obj); xmlNodePtr nodeparent = nodep->parent; if (!nodeparent || (only_element && nodeparent->type != XML_ELEMENT_NODE)) { @@ -307,16 +280,10 @@ Since: */ zend_result dom_node_child_nodes_read(dom_object *obj, zval *retval) { - xmlNode *nodep = dom_object_get_node(obj); - dom_object *intern; - - if (nodep == NULL) { - php_dom_throw_error(INVALID_STATE_ERR, true); - return FAILURE; - } + DOM_PROP_NODE(xmlNodePtr, nodep, obj); php_dom_create_iterator(retval, DOM_NODELIST, php_dom_follow_spec_intern(obj)); - intern = Z_DOMOBJ_P(retval); + dom_object *intern = Z_DOMOBJ_P(retval); dom_namednode_iter(obj, XML_ELEMENT_NODE, intern, NULL, NULL, 0, NULL, 0); return SUCCESS; @@ -330,15 +297,9 @@ Since: */ zend_result dom_node_first_child_read(dom_object *obj, zval *retval) { - xmlNode *nodep, *first = NULL; - - nodep = dom_object_get_node(obj); - - if (nodep == NULL) { - php_dom_throw_error(INVALID_STATE_ERR, true); - return FAILURE; - } + DOM_PROP_NODE(xmlNodePtr, nodep, obj); + xmlNodePtr first = NULL; if (dom_node_children_valid(nodep)) { first = nodep->children; } @@ -361,15 +322,9 @@ Since: */ zend_result dom_node_last_child_read(dom_object *obj, zval *retval) { - xmlNode *nodep, *last = NULL; - - nodep = dom_object_get_node(obj); - - if (nodep == NULL) { - php_dom_throw_error(INVALID_STATE_ERR, true); - return FAILURE; - } + DOM_PROP_NODE(xmlNodePtr, nodep, obj); + xmlNodePtr last = NULL; if (dom_node_children_valid(nodep)) { last = nodep->last; } @@ -392,16 +347,9 @@ Since: */ zend_result dom_node_previous_sibling_read(dom_object *obj, zval *retval) { - xmlNode *nodep, *prevsib; + DOM_PROP_NODE(xmlNodePtr, nodep, obj); - nodep = dom_object_get_node(obj); - - if (nodep == NULL) { - php_dom_throw_error(INVALID_STATE_ERR, true); - return FAILURE; - } - - prevsib = nodep->prev; + xmlNodePtr prevsib = nodep->prev; if (!prevsib) { ZVAL_NULL(retval); return SUCCESS; @@ -420,16 +368,9 @@ Since: */ zend_result dom_node_next_sibling_read(dom_object *obj, zval *retval) { - xmlNode *nodep, *nextsib; + DOM_PROP_NODE(xmlNodePtr, nodep, obj); - nodep = dom_object_get_node(obj); - - if (nodep == NULL) { - php_dom_throw_error(INVALID_STATE_ERR, true); - return FAILURE; - } - - nextsib = nodep->next; + xmlNodePtr nextsib = nodep->next; if (!nextsib) { ZVAL_NULL(retval); return SUCCESS; @@ -448,16 +389,9 @@ Since: */ zend_result dom_node_previous_element_sibling_read(dom_object *obj, zval *retval) { - xmlNode *nodep, *prevsib; + DOM_PROP_NODE(xmlNodePtr, nodep, obj); - nodep = dom_object_get_node(obj); - - if (nodep == NULL) { - php_dom_throw_error(INVALID_STATE_ERR, true); - return FAILURE; - } - - prevsib = nodep->prev; + xmlNodePtr prevsib = nodep->prev; while (prevsib && prevsib->type != XML_ELEMENT_NODE) { prevsib = prevsib->prev; @@ -481,16 +415,9 @@ Since: */ zend_result dom_node_next_element_sibling_read(dom_object *obj, zval *retval) { - xmlNode *nodep, *nextsib; + DOM_PROP_NODE(xmlNodePtr, nodep, obj); - nodep = dom_object_get_node(obj); - - if (nodep == NULL) { - php_dom_throw_error(INVALID_STATE_ERR, true); - return FAILURE; - } - - nextsib = nodep->next; + xmlNodePtr nextsib = nodep->next; while (nextsib != NULL && nextsib->type != XML_ELEMENT_NODE) { nextsib = nextsib->next; @@ -514,17 +441,11 @@ Since: */ zend_result dom_node_attributes_read(dom_object *obj, zval *retval) { - xmlNode *nodep = dom_object_get_node(obj); - dom_object *intern; - - if (nodep == NULL) { - php_dom_throw_error(INVALID_STATE_ERR, true); - return FAILURE; - } + DOM_PROP_NODE(xmlNodePtr, nodep, obj); if (nodep->type == XML_ELEMENT_NODE) { php_dom_create_iterator(retval, DOM_NAMEDNODEMAP, php_dom_follow_spec_intern(obj)); - intern = Z_DOMOBJ_P(retval); + dom_object *intern = Z_DOMOBJ_P(retval); dom_namednode_iter(obj, XML_ATTRIBUTE_NODE, intern, NULL, NULL, 0, NULL, 0); } else { ZVAL_NULL(retval); @@ -542,13 +463,7 @@ Since: */ zend_result dom_node_is_connected_read(dom_object *obj, zval *retval) { - xmlNode *nodep = dom_object_get_node(obj); - - if (nodep == NULL) { - php_dom_throw_error(INVALID_STATE_ERR, true); - return FAILURE; - } - + DOM_PROP_NODE(xmlNodePtr, nodep, obj); ZVAL_BOOL(retval, php_dom_is_node_connected(nodep)); return SUCCESS; } @@ -561,20 +476,14 @@ Since: */ zend_result dom_node_owner_document_read(dom_object *obj, zval *retval) { - xmlNode *nodep = dom_object_get_node(obj); - xmlDocPtr docp; - - if (nodep == NULL) { - php_dom_throw_error(INVALID_STATE_ERR, true); - return FAILURE; - } + DOM_PROP_NODE(xmlNodePtr, nodep, obj); if (nodep->type == XML_DOCUMENT_NODE || nodep->type == XML_HTML_DOCUMENT_NODE) { ZVAL_NULL(retval); return SUCCESS; } - docp = nodep->doc; + xmlDocPtr docp = nodep->doc; if (!docp) { return FAILURE; } @@ -592,20 +501,15 @@ Since: DOM Level 2 */ zend_result dom_node_namespace_uri_read(dom_object *obj, zval *retval) { - xmlNode *nodep = dom_object_get_node(obj); - char *str = NULL; - - if (nodep == NULL) { - php_dom_throw_error(INVALID_STATE_ERR, true); - return FAILURE; - } + DOM_PROP_NODE(xmlNodePtr, nodep, obj); + const char *str = NULL; switch (nodep->type) { case XML_ELEMENT_NODE: case XML_ATTRIBUTE_NODE: case XML_NAMESPACE_DECL: if (nodep->ns != NULL) { - str = (char *) nodep->ns->href; + str = (const char *) nodep->ns->href; } break; default: @@ -632,24 +536,19 @@ Since: DOM Level 2 */ zend_result dom_node_prefix_read(dom_object *obj, zval *retval) { - xmlNode *nodep = dom_object_get_node(obj); - xmlNsPtr ns; - char *str = NULL; - - if (nodep == NULL) { - php_dom_throw_error(INVALID_STATE_ERR, true); - return FAILURE; - } + DOM_PROP_NODE(xmlNodePtr, nodep, obj); + const char *str = NULL; switch (nodep->type) { case XML_ELEMENT_NODE: case XML_ATTRIBUTE_NODE: - case XML_NAMESPACE_DECL: - ns = nodep->ns; + case XML_NAMESPACE_DECL: { + xmlNsPtr ns = nodep->ns; if (ns != NULL && ns->prefix) { str = (char *) ns->prefix; } break; + } default: str = NULL; break; @@ -665,12 +564,7 @@ zend_result dom_node_prefix_read(dom_object *obj, zval *retval) zend_result dom_modern_node_prefix_read(dom_object *obj, zval *retval) { - xmlNode *nodep = dom_object_get_node(obj); - - if (nodep == NULL) { - php_dom_throw_error(INVALID_STATE_ERR, true); - return FAILURE; - } + DOM_PROP_NODE(xmlNodePtr, nodep, obj); xmlNsPtr ns = nodep->ns; if (ns != NULL && ns->prefix != NULL) { @@ -684,17 +578,12 @@ zend_result dom_modern_node_prefix_read(dom_object *obj, zval *retval) zend_result dom_node_prefix_write(dom_object *obj, zval *newval) { zend_string *prefix_str; - xmlNode *nodep, *nsnode = NULL; + xmlNode *nsnode = NULL; xmlNsPtr ns = NULL, curns; char *strURI; char *prefix; - nodep = dom_object_get_node(obj); - - if (nodep == NULL) { - php_dom_throw_error(INVALID_STATE_ERR, true); - return FAILURE; - } + DOM_PROP_NODE(xmlNodePtr, nodep, obj); switch (nodep->type) { case XML_ELEMENT_NODE: @@ -766,12 +655,7 @@ Since: DOM Level 2 */ zend_result dom_node_local_name_read(dom_object *obj, zval *retval) { - xmlNode *nodep = dom_object_get_node(obj); - - if (nodep == NULL) { - php_dom_throw_error(INVALID_STATE_ERR, true); - return FAILURE; - } + DOM_PROP_NODE(xmlNodePtr, nodep, obj); if (nodep->type == XML_ELEMENT_NODE || nodep->type == XML_ATTRIBUTE_NODE || nodep->type == XML_NAMESPACE_DECL) { ZVAL_STRING(retval, (char *) (nodep->name)); @@ -791,15 +675,9 @@ Since: DOM Level 3 */ zend_result dom_node_base_uri_read(dom_object *obj, zval *retval) { - xmlNode *nodep = dom_object_get_node(obj); - xmlChar *baseuri; + DOM_PROP_NODE(xmlNodePtr, nodep, obj); - if (nodep == NULL) { - php_dom_throw_error(INVALID_STATE_ERR, true); - return FAILURE; - } - - baseuri = xmlNodeGetBase(nodep->doc, nodep); + xmlChar *baseuri = xmlNodeGetBase(nodep->doc, nodep); if (baseuri) { ZVAL_STRING(retval, (const char *) baseuri); xmlFree(baseuri); @@ -842,12 +720,7 @@ static bool dom_skip_text_content(dom_object *obj, xmlNodePtr nodep) zend_result dom_node_text_content_read(dom_object *obj, zval *retval) { - xmlNode *nodep = dom_object_get_node(obj); - - if (nodep == NULL) { - php_dom_throw_error(INVALID_STATE_ERR, true); - return FAILURE; - } + DOM_PROP_NODE(xmlNodePtr, nodep, obj); if (dom_skip_text_content(obj, nodep)) { ZVAL_NULL(retval); @@ -860,12 +733,7 @@ zend_result dom_node_text_content_read(dom_object *obj, zval *retval) zend_result dom_node_text_content_write(dom_object *obj, zval *newval) { - xmlNode *nodep = dom_object_get_node(obj); - - if (nodep == NULL) { - php_dom_throw_error(INVALID_STATE_ERR, true); - return FAILURE; - } + DOM_PROP_NODE(xmlNodePtr, nodep, obj); php_libxml_invalidate_node_list_cache(obj->document); diff --git a/ext/dom/notation.c b/ext/dom/notation.c index 2a1d1863893..021df2f6fe8 100644 --- a/ext/dom/notation.c +++ b/ext/dom/notation.c @@ -22,6 +22,7 @@ #include "php.h" #if defined(HAVE_LIBXML) && defined(HAVE_DOM) #include "php_dom.h" +#include "dom_properties.h" /* * class DOMNotation extends DOMNode @@ -39,12 +40,7 @@ Since: */ zend_result dom_notation_public_id_read(dom_object *obj, zval *retval) { - xmlEntityPtr nodep = (xmlEntityPtr) dom_object_get_node(obj); - - if (nodep == NULL) { - php_dom_throw_error(INVALID_STATE_ERR, true); - return FAILURE; - } + DOM_PROP_NODE(xmlEntityPtr, nodep, obj); if (nodep->ExternalID) { ZVAL_STRING(retval, (char *) (nodep->ExternalID)); @@ -64,12 +60,7 @@ Since: */ zend_result dom_notation_system_id_read(dom_object *obj, zval *retval) { - xmlEntityPtr nodep = (xmlEntityPtr) dom_object_get_node(obj); - - if (nodep == NULL) { - php_dom_throw_error(INVALID_STATE_ERR, true); - return FAILURE; - } + DOM_PROP_NODE(xmlEntityPtr, nodep, obj); if (nodep->SystemID) { ZVAL_STRING(retval, (char *) (nodep->SystemID)); diff --git a/ext/dom/parentnode.c b/ext/dom/parentnode.c index 446d450fdaa..ce0373d4c8f 100644 --- a/ext/dom/parentnode.c +++ b/ext/dom/parentnode.c @@ -25,6 +25,7 @@ #if defined(HAVE_LIBXML) && defined(HAVE_DOM) #include "php_dom.h" #include "internal_helpers.h" +#include "dom_properties.h" /* {{{ firstElementChild DomParentNode readonly=yes @@ -32,15 +33,9 @@ URL: https://www.w3.org/TR/dom/#dom-parentnode-firstelementchild */ zend_result dom_parent_node_first_element_child_read(dom_object *obj, zval *retval) { - xmlNode *nodep, *first = NULL; - - nodep = dom_object_get_node(obj); - - if (nodep == NULL) { - php_dom_throw_error(INVALID_STATE_ERR, true); - return FAILURE; - } + DOM_PROP_NODE(xmlNodePtr, nodep, obj); + xmlNodePtr first = NULL; if (dom_node_children_valid(nodep)) { first = nodep->children; @@ -65,15 +60,9 @@ URL: https://www.w3.org/TR/dom/#dom-parentnode-lastelementchild */ zend_result dom_parent_node_last_element_child_read(dom_object *obj, zval *retval) { - xmlNode *nodep, *last = NULL; - - nodep = dom_object_get_node(obj); - - if (nodep == NULL) { - php_dom_throw_error(INVALID_STATE_ERR, true); - return FAILURE; - } + DOM_PROP_NODE(xmlNodePtr, nodep, obj); + xmlNodePtr last = NULL; if (dom_node_children_valid(nodep)) { last = nodep->last; @@ -98,18 +87,11 @@ https://www.w3.org/TR/dom/#dom-parentnode-childelementcount */ zend_result dom_parent_node_child_element_count(dom_object *obj, zval *retval) { - xmlNode *nodep, *first = NULL; + DOM_PROP_NODE(xmlNodePtr, nodep, obj); + zend_long count = 0; - - nodep = dom_object_get_node(obj); - - if (nodep == NULL) { - php_dom_throw_error(INVALID_STATE_ERR, true); - return FAILURE; - } - if (dom_node_children_valid(nodep)) { - first = nodep->children; + xmlNodePtr first = nodep->children; while (first != NULL) { if (first->type == XML_ELEMENT_NODE) { diff --git a/ext/dom/processinginstruction.c b/ext/dom/processinginstruction.c index fa42a2852f4..9b3ef3c0810 100644 --- a/ext/dom/processinginstruction.c +++ b/ext/dom/processinginstruction.c @@ -22,6 +22,7 @@ #include "php.h" #if defined(HAVE_LIBXML) && defined(HAVE_DOM) #include "php_dom.h" +#include "dom_properties.h" /* * class DOMProcessingInstruction extends DOMNode @@ -72,15 +73,8 @@ Since: */ zend_result dom_processinginstruction_target_read(dom_object *obj, zval *retval) { - xmlNodePtr nodep = dom_object_get_node(obj); - - if (nodep == NULL) { - php_dom_throw_error(INVALID_STATE_ERR, true); - return FAILURE; - } - - ZVAL_STRING(retval, (char *) (nodep->name)); - + DOM_PROP_NODE(xmlNodePtr, nodep, obj); + ZVAL_STRING(retval, (const char *) nodep->name); return SUCCESS; } @@ -93,26 +87,14 @@ Since: */ zend_result dom_processinginstruction_data_read(dom_object *obj, zval *retval) { - xmlNodePtr nodep = dom_object_get_node(obj); - - if (nodep == NULL) { - php_dom_throw_error(INVALID_STATE_ERR, true); - return FAILURE; - } - + DOM_PROP_NODE(xmlNodePtr, nodep, obj); php_dom_get_content_into_zval(nodep, retval, false); - return SUCCESS; } zend_result dom_processinginstruction_data_write(dom_object *obj, zval *newval) { - xmlNode *nodep = dom_object_get_node(obj); - - if (nodep == NULL) { - php_dom_throw_error(INVALID_STATE_ERR, true); - return FAILURE; - } + DOM_PROP_NODE(xmlNodePtr, nodep, obj); /* Typed property, this is already a string */ ZEND_ASSERT(Z_TYPE_P(newval) == IS_STRING); diff --git a/ext/dom/text.c b/ext/dom/text.c index d41f2d8def7..74847429936 100644 --- a/ext/dom/text.c +++ b/ext/dom/text.c @@ -23,6 +23,7 @@ #if defined(HAVE_LIBXML) && defined(HAVE_DOM) #include "php_dom.h" #include "dom_ce.h" +#include "dom_properties.h" /* * class DOMText extends DOMCharacterData @@ -66,16 +67,10 @@ Since: DOM Level 3 */ zend_result dom_text_whole_text_read(dom_object *obj, zval *retval) { - xmlNodePtr node; + DOM_PROP_NODE(xmlNodePtr, node, obj); + xmlChar *wholetext = NULL; - node = dom_object_get_node(obj); - - if (node == NULL) { - php_dom_throw_error(INVALID_STATE_ERR, true); - return FAILURE; - } - /* Find starting text node */ while (node->prev && ((node->prev->type == XML_TEXT_NODE) || (node->prev->type == XML_CDATA_SECTION_NODE))) { node = node->prev;