summaryrefslogtreecommitdiff
path: root/ext/dom/element.c
diff options
context:
space:
mode:
Diffstat (limited to 'ext/dom/element.c')
-rw-r--r--ext/dom/element.c36
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) {