diff options
Diffstat (limited to 'ext/dom/node.c')
| -rw-r--r-- | ext/dom/node.c | 25 |
1 files changed, 18 insertions, 7 deletions
diff --git a/ext/dom/node.c b/ext/dom/node.c index 03e61efa67..44e6f58b30 100644 --- a/ext/dom/node.c +++ b/ext/dom/node.c @@ -323,12 +323,18 @@ int dom_node_node_value_read(dom_object *obj, zval *retval) int dom_node_node_value_write(dom_object *obj, zval *newval) { xmlNode *nodep = dom_object_get_node(obj); + zend_string *str; if (nodep == NULL) { php_dom_throw_error(INVALID_STATE_ERR, 0); return FAILURE; } + str = zval_get_string(newval); + if (EG(exception)) { + return FAILURE; + } + /* Access to Element node is implemented as a convenience method */ switch (nodep->type) { case XML_ELEMENT_NODE: @@ -342,16 +348,13 @@ int dom_node_node_value_write(dom_object *obj, zval *newval) case XML_COMMENT_NODE: case XML_CDATA_SECTION_NODE: case XML_PI_NODE: - { - zend_string *str = zval_get_string(newval); - xmlNodeSetContentLen(nodep, (xmlChar *) ZSTR_VAL(str), ZSTR_LEN(str) + 1); - zend_string_release_ex(str, 0); - break; - } + xmlNodeSetContentLen(nodep, (xmlChar *) ZSTR_VAL(str), ZSTR_LEN(str) + 1); + break; default: break; } + zend_string_release_ex(str, 0); return SUCCESS; } @@ -722,6 +725,10 @@ int dom_node_prefix_write(dom_object *obj, zval *newval) } } str = zval_get_string(newval); + if (EG(exception)) { + return FAILURE; + } + prefix = ZSTR_VAL(str); if (nsnode && nodep->ns != NULL && !xmlStrEqual(nodep->ns->prefix, (xmlChar *)prefix)) { strURI = (char *) nodep->ns->href; @@ -854,6 +861,11 @@ int dom_node_text_content_write(dom_object *obj, zval *newval) return FAILURE; } + str = zval_get_string(newval); + if (EG(exception)) { + return FAILURE; + } + if (nodep->type == XML_ELEMENT_NODE || nodep->type == XML_ATTRIBUTE_NODE) { if (nodep->children) { node_list_unlink(nodep->children); @@ -862,7 +874,6 @@ int dom_node_text_content_write(dom_object *obj, zval *newval) } } - str = zval_get_string(newval); /* we have to use xmlNodeAddContent() to get the same behavior as with xmlNewText() */ xmlNodeSetContent(nodep, (xmlChar *) ""); xmlNodeAddContent(nodep, (xmlChar *) ZSTR_VAL(str)); |
