summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/core/document.c2
-rw-r--r--src/core/element.c3
-rw-r--r--src/utils/namespace.c7
3 files changed, 11 insertions, 1 deletions
diff --git a/src/core/document.c b/src/core/document.c
index 7d7e64a..6bd0045 100644
--- a/src/core/document.c
+++ b/src/core/document.c
@@ -1520,7 +1520,7 @@ dom_exception _dom_find_element_by_id(dom_node_internal *root,
dom_node_internal *node = root;
while (node != NULL) {
- if (root->type == DOM_ELEMENT_NODE) {
+ if (node->type == DOM_ELEMENT_NODE) {
lwc_string *real_id;
_dom_element_get_id((dom_element *) node, &real_id);
if (real_id == id) {
diff --git a/src/core/element.c b/src/core/element.c
index 11c7f5e..54bb9d1 100644
--- a/src/core/element.c
+++ b/src/core/element.c
@@ -1190,6 +1190,9 @@ dom_exception _dom_element_copy(struct dom_node_internal *new,
return DOM_NO_MEM_ERR;
ne->ns_attributes = ht;
+ ne->id_ns = NULL;
+ ne->id_name = NULL;
+
/* TODO: deal with dom_type_info, it get no definition ! */
return DOM_NO_ERR;
diff --git a/src/utils/namespace.c b/src/utils/namespace.c
index 8d109ae..3290b3f 100644
--- a/src/utils/namespace.c
+++ b/src/utils/namespace.c
@@ -158,6 +158,13 @@ dom_exception _dom_namespace_validate_qname(struct dom_string *qname,
dom_string_cmp(qname, xmlns) != 0) {
return DOM_NAMESPACE_ERR;
}
+ /* If qname == "xmlns", ensure namespace URI is for xmlns */
+ if (namespace != NULL &&
+ dom_string_cmp(qname, xmlns) == 0 &&
+ dom_string_cmp(namespace,
+ dom_namespaces[DOM_NAMESPACE_XMLNS]) != 0) {
+ return DOM_NAMESPACE_ERR;
+ }
} else if (colon == 0) {
/* Some name like ":name" */
if (namespace != NULL)