Use common helper macro for getting the node in property handlers

This commit is contained in:
Niels Dossche 2024-03-09 18:05:28 +01:00
parent 649394d357
commit 539d8d9259
13 changed files with 123 additions and 458 deletions

View file

@ -24,6 +24,7 @@
#if defined(HAVE_LIBXML) && defined(HAVE_DOM) #if defined(HAVE_LIBXML) && defined(HAVE_DOM)
#include "php_dom.h" #include "php_dom.h"
#include "dom_properties.h"
/* /*
* class DOMAttr extends DOMNode * class DOMAttr extends DOMNode
@ -77,12 +78,7 @@ Since:
*/ */
zend_result dom_attr_name_read(dom_object *obj, zval *retval) zend_result dom_attr_name_read(dom_object *obj, zval *retval)
{ {
xmlAttrPtr attrp = (xmlAttrPtr) dom_object_get_node(obj); DOM_PROP_NODE(xmlAttrPtr, attrp, obj);
if (attrp == NULL) {
php_dom_throw_error(INVALID_STATE_ERR, true);
return FAILURE;
}
if (php_dom_follow_spec_intern(obj)) { if (php_dom_follow_spec_intern(obj)) {
zend_string *str = dom_node_get_node_name_attribute_or_element((xmlNodePtr) attrp, false); 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) 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; 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 */ /* Can't avoid a content copy because it's an attribute node */
if ((content = xmlNodeGetContent((xmlNodePtr) attrp)) != NULL) { if ((content = xmlNodeGetContent((xmlNodePtr) attrp)) != NULL) {
ZVAL_STRING(retval, (char *) content); 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) zend_result dom_attr_value_write(dom_object *obj, zval *newval)
{ {
xmlAttrPtr attrp = (xmlAttrPtr) dom_object_get_node(obj); DOM_PROP_NODE(xmlAttrPtr, attrp, obj);
if (attrp == NULL) {
php_dom_throw_error(INVALID_STATE_ERR, true);
return FAILURE;
}
/* Typed property, this is already a string */ /* Typed property, this is already a string */
ZEND_ASSERT(Z_TYPE_P(newval) == IS_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) 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); xmlNodePtr nodeparent = nodep->parent;
if (nodep == NULL) {
php_dom_throw_error(INVALID_STATE_ERR, true);
return FAILURE;
}
nodeparent = nodep->parent;
if (!nodeparent) { if (!nodeparent) {
ZVAL_NULL(retval); ZVAL_NULL(retval);
return SUCCESS; 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); php_dom_create_object(nodeparent, retval, obj);
return SUCCESS; return SUCCESS;
} }
/* }}} */ /* }}} */

View file

@ -22,6 +22,7 @@
#include "php.h" #include "php.h"
#if defined(HAVE_LIBXML) && defined(HAVE_DOM) #if defined(HAVE_LIBXML) && defined(HAVE_DOM)
#include "php_dom.h" #include "php_dom.h"
#include "dom_properties.h"
/* /*
* class DOMCharacterData extends DOMNode * class DOMCharacterData extends DOMNode
@ -55,26 +56,14 @@ Since:
*/ */
zend_result dom_characterdata_data_read(dom_object *obj, zval *retval) zend_result dom_characterdata_data_read(dom_object *obj, zval *retval)
{ {
xmlNodePtr nodep = dom_object_get_node(obj); DOM_PROP_NODE(xmlNodePtr, nodep, obj);
if (nodep == NULL) {
php_dom_throw_error(INVALID_STATE_ERR, true);
return FAILURE;
}
php_dom_get_content_into_zval(nodep, retval, false); php_dom_get_content_into_zval(nodep, retval, false);
return SUCCESS; return SUCCESS;
} }
zend_result dom_characterdata_data_write(dom_object *obj, zval *newval) zend_result dom_characterdata_data_write(dom_object *obj, zval *newval)
{ {
xmlNode *nodep = dom_object_get_node(obj); DOM_PROP_NODE(xmlNodePtr, nodep, obj);
if (nodep == NULL) {
php_dom_throw_error(INVALID_STATE_ERR, true);
return FAILURE;
}
/* Typed property, this is already a string */ /* Typed property, this is already a string */
ZEND_ASSERT(Z_TYPE_P(newval) == IS_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) 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; long length = 0;
if (nodep == NULL) {
php_dom_throw_error(INVALID_STATE_ERR, true);
return FAILURE;
}
if (nodep->content) { if (nodep->content) {
length = xmlUTF8Strlen(nodep->content); length = xmlUTF8Strlen(nodep->content);
} }

View file

@ -25,6 +25,7 @@
#include "namespace_compat.h" #include "namespace_compat.h"
#include "xml_serializer.h" #include "xml_serializer.h"
#include "internal_helpers.h" #include "internal_helpers.h"
#include "dom_properties.h"
#include <libxml/SAX.h> #include <libxml/SAX.h>
#ifdef LIBXML_SCHEMAS_ENABLED #ifdef LIBXML_SCHEMAS_ENABLED
#include <libxml/relaxng.h> #include <libxml/relaxng.h>
@ -45,15 +46,9 @@ Since:
*/ */
zend_result dom_document_doctype_read(dom_object *obj, zval *retval) zend_result dom_document_doctype_read(dom_object *obj, zval *retval)
{ {
xmlDoc *docp = (xmlDocPtr) dom_object_get_node(obj); DOM_PROP_NODE(xmlDocPtr, docp, obj);
xmlDtdPtr dtdptr;
if (docp == NULL) { xmlDtdPtr dtdptr = xmlGetIntSubset(docp);
php_dom_throw_error(INVALID_STATE_ERR, true);
return FAILURE;
}
dtdptr = xmlGetIntSubset(docp);
if (!dtdptr) { if (!dtdptr) {
ZVAL_NULL(retval); ZVAL_NULL(retval);
return SUCCESS; return SUCCESS;
@ -84,15 +79,9 @@ Since:
*/ */
zend_result dom_document_document_element_read(dom_object *obj, zval *retval) zend_result dom_document_document_element_read(dom_object *obj, zval *retval)
{ {
xmlDoc *docp = (xmlDocPtr) dom_object_get_node(obj); DOM_PROP_NODE(xmlDocPtr, docp, obj);
xmlNode *root;
if (docp == NULL) { xmlNodePtr root = xmlDocGetRootElement(docp);
php_dom_throw_error(INVALID_STATE_ERR, true);
return FAILURE;
}
root = xmlDocGetRootElement(docp);
if (!root) { if (!root) {
ZVAL_NULL(retval); ZVAL_NULL(retval);
return SUCCESS; return SUCCESS;
@ -110,15 +99,9 @@ Since: DOM Level 3
*/ */
zend_result dom_document_encoding_read(dom_object *obj, zval *retval) zend_result dom_document_encoding_read(dom_object *obj, zval *retval)
{ {
xmlDoc *docp = (xmlDocPtr) dom_object_get_node(obj); DOM_PROP_NODE(xmlDocPtr, docp, obj);
char *encoding;
if (docp == NULL) { const char *encoding = (const char *) docp->encoding;
php_dom_throw_error(INVALID_STATE_ERR, true);
return FAILURE;
}
encoding = (char *) docp->encoding;
if (encoding != NULL) { if (encoding != NULL) {
ZVAL_STRING(retval, encoding); 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) zend_result dom_document_encoding_write(dom_object *obj, zval *newval)
{ {
xmlDoc *docp = (xmlDocPtr) dom_object_get_node(obj); DOM_PROP_NODE(xmlDocPtr, docp, obj);
xmlCharEncodingHandlerPtr handler;
if (docp == NULL) {
php_dom_throw_error(INVALID_STATE_ERR, true);
return FAILURE;
}
/* Typed property, can only be IS_STRING or IS_NULL. */ /* Typed property, can only be IS_STRING or IS_NULL. */
ZEND_ASSERT(Z_TYPE_P(newval) == IS_STRING || Z_TYPE_P(newval) == 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; 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) { if (handler != NULL) {
xmlCharEncCloseFunc(handler); xmlCharEncCloseFunc(handler);
@ -176,30 +153,16 @@ Since: DOM Level 3
*/ */
zend_result dom_document_standalone_read(dom_object *obj, zval *retval) zend_result dom_document_standalone_read(dom_object *obj, zval *retval)
{ {
xmlDoc *docp; DOM_PROP_NODE(xmlDocPtr, docp, obj);
docp = (xmlDocPtr) dom_object_get_node(obj);
if (docp == NULL) {
php_dom_throw_error(INVALID_STATE_ERR, true);
return FAILURE;
}
ZVAL_BOOL(retval, docp->standalone > 0); ZVAL_BOOL(retval, docp->standalone > 0);
return SUCCESS; return SUCCESS;
} }
zend_result dom_document_standalone_write(dom_object *obj, zval *newval) zend_result dom_document_standalone_write(dom_object *obj, zval *newval)
{ {
xmlDoc *docp = (xmlDocPtr) dom_object_get_node(obj); DOM_PROP_NODE(xmlDocPtr, docp, obj);
zend_long standalone;
if (docp == NULL) { zend_long standalone = zval_get_long(newval);
php_dom_throw_error(INVALID_STATE_ERR, true);
return FAILURE;
}
standalone = zval_get_long(newval);
docp->standalone = ZEND_NORMALIZE_BOOL(standalone); docp->standalone = ZEND_NORMALIZE_BOOL(standalone);
return SUCCESS; return SUCCESS;
@ -214,15 +177,9 @@ Since: DOM Level 3
*/ */
zend_result dom_document_version_read(dom_object *obj, zval *retval) zend_result dom_document_version_read(dom_object *obj, zval *retval)
{ {
xmlDoc *docp = (xmlDocPtr) dom_object_get_node(obj); DOM_PROP_NODE(xmlDocPtr, docp, obj);
char *version;
if (docp == NULL) { const char *version = (const char *) docp->version;
php_dom_throw_error(INVALID_STATE_ERR, true);
return FAILURE;
}
version = (char *) docp->version;
if (version != NULL) { if (version != NULL) {
ZVAL_STRING(retval, version); 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) zend_result dom_document_version_write(dom_object *obj, zval *newval)
{ {
xmlDoc *docp = (xmlDocPtr) dom_object_get_node(obj); DOM_PROP_NODE(xmlDocPtr, docp, obj);
zend_string *str;
if (docp == NULL) { zend_string *str = zval_try_get_string(newval);
php_dom_throw_error(INVALID_STATE_ERR, true);
return FAILURE;
}
str = zval_try_get_string(newval);
if (UNEXPECTED(!str)) { if (UNEXPECTED(!str)) {
return FAILURE; return FAILURE;
} }
@ -425,15 +376,9 @@ Since: DOM Level 3
*/ */
zend_result dom_document_document_uri_read(dom_object *obj, zval *retval) zend_result dom_document_document_uri_read(dom_object *obj, zval *retval)
{ {
xmlDoc *docp = (xmlDocPtr) dom_object_get_node(obj); DOM_PROP_NODE(xmlDocPtr, docp, obj);
char *url;
if (docp == NULL) { const char *url = (const char *) docp->URL;
php_dom_throw_error(INVALID_STATE_ERR, true);
return FAILURE;
}
url = (char *) docp->URL;
if (url != NULL) { if (url != NULL) {
ZVAL_STRING(retval, url); ZVAL_STRING(retval, url);
} else { } 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) zend_result dom_document_document_uri_write(dom_object *obj, zval *newval)
{ {
xmlDoc *docp = (xmlDocPtr) dom_object_get_node(obj); DOM_PROP_NODE(xmlDocPtr, docp, obj);
zend_string *str;
if (docp == NULL) { zend_string *str = zval_try_get_string(newval);
php_dom_throw_error(INVALID_STATE_ERR, true);
return FAILURE;
}
str = zval_try_get_string(newval);
if (UNEXPECTED(!str)) { if (UNEXPECTED(!str)) {
return FAILURE; return FAILURE;
} }

View file

@ -22,6 +22,7 @@
#include "php.h" #include "php.h"
#if defined(HAVE_LIBXML) && defined(HAVE_DOM) #if defined(HAVE_LIBXML) && defined(HAVE_DOM)
#include "php_dom.h" #include "php_dom.h"
#include "dom_properties.h"
/* {{{ name string /* {{{ name string
readonly=yes readonly=yes
@ -30,15 +31,8 @@ Since:
*/ */
zend_result dom_documenttype_name_read(dom_object *obj, zval *retval) zend_result dom_documenttype_name_read(dom_object *obj, zval *retval)
{ {
xmlDtdPtr dtdptr = (xmlDtdPtr) dom_object_get_node(obj); DOM_PROP_NODE(xmlDtdPtr, dtdptr, obj);
if (dtdptr == NULL) {
php_dom_throw_error(INVALID_STATE_ERR, true);
return FAILURE;
}
ZVAL_STRING(retval, dtdptr->name ? (char *) (dtdptr->name) : ""); ZVAL_STRING(retval, dtdptr->name ? (char *) (dtdptr->name) : "");
return SUCCESS; return SUCCESS;
} }
@ -51,20 +45,13 @@ Since:
*/ */
zend_result dom_documenttype_entities_read(dom_object *obj, zval *retval) zend_result dom_documenttype_entities_read(dom_object *obj, zval *retval)
{ {
xmlDtdPtr doctypep = (xmlDtdPtr) dom_object_get_node(obj); DOM_PROP_NODE(xmlDtdPtr, dtdptr, obj);
xmlHashTable *entityht;
dom_object *intern;
if (doctypep == NULL) {
php_dom_throw_error(INVALID_STATE_ERR, true);
return FAILURE;
}
php_dom_create_iterator(retval, DOM_DTD_NAMEDNODEMAP, php_dom_follow_spec_intern(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); dom_namednode_iter(obj, XML_ENTITY_NODE, intern, entityht, NULL, 0, NULL, 0);
return SUCCESS; return SUCCESS;
@ -79,20 +66,13 @@ Since:
*/ */
zend_result dom_documenttype_notations_read(dom_object *obj, zval *retval) zend_result dom_documenttype_notations_read(dom_object *obj, zval *retval)
{ {
xmlDtdPtr doctypep = (xmlDtdPtr) dom_object_get_node(obj); DOM_PROP_NODE(xmlDtdPtr, dtdptr, obj);
xmlHashTable *notationht;
dom_object *intern;
if (doctypep == NULL) {
php_dom_throw_error(INVALID_STATE_ERR, true);
return FAILURE;
}
php_dom_create_iterator(retval, DOM_DTD_NAMEDNODEMAP, php_dom_follow_spec_intern(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); dom_namednode_iter(obj, XML_NOTATION_NODE, intern, notationht, NULL, 0, NULL, 0);
return SUCCESS; return SUCCESS;
@ -107,20 +87,15 @@ Since: DOM Level 2
*/ */
zend_result dom_documenttype_public_id_read(dom_object *obj, zval *retval) zend_result dom_documenttype_public_id_read(dom_object *obj, zval *retval)
{ {
xmlDtdPtr dtdptr = (xmlDtdPtr) dom_object_get_node(obj); DOM_PROP_NODE(xmlDtdPtr, dtdptr, obj);
if (dtdptr == NULL) {
php_dom_throw_error(INVALID_STATE_ERR, true);
return FAILURE;
}
if (dtdptr->ExternalID) { if (dtdptr->ExternalID) {
ZVAL_STRING(retval, (char *) (dtdptr->ExternalID)); ZVAL_STRING(retval, (char *) (dtdptr->ExternalID));
} else { } else {
ZVAL_EMPTY_STRING(retval); 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) zend_result dom_documenttype_system_id_read(dom_object *obj, zval *retval)
{ {
xmlDtdPtr dtdptr = (xmlDtdPtr) dom_object_get_node(obj); DOM_PROP_NODE(xmlDtdPtr, dtdptr, obj);
if (dtdptr == NULL) {
php_dom_throw_error(INVALID_STATE_ERR, true);
return FAILURE;
}
if (dtdptr->SystemID) { if (dtdptr->SystemID) {
ZVAL_STRING(retval, (char *) (dtdptr->SystemID)); ZVAL_STRING(retval, (char *) (dtdptr->SystemID));
} else { } else {
ZVAL_EMPTY_STRING(retval); ZVAL_EMPTY_STRING(retval);
} }
return SUCCESS; return SUCCESS;
} }
@ -156,14 +127,9 @@ Since: DOM Level 2
*/ */
zend_result dom_documenttype_internal_subset_read(dom_object *obj, zval *retval) 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; xmlDtdPtr intsubset;
if (dtdptr == NULL) {
php_dom_throw_error(INVALID_STATE_ERR, true);
return FAILURE;
}
if (dtdptr->doc != NULL && ((intsubset = xmlGetIntSubset(dtdptr->doc)) != NULL)) { if (dtdptr->doc != NULL && ((intsubset = xmlGetIntSubset(dtdptr->doc)) != NULL)) {
smart_str ret_buf = {0}; smart_str ret_buf = {0};
xmlNodePtr cur = intsubset->children; xmlNodePtr cur = intsubset->children;
@ -192,7 +158,6 @@ zend_result dom_documenttype_internal_subset_read(dom_object *obj, zval *retval)
ZVAL_NULL(retval); ZVAL_NULL(retval);
return SUCCESS; return SUCCESS;
} }
/* }}} */ /* }}} */

View file

@ -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); zend_result dom_xpath_register_node_ns_write(dom_object *obj, zval *newval);
#endif #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 */ #endif /* DOM_PROPERTIES_H */

View file

@ -24,6 +24,7 @@
#include "php_dom.h" #include "php_dom.h"
#include "namespace_compat.h" #include "namespace_compat.h"
#include "internal_helpers.h" #include "internal_helpers.h"
#include "dom_properties.h"
/* /*
* class DOMElement extends DOMNode * class DOMElement extends DOMNode
@ -113,12 +114,7 @@ Since:
*/ */
zend_result dom_element_tag_name_read(dom_object *obj, zval *retval) zend_result dom_element_tag_name_read(dom_object *obj, zval *retval)
{ {
xmlNodePtr nodep = dom_object_get_node(obj); DOM_PROP_NODE(xmlNodePtr, nodep, obj);
if (nodep == NULL) {
php_dom_throw_error(INVALID_STATE_ERR, true);
return FAILURE;
}
bool uppercase = php_dom_follow_spec_intern(obj) && php_dom_ns_is_html_and_document_is_html(nodep); 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) static zend_result dom_element_reflected_attribute_read(dom_object *obj, zval *retval, const char *name)
{ {
xmlNodePtr nodep = dom_object_get_node(obj); DOM_PROP_NODE(xmlNodePtr, nodep, obj);
if (nodep == NULL) {
php_dom_throw_error(INVALID_STATE_ERR, true);
return FAILURE;
}
xmlChar *content = xmlGetNoNsProp(nodep, (const xmlChar *) name); xmlChar *content = xmlGetNoNsProp(nodep, (const xmlChar *) name);
if (content == NULL) { if (content == NULL) {

View file

@ -22,6 +22,7 @@
#include "php.h" #include "php.h"
#if defined(HAVE_LIBXML) && defined(HAVE_DOM) #if defined(HAVE_LIBXML) && defined(HAVE_DOM)
#include "php_dom.h" #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) zend_result dom_entity_public_id_read(dom_object *obj, zval *retval)
{ {
xmlEntity *nodep = (xmlEntity *) dom_object_get_node(obj); DOM_PROP_NODE(xmlEntityPtr, nodep, obj);
if (nodep == NULL) {
php_dom_throw_error(INVALID_STATE_ERR, true);
return FAILURE;
}
if (nodep->etype != XML_EXTERNAL_GENERAL_UNPARSED_ENTITY || !nodep->ExternalID) { if (nodep->etype != XML_EXTERNAL_GENERAL_UNPARSED_ENTITY || !nodep->ExternalID) {
ZVAL_NULL(retval); ZVAL_NULL(retval);
@ -63,12 +59,7 @@ Since:
*/ */
zend_result dom_entity_system_id_read(dom_object *obj, zval *retval) zend_result dom_entity_system_id_read(dom_object *obj, zval *retval)
{ {
xmlEntity *nodep = (xmlEntity *) dom_object_get_node(obj); DOM_PROP_NODE(xmlEntityPtr, nodep, obj);
if (nodep == NULL) {
php_dom_throw_error(INVALID_STATE_ERR, true);
return FAILURE;
}
if (nodep->etype != XML_EXTERNAL_GENERAL_UNPARSED_ENTITY) { if (nodep->etype != XML_EXTERNAL_GENERAL_UNPARSED_ENTITY) {
ZVAL_NULL(retval); ZVAL_NULL(retval);
@ -88,12 +79,7 @@ Since:
*/ */
zend_result dom_entity_notation_name_read(dom_object *obj, zval *retval) zend_result dom_entity_notation_name_read(dom_object *obj, zval *retval)
{ {
xmlEntity *nodep = (xmlEntity *) dom_object_get_node(obj); DOM_PROP_NODE(xmlEntityPtr, nodep, obj);
if (nodep == NULL) {
php_dom_throw_error(INVALID_STATE_ERR, true);
return FAILURE;
}
if (nodep->etype != XML_EXTERNAL_GENERAL_UNPARSED_ENTITY) { if (nodep->etype != XML_EXTERNAL_GENERAL_UNPARSED_ENTITY) {
ZVAL_NULL(retval); ZVAL_NULL(retval);

View file

@ -24,6 +24,7 @@
#include "html5_parser.h" #include "html5_parser.h"
#include "html5_serializer.h" #include "html5_serializer.h"
#include "namespace_compat.h" #include "namespace_compat.h"
#include "dom_properties.h"
#include <Zend/zend_smart_string.h> #include <Zend/zend_smart_string.h>
#include <lexbor/html/encoding.h> #include <lexbor/html/encoding.h>
#include <lexbor/encoding/encoding.h> #include <lexbor/encoding/encoding.h>
@ -1313,11 +1314,7 @@ PHP_METHOD(DOM_HTMLDocument, saveHTML)
zend_result dom_html_document_encoding_write(dom_object *obj, zval *newval) zend_result dom_html_document_encoding_write(dom_object *obj, zval *newval)
{ {
xmlDoc *docp = (xmlDocPtr) dom_object_get_node(obj); DOM_PROP_NODE(xmlDocPtr, docp, obj);
if (docp == NULL) {
php_dom_throw_error(INVALID_STATE_ERR, true);
return FAILURE;
}
/* Typed property, can only be IS_STRING or IS_NULL. */ /* Typed property, can only be IS_STRING or IS_NULL. */
ZEND_ASSERT(Z_TYPE_P(newval) == IS_STRING || Z_TYPE_P(newval) == IS_NULL); ZEND_ASSERT(Z_TYPE_P(newval) == IS_STRING || Z_TYPE_P(newval) == IS_NULL);

View file

@ -24,6 +24,7 @@
#include "php_dom.h" #include "php_dom.h"
#include "namespace_compat.h" #include "namespace_compat.h"
#include "internal_helpers.h" #include "internal_helpers.h"
#include "dom_properties.h"
/* /*
* class DOMNode * class DOMNode
@ -77,12 +78,7 @@ Since:
*/ */
zend_result dom_node_node_name_read(dom_object *obj, zval *retval) zend_result dom_node_node_name_read(dom_object *obj, zval *retval)
{ {
xmlNode *nodep = dom_object_get_node(obj); DOM_PROP_NODE(xmlNodePtr, nodep, obj);
if (nodep == NULL) {
php_dom_throw_error(INVALID_STATE_ERR, true);
return FAILURE;
}
bool uppercase = false; bool uppercase = false;
@ -143,12 +139,7 @@ Since:
*/ */
zend_result dom_node_node_value_read(dom_object *obj, zval *retval) zend_result dom_node_node_value_read(dom_object *obj, zval *retval)
{ {
xmlNode *nodep = dom_object_get_node(obj); DOM_PROP_NODE(xmlNodePtr, nodep, obj);
if (nodep == NULL) {
php_dom_throw_error(INVALID_STATE_ERR, true);
return FAILURE;
}
/* Access to Element node is implemented as a convenience method */ /* Access to Element node is implemented as a convenience method */
switch (nodep->type) { 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) zend_result dom_node_node_value_write(dom_object *obj, zval *newval)
{ {
xmlNode *nodep = dom_object_get_node(obj); DOM_PROP_NODE(xmlNodePtr, nodep, obj);
zend_string *str;
if (nodep == NULL) { zend_string *str = zval_try_get_string(newval);
php_dom_throw_error(INVALID_STATE_ERR, true);
return FAILURE;
}
str = zval_try_get_string(newval);
if (UNEXPECTED(!str)) { if (UNEXPECTED(!str)) {
return FAILURE; return FAILURE;
} }
@ -236,14 +221,7 @@ Since:
*/ */
zend_result dom_node_node_type_read(dom_object *obj, zval *retval) zend_result dom_node_node_type_read(dom_object *obj, zval *retval)
{ {
xmlNode *nodep; 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;
}
/* Specs dictate that they are both type XML_DOCUMENT_TYPE_NODE */ /* Specs dictate that they are both type XML_DOCUMENT_TYPE_NODE */
if (nodep->type == XML_DTD_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) static zend_result dom_node_parent_get(dom_object *obj, zval *retval, bool only_element)
{ {
xmlNodePtr nodep = dom_object_get_node(obj); DOM_PROP_NODE(xmlNodePtr, nodep, obj);
if (nodep == NULL) {
php_dom_throw_error(INVALID_STATE_ERR, true);
return FAILURE;
}
xmlNodePtr nodeparent = nodep->parent; xmlNodePtr nodeparent = nodep->parent;
if (!nodeparent || (only_element && nodeparent->type != XML_ELEMENT_NODE)) { 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) zend_result dom_node_child_nodes_read(dom_object *obj, zval *retval)
{ {
xmlNode *nodep = dom_object_get_node(obj); DOM_PROP_NODE(xmlNodePtr, nodep, obj);
dom_object *intern;
if (nodep == NULL) {
php_dom_throw_error(INVALID_STATE_ERR, true);
return FAILURE;
}
php_dom_create_iterator(retval, DOM_NODELIST, php_dom_follow_spec_intern(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); dom_namednode_iter(obj, XML_ELEMENT_NODE, intern, NULL, NULL, 0, NULL, 0);
return SUCCESS; return SUCCESS;
@ -330,15 +297,9 @@ Since:
*/ */
zend_result dom_node_first_child_read(dom_object *obj, zval *retval) zend_result dom_node_first_child_read(dom_object *obj, zval *retval)
{ {
xmlNode *nodep, *first = NULL; 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;
}
xmlNodePtr first = NULL;
if (dom_node_children_valid(nodep)) { if (dom_node_children_valid(nodep)) {
first = nodep->children; first = nodep->children;
} }
@ -361,15 +322,9 @@ Since:
*/ */
zend_result dom_node_last_child_read(dom_object *obj, zval *retval) zend_result dom_node_last_child_read(dom_object *obj, zval *retval)
{ {
xmlNode *nodep, *last = NULL; 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;
}
xmlNodePtr last = NULL;
if (dom_node_children_valid(nodep)) { if (dom_node_children_valid(nodep)) {
last = nodep->last; last = nodep->last;
} }
@ -392,16 +347,9 @@ Since:
*/ */
zend_result dom_node_previous_sibling_read(dom_object *obj, zval *retval) 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); xmlNodePtr prevsib = nodep->prev;
if (nodep == NULL) {
php_dom_throw_error(INVALID_STATE_ERR, true);
return FAILURE;
}
prevsib = nodep->prev;
if (!prevsib) { if (!prevsib) {
ZVAL_NULL(retval); ZVAL_NULL(retval);
return SUCCESS; return SUCCESS;
@ -420,16 +368,9 @@ Since:
*/ */
zend_result dom_node_next_sibling_read(dom_object *obj, zval *retval) 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); xmlNodePtr nextsib = nodep->next;
if (nodep == NULL) {
php_dom_throw_error(INVALID_STATE_ERR, true);
return FAILURE;
}
nextsib = nodep->next;
if (!nextsib) { if (!nextsib) {
ZVAL_NULL(retval); ZVAL_NULL(retval);
return SUCCESS; return SUCCESS;
@ -448,16 +389,9 @@ Since:
*/ */
zend_result dom_node_previous_element_sibling_read(dom_object *obj, zval *retval) 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); xmlNodePtr prevsib = nodep->prev;
if (nodep == NULL) {
php_dom_throw_error(INVALID_STATE_ERR, true);
return FAILURE;
}
prevsib = nodep->prev;
while (prevsib && prevsib->type != XML_ELEMENT_NODE) { while (prevsib && prevsib->type != XML_ELEMENT_NODE) {
prevsib = prevsib->prev; prevsib = prevsib->prev;
@ -481,16 +415,9 @@ Since:
*/ */
zend_result dom_node_next_element_sibling_read(dom_object *obj, zval *retval) 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); xmlNodePtr nextsib = nodep->next;
if (nodep == NULL) {
php_dom_throw_error(INVALID_STATE_ERR, true);
return FAILURE;
}
nextsib = nodep->next;
while (nextsib != NULL && nextsib->type != XML_ELEMENT_NODE) { while (nextsib != NULL && nextsib->type != XML_ELEMENT_NODE) {
nextsib = nextsib->next; nextsib = nextsib->next;
@ -514,17 +441,11 @@ Since:
*/ */
zend_result dom_node_attributes_read(dom_object *obj, zval *retval) zend_result dom_node_attributes_read(dom_object *obj, zval *retval)
{ {
xmlNode *nodep = dom_object_get_node(obj); DOM_PROP_NODE(xmlNodePtr, nodep, obj);
dom_object *intern;
if (nodep == NULL) {
php_dom_throw_error(INVALID_STATE_ERR, true);
return FAILURE;
}
if (nodep->type == XML_ELEMENT_NODE) { if (nodep->type == XML_ELEMENT_NODE) {
php_dom_create_iterator(retval, DOM_NAMEDNODEMAP, php_dom_follow_spec_intern(obj)); 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); dom_namednode_iter(obj, XML_ATTRIBUTE_NODE, intern, NULL, NULL, 0, NULL, 0);
} else { } else {
ZVAL_NULL(retval); ZVAL_NULL(retval);
@ -542,13 +463,7 @@ Since:
*/ */
zend_result dom_node_is_connected_read(dom_object *obj, zval *retval) zend_result dom_node_is_connected_read(dom_object *obj, zval *retval)
{ {
xmlNode *nodep = dom_object_get_node(obj); DOM_PROP_NODE(xmlNodePtr, nodep, obj);
if (nodep == NULL) {
php_dom_throw_error(INVALID_STATE_ERR, true);
return FAILURE;
}
ZVAL_BOOL(retval, php_dom_is_node_connected(nodep)); ZVAL_BOOL(retval, php_dom_is_node_connected(nodep));
return SUCCESS; return SUCCESS;
} }
@ -561,20 +476,14 @@ Since:
*/ */
zend_result dom_node_owner_document_read(dom_object *obj, zval *retval) zend_result dom_node_owner_document_read(dom_object *obj, zval *retval)
{ {
xmlNode *nodep = dom_object_get_node(obj); DOM_PROP_NODE(xmlNodePtr, nodep, obj);
xmlDocPtr docp;
if (nodep == NULL) {
php_dom_throw_error(INVALID_STATE_ERR, true);
return FAILURE;
}
if (nodep->type == XML_DOCUMENT_NODE || nodep->type == XML_HTML_DOCUMENT_NODE) { if (nodep->type == XML_DOCUMENT_NODE || nodep->type == XML_HTML_DOCUMENT_NODE) {
ZVAL_NULL(retval); ZVAL_NULL(retval);
return SUCCESS; return SUCCESS;
} }
docp = nodep->doc; xmlDocPtr docp = nodep->doc;
if (!docp) { if (!docp) {
return FAILURE; return FAILURE;
} }
@ -592,20 +501,15 @@ Since: DOM Level 2
*/ */
zend_result dom_node_namespace_uri_read(dom_object *obj, zval *retval) zend_result dom_node_namespace_uri_read(dom_object *obj, zval *retval)
{ {
xmlNode *nodep = dom_object_get_node(obj); DOM_PROP_NODE(xmlNodePtr, nodep, obj);
char *str = NULL;
if (nodep == NULL) {
php_dom_throw_error(INVALID_STATE_ERR, true);
return FAILURE;
}
const char *str = NULL;
switch (nodep->type) { switch (nodep->type) {
case XML_ELEMENT_NODE: case XML_ELEMENT_NODE:
case XML_ATTRIBUTE_NODE: case XML_ATTRIBUTE_NODE:
case XML_NAMESPACE_DECL: case XML_NAMESPACE_DECL:
if (nodep->ns != NULL) { if (nodep->ns != NULL) {
str = (char *) nodep->ns->href; str = (const char *) nodep->ns->href;
} }
break; break;
default: default:
@ -632,24 +536,19 @@ Since: DOM Level 2
*/ */
zend_result dom_node_prefix_read(dom_object *obj, zval *retval) zend_result dom_node_prefix_read(dom_object *obj, zval *retval)
{ {
xmlNode *nodep = dom_object_get_node(obj); DOM_PROP_NODE(xmlNodePtr, nodep, obj);
xmlNsPtr ns;
char *str = NULL;
if (nodep == NULL) {
php_dom_throw_error(INVALID_STATE_ERR, true);
return FAILURE;
}
const char *str = NULL;
switch (nodep->type) { switch (nodep->type) {
case XML_ELEMENT_NODE: case XML_ELEMENT_NODE:
case XML_ATTRIBUTE_NODE: case XML_ATTRIBUTE_NODE:
case XML_NAMESPACE_DECL: case XML_NAMESPACE_DECL: {
ns = nodep->ns; xmlNsPtr ns = nodep->ns;
if (ns != NULL && ns->prefix) { if (ns != NULL && ns->prefix) {
str = (char *) ns->prefix; str = (char *) ns->prefix;
} }
break; break;
}
default: default:
str = NULL; str = NULL;
break; 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) zend_result dom_modern_node_prefix_read(dom_object *obj, zval *retval)
{ {
xmlNode *nodep = dom_object_get_node(obj); DOM_PROP_NODE(xmlNodePtr, nodep, obj);
if (nodep == NULL) {
php_dom_throw_error(INVALID_STATE_ERR, true);
return FAILURE;
}
xmlNsPtr ns = nodep->ns; xmlNsPtr ns = nodep->ns;
if (ns != NULL && ns->prefix != NULL) { 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_result dom_node_prefix_write(dom_object *obj, zval *newval)
{ {
zend_string *prefix_str; zend_string *prefix_str;
xmlNode *nodep, *nsnode = NULL; xmlNode *nsnode = NULL;
xmlNsPtr ns = NULL, curns; xmlNsPtr ns = NULL, curns;
char *strURI; char *strURI;
char *prefix; char *prefix;
nodep = dom_object_get_node(obj); DOM_PROP_NODE(xmlNodePtr, nodep, obj);
if (nodep == NULL) {
php_dom_throw_error(INVALID_STATE_ERR, true);
return FAILURE;
}
switch (nodep->type) { switch (nodep->type) {
case XML_ELEMENT_NODE: case XML_ELEMENT_NODE:
@ -766,12 +655,7 @@ Since: DOM Level 2
*/ */
zend_result dom_node_local_name_read(dom_object *obj, zval *retval) zend_result dom_node_local_name_read(dom_object *obj, zval *retval)
{ {
xmlNode *nodep = dom_object_get_node(obj); DOM_PROP_NODE(xmlNodePtr, nodep, obj);
if (nodep == NULL) {
php_dom_throw_error(INVALID_STATE_ERR, true);
return FAILURE;
}
if (nodep->type == XML_ELEMENT_NODE || nodep->type == XML_ATTRIBUTE_NODE || nodep->type == XML_NAMESPACE_DECL) { if (nodep->type == XML_ELEMENT_NODE || nodep->type == XML_ATTRIBUTE_NODE || nodep->type == XML_NAMESPACE_DECL) {
ZVAL_STRING(retval, (char *) (nodep->name)); 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) zend_result dom_node_base_uri_read(dom_object *obj, zval *retval)
{ {
xmlNode *nodep = dom_object_get_node(obj); DOM_PROP_NODE(xmlNodePtr, nodep, obj);
xmlChar *baseuri;
if (nodep == NULL) { xmlChar *baseuri = xmlNodeGetBase(nodep->doc, nodep);
php_dom_throw_error(INVALID_STATE_ERR, true);
return FAILURE;
}
baseuri = xmlNodeGetBase(nodep->doc, nodep);
if (baseuri) { if (baseuri) {
ZVAL_STRING(retval, (const char *) baseuri); ZVAL_STRING(retval, (const char *) baseuri);
xmlFree(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) zend_result dom_node_text_content_read(dom_object *obj, zval *retval)
{ {
xmlNode *nodep = dom_object_get_node(obj); DOM_PROP_NODE(xmlNodePtr, nodep, obj);
if (nodep == NULL) {
php_dom_throw_error(INVALID_STATE_ERR, true);
return FAILURE;
}
if (dom_skip_text_content(obj, nodep)) { if (dom_skip_text_content(obj, nodep)) {
ZVAL_NULL(retval); 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) zend_result dom_node_text_content_write(dom_object *obj, zval *newval)
{ {
xmlNode *nodep = dom_object_get_node(obj); DOM_PROP_NODE(xmlNodePtr, nodep, obj);
if (nodep == NULL) {
php_dom_throw_error(INVALID_STATE_ERR, true);
return FAILURE;
}
php_libxml_invalidate_node_list_cache(obj->document); php_libxml_invalidate_node_list_cache(obj->document);

View file

@ -22,6 +22,7 @@
#include "php.h" #include "php.h"
#if defined(HAVE_LIBXML) && defined(HAVE_DOM) #if defined(HAVE_LIBXML) && defined(HAVE_DOM)
#include "php_dom.h" #include "php_dom.h"
#include "dom_properties.h"
/* /*
* class DOMNotation extends DOMNode * class DOMNotation extends DOMNode
@ -39,12 +40,7 @@ Since:
*/ */
zend_result dom_notation_public_id_read(dom_object *obj, zval *retval) zend_result dom_notation_public_id_read(dom_object *obj, zval *retval)
{ {
xmlEntityPtr nodep = (xmlEntityPtr) dom_object_get_node(obj); DOM_PROP_NODE(xmlEntityPtr, nodep, obj);
if (nodep == NULL) {
php_dom_throw_error(INVALID_STATE_ERR, true);
return FAILURE;
}
if (nodep->ExternalID) { if (nodep->ExternalID) {
ZVAL_STRING(retval, (char *) (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) zend_result dom_notation_system_id_read(dom_object *obj, zval *retval)
{ {
xmlEntityPtr nodep = (xmlEntityPtr) dom_object_get_node(obj); DOM_PROP_NODE(xmlEntityPtr, nodep, obj);
if (nodep == NULL) {
php_dom_throw_error(INVALID_STATE_ERR, true);
return FAILURE;
}
if (nodep->SystemID) { if (nodep->SystemID) {
ZVAL_STRING(retval, (char *) (nodep->SystemID)); ZVAL_STRING(retval, (char *) (nodep->SystemID));

View file

@ -25,6 +25,7 @@
#if defined(HAVE_LIBXML) && defined(HAVE_DOM) #if defined(HAVE_LIBXML) && defined(HAVE_DOM)
#include "php_dom.h" #include "php_dom.h"
#include "internal_helpers.h" #include "internal_helpers.h"
#include "dom_properties.h"
/* {{{ firstElementChild DomParentNode /* {{{ firstElementChild DomParentNode
readonly=yes 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) zend_result dom_parent_node_first_element_child_read(dom_object *obj, zval *retval)
{ {
xmlNode *nodep, *first = NULL; 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;
}
xmlNodePtr first = NULL;
if (dom_node_children_valid(nodep)) { if (dom_node_children_valid(nodep)) {
first = nodep->children; 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) zend_result dom_parent_node_last_element_child_read(dom_object *obj, zval *retval)
{ {
xmlNode *nodep, *last = NULL; 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;
}
xmlNodePtr last = NULL;
if (dom_node_children_valid(nodep)) { if (dom_node_children_valid(nodep)) {
last = nodep->last; 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) 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; 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)) { if (dom_node_children_valid(nodep)) {
first = nodep->children; xmlNodePtr first = nodep->children;
while (first != NULL) { while (first != NULL) {
if (first->type == XML_ELEMENT_NODE) { if (first->type == XML_ELEMENT_NODE) {

View file

@ -22,6 +22,7 @@
#include "php.h" #include "php.h"
#if defined(HAVE_LIBXML) && defined(HAVE_DOM) #if defined(HAVE_LIBXML) && defined(HAVE_DOM)
#include "php_dom.h" #include "php_dom.h"
#include "dom_properties.h"
/* /*
* class DOMProcessingInstruction extends DOMNode * class DOMProcessingInstruction extends DOMNode
@ -72,15 +73,8 @@ Since:
*/ */
zend_result dom_processinginstruction_target_read(dom_object *obj, zval *retval) zend_result dom_processinginstruction_target_read(dom_object *obj, zval *retval)
{ {
xmlNodePtr nodep = dom_object_get_node(obj); DOM_PROP_NODE(xmlNodePtr, nodep, obj);
ZVAL_STRING(retval, (const char *) nodep->name);
if (nodep == NULL) {
php_dom_throw_error(INVALID_STATE_ERR, true);
return FAILURE;
}
ZVAL_STRING(retval, (char *) (nodep->name));
return SUCCESS; return SUCCESS;
} }
@ -93,26 +87,14 @@ Since:
*/ */
zend_result dom_processinginstruction_data_read(dom_object *obj, zval *retval) zend_result dom_processinginstruction_data_read(dom_object *obj, zval *retval)
{ {
xmlNodePtr nodep = dom_object_get_node(obj); DOM_PROP_NODE(xmlNodePtr, nodep, obj);
if (nodep == NULL) {
php_dom_throw_error(INVALID_STATE_ERR, true);
return FAILURE;
}
php_dom_get_content_into_zval(nodep, retval, false); php_dom_get_content_into_zval(nodep, retval, false);
return SUCCESS; return SUCCESS;
} }
zend_result dom_processinginstruction_data_write(dom_object *obj, zval *newval) zend_result dom_processinginstruction_data_write(dom_object *obj, zval *newval)
{ {
xmlNode *nodep = dom_object_get_node(obj); DOM_PROP_NODE(xmlNodePtr, nodep, obj);
if (nodep == NULL) {
php_dom_throw_error(INVALID_STATE_ERR, true);
return FAILURE;
}
/* Typed property, this is already a string */ /* Typed property, this is already a string */
ZEND_ASSERT(Z_TYPE_P(newval) == IS_STRING); ZEND_ASSERT(Z_TYPE_P(newval) == IS_STRING);

View file

@ -23,6 +23,7 @@
#if defined(HAVE_LIBXML) && defined(HAVE_DOM) #if defined(HAVE_LIBXML) && defined(HAVE_DOM)
#include "php_dom.h" #include "php_dom.h"
#include "dom_ce.h" #include "dom_ce.h"
#include "dom_properties.h"
/* /*
* class DOMText extends DOMCharacterData * class DOMText extends DOMCharacterData
@ -66,16 +67,10 @@ Since: DOM Level 3
*/ */
zend_result dom_text_whole_text_read(dom_object *obj, zval *retval) zend_result dom_text_whole_text_read(dom_object *obj, zval *retval)
{ {
xmlNodePtr node; DOM_PROP_NODE(xmlNodePtr, node, obj);
xmlChar *wholetext = NULL; 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 */ /* Find starting text node */
while (node->prev && ((node->prev->type == XML_TEXT_NODE) || (node->prev->type == XML_CDATA_SECTION_NODE))) { while (node->prev && ((node->prev->type == XML_TEXT_NODE) || (node->prev->type == XML_CDATA_SECTION_NODE))) {
node = node->prev; node = node->prev;