diff options
Diffstat (limited to 'ext/dom/element.c')
| -rw-r--r-- | ext/dom/element.c | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/ext/dom/element.c b/ext/dom/element.c index 1f5ca0505c..7f67f66cac 100644 --- a/ext/dom/element.c +++ b/ext/dom/element.c @@ -183,6 +183,11 @@ PHP_FUNCTION(dom_element_set_attribute) return; } + if (dom_node_is_read_only(nodep) == SUCCESS) { + php_dom_throw_error(NO_MODIFICATION_ALLOWED_ERR, &return_value TSRMLS_CC); + RETURN_FALSE; + } + attr = xmlHasProp(nodep,name); if (attr != NULL) { node_list_unlink(attr->children TSRMLS_CC); @@ -218,6 +223,11 @@ PHP_FUNCTION(dom_element_remove_attribute) return; } + if (dom_node_is_read_only(nodep) == SUCCESS) { + php_dom_throw_error(NO_MODIFICATION_ALLOWED_ERR, &return_value TSRMLS_CC); + RETURN_FALSE; + } + attrp = xmlHasProp(nodep,name); if (attrp == NULL) { RETURN_FALSE; @@ -284,6 +294,11 @@ PHP_FUNCTION(dom_element_set_attribute_node) return; } + if (dom_node_is_read_only(nodep) == SUCCESS) { + php_dom_throw_error(NO_MODIFICATION_ALLOWED_ERR, &return_value TSRMLS_CC); + RETURN_FALSE; + } + DOM_GET_OBJ(attrp, node, xmlAttrPtr, attrobj); if (attrp->type != XML_ATTRIBUTE_NODE) { @@ -340,6 +355,11 @@ PHP_FUNCTION(dom_element_remove_attribute_node) return; } + if (dom_node_is_read_only(nodep) == SUCCESS) { + php_dom_throw_error(NO_MODIFICATION_ALLOWED_ERR, &return_value TSRMLS_CC); + RETURN_FALSE; + } + attrp = xmlHasProp(nodep,name); if (attrp == NULL) { RETURN_FALSE; @@ -486,6 +506,12 @@ PHP_FUNCTION(dom_element_set_attribute_ns) if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss", &uri, &uri_len, &name, &name_len) == FAILURE) { return; } + + if (dom_node_is_read_only(elemp) == SUCCESS) { + php_dom_throw_error(NO_MODIFICATION_ALLOWED_ERR, &return_value TSRMLS_CC); + RETURN_FALSE; + } + nsptr = xmlSearchNsByHref (elemp->doc, elemp, uri); if (nsptr == NULL) { nsptr = dom_get_ns(uri, name, uri_len, name_len, &errorcode, (char **) &localname); @@ -538,6 +564,11 @@ PHP_FUNCTION(dom_element_remove_attribute_ns) return; } + if (dom_node_is_read_only(nodep) == SUCCESS) { + php_dom_throw_error(NO_MODIFICATION_ALLOWED_ERR, &return_value TSRMLS_CC); + RETURN_FALSE; + } + if (xmlStrEqual(uri, DOM_XMLNS_NAMESPACE)) { DOM_NOT_IMPLEMENTED(); } else { @@ -620,6 +651,11 @@ PHP_FUNCTION(dom_element_set_attribute_node_ns) return; } + if (dom_node_is_read_only(nodep) == SUCCESS) { + php_dom_throw_error(NO_MODIFICATION_ALLOWED_ERR, &return_value TSRMLS_CC); + RETURN_FALSE; + } + DOM_GET_OBJ(attrp, node, xmlAttrPtr, attrobj); if (attrp->type != XML_ATTRIBUTE_NODE) { |
