From 24434e7ba23ba5019957a19dacf01a72d30c9a41 Mon Sep 17 00:00:00 2001 From: Rob Richards Date: Fri, 4 May 2007 19:30:59 +0000 Subject: [PATCH] fix bug #41257 (lookupNamespaceURI does not work as expected) fix related issue in isDefaultNamespace add test reconcile namespaces when setting attribute in a new namespace --- ext/dom/element.c | 1 + ext/dom/node.c | 11 ++++++++++- ext/dom/tests/bug41257.phpt | 31 +++++++++++++++++++++++++++++++ 3 files changed, 42 insertions(+), 1 deletion(-) create mode 100644 ext/dom/tests/bug41257.phpt diff --git a/ext/dom/element.c b/ext/dom/element.c index 49f1d8c917..fae0dae1c6 100644 --- a/ext/dom/element.c +++ b/ext/dom/element.c @@ -709,6 +709,7 @@ PHP_FUNCTION(dom_element_set_attribute_ns) } else { nsptr = dom_get_ns(elemp, uri, &errorcode, prefix); } + xmlReconciliateNs(elemp->doc, elemp); } } else { if (is_xmlns == 1) { diff --git a/ext/dom/node.c b/ext/dom/node.c index d5cb048537..e95fa2c9d1 100644 --- a/ext/dom/node.c +++ b/ext/dom/node.c @@ -1586,8 +1586,11 @@ PHP_FUNCTION(dom_node_is_default_namespace) } DOM_GET_OBJ(nodep, id, xmlNodePtr, intern); + if (nodep->type == XML_DOCUMENT_NODE || nodep->type == XML_HTML_DOCUMENT_NODE) { + nodep = xmlDocGetRootElement((xmlDocPtr) nodep); + } - if (uri_len > 0) { + if (nodep && uri_len > 0) { nsptr = xmlSearchNs(nodep->doc, nodep, NULL); if (nsptr && xmlStrEqual(nsptr->href, uri)) { RETURN_TRUE; @@ -1617,6 +1620,12 @@ PHP_FUNCTION(dom_node_lookup_namespace_uri) } DOM_GET_OBJ(nodep, id, xmlNodePtr, intern); + if (nodep->type == XML_DOCUMENT_NODE || nodep->type == XML_HTML_DOCUMENT_NODE) { + nodep = xmlDocGetRootElement((xmlDocPtr) nodep); + if (nodep == NULL) { + RETURN_NULL(); + } + } nsptr = xmlSearchNs(nodep->doc, nodep, prefix); if (nsptr && nsptr->href != NULL) { diff --git a/ext/dom/tests/bug41257.phpt b/ext/dom/tests/bug41257.phpt new file mode 100644 index 0000000000..58e6acfd59 --- /dev/null +++ b/ext/dom/tests/bug41257.phpt @@ -0,0 +1,31 @@ +--TEST-- +Bug # 41257: (lookupNamespaceURI does not work as expected) +--SKIPIF-- + +--FILE-- +load(dirname(__FILE__)."/nsdoc.xml"); + +$root = $doc->documentElement; + +$duri = $doc->lookupNamespaceURI("ns2")."\n"; +$euri = $root->lookupNamespaceURI("ns2")."\n"; + +var_dump($duri == $euri); + +$dpref = $doc->lookupPrefix("http://ns2")."\n"; +$epref = $root->lookupPrefix("http://ns2")."\n"; + +var_dump($dpref == $epref); + +$disdef = $doc->isDefaultNamespace("http://ns")."\n"; +$eisdef = $root->isDefaultNamespace("http://ns")."\n"; + +var_dump($dpref === $epref); +?> +--EXPECT-- +bool(true) +bool(true) +bool(true) -- 2.50.1