rrichards Fri May 4 19:32:19 2007 UTC Modified files: /php-src/ext/dom element.c node.c /php-src/ext/dom/tests bug41257.phpt Log: MFB: 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 http://cvs.php.net/viewvc.cgi/php-src/ext/dom/element.c?r1=1.52&r2=1.53&diff_format=u Index: php-src/ext/dom/element.c diff -u php-src/ext/dom/element.c:1.52 php-src/ext/dom/element.c:1.53 --- php-src/ext/dom/element.c:1.52 Mon Jan 1 09:29:23 2007 +++ php-src/ext/dom/element.c Fri May 4 19:32:19 2007 @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: element.c,v 1.52 2007/01/01 09:29:23 sebastian Exp $ */ +/* $Id: element.c,v 1.53 2007/05/04 19:32:19 rrichards Exp $ */ #ifdef HAVE_CONFIG_H #include "config.h" @@ -709,6 +709,7 @@ } else { nsptr = dom_get_ns(elemp, uri, &errorcode, prefix); } + xmlReconciliateNs(elemp->doc, elemp); } } else { if (is_xmlns == 1) { http://cvs.php.net/viewvc.cgi/php-src/ext/dom/node.c?r1=1.55&r2=1.56&diff_format=u Index: php-src/ext/dom/node.c diff -u php-src/ext/dom/node.c:1.55 php-src/ext/dom/node.c:1.56 --- php-src/ext/dom/node.c:1.55 Sun Mar 18 21:29:20 2007 +++ php-src/ext/dom/node.c Fri May 4 19:32:19 2007 @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: node.c,v 1.55 2007/03/18 21:29:20 rrichards Exp $ */ +/* $Id: node.c,v 1.56 2007/05/04 19:32:19 rrichards Exp $ */ #ifdef HAVE_CONFIG_H #include "config.h" @@ -1587,8 +1587,11 @@ } 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; @@ -1618,6 +1621,12 @@ } 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) { http://cvs.php.net/viewvc.cgi/php-src/ext/dom/tests/bug41257.phpt?r1=1.1&r2=1.2&diff_format=u Index: php-src/ext/dom/tests/bug41257.phpt diff -u /dev/null php-src/ext/dom/tests/bug41257.phpt:1.2 --- /dev/null Fri May 4 19:32:19 2007 +++ php-src/ext/dom/tests/bug41257.phpt Fri May 4 19:32:19 2007 @@ -0,0 +1,31 @@ +--TEST-- +Bug # 41257: (lookupNamespaceURI does not work as expected) +--SKIPIF-- +<?php require_once('skipif.inc'); ?> +--FILE-- +<?php + +$doc = new DOMDocument(); +$doc->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)
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php