rrichards Fri, 15 Jan 2010 21:29:56 +0000 Revision: http://svn.php.net/viewvc?view=revision&revision=293597
Log: fix bug #49463 (setAttributeNS fails setting default namespace) add test Bug: http://bugs.php.net/49463 (Open) setAttributeNS("http://www.w3.org/2000/xmlns/","xmlns","blah") produces error Changed paths: U php/php-src/branches/PHP_5_2/NEWS U php/php-src/branches/PHP_5_2/ext/dom/element.c A php/php-src/branches/PHP_5_2/ext/dom/tests/bug49463.phpt U php/php-src/branches/PHP_5_3/NEWS U php/php-src/branches/PHP_5_3/ext/dom/element.c A php/php-src/branches/PHP_5_3/ext/dom/tests/bug49463.phpt U php/php-src/trunk/ext/dom/element.c A php/php-src/trunk/ext/dom/tests/bug49463.phpt
Modified: php/php-src/branches/PHP_5_2/NEWS =================================================================== --- php/php-src/branches/PHP_5_2/NEWS 2010-01-15 21:13:25 UTC (rev 293596) +++ php/php-src/branches/PHP_5_2/NEWS 2010-01-15 21:29:56 UTC (rev 293597) @@ -36,6 +36,7 @@ - Fixed bug #50394 (Reference argument converted to value in __call). (Stas) - Fixed bug #49851 (http wrapper breaks on 1024 char long headers). (Ilia) - Fixed bug #49600 (imageTTFText text shifted right). (Takeshi Abe) +- Fixed bug #49463 (setAttributeNS fails setting default namespace). (Rob) - Fixed bug #48590 (SoapClient does not honor max_redirects). (Sriram) - Fixed bug #48190 (Content-type parameter "boundary" is not case-insensitive in HTTP uploads). (Ilia) Modified: php/php-src/branches/PHP_5_2/ext/dom/element.c =================================================================== --- php/php-src/branches/PHP_5_2/ext/dom/element.c 2010-01-15 21:13:25 UTC (rev 293596) +++ php/php-src/branches/PHP_5_2/ext/dom/element.c 2010-01-15 21:29:56 UTC (rev 293597) @@ -792,11 +792,17 @@ node_list_unlink(nodep->children TSRMLS_CC); } - if (xmlStrEqual((xmlChar *) prefix,"xmlns") && xmlStrEqual((xmlChar *) uri, DOM_XMLNS_NAMESPACE)) { + if ((xmlStrEqual((xmlChar *) prefix, (xmlChar *)"xmlns") || + (prefix == NULL && xmlStrEqual((xmlChar *) localname, (xmlChar *)"xmlns"))) && + xmlStrEqual((xmlChar *) uri, (xmlChar *)DOM_XMLNS_NAMESPACE)) { is_xmlns = 1; - nsptr = dom_get_nsdecl(elemp, localname); + if (prefix == NULL) { + nsptr = dom_get_nsdecl(elemp, NULL); + } else { + nsptr = dom_get_nsdecl(elemp, (xmlChar *)localname); + } } else { - nsptr = xmlSearchNsByHref(elemp->doc, elemp, uri); + nsptr = xmlSearchNsByHref(elemp->doc, elemp, (xmlChar *)uri); if (nsptr && nsptr->prefix == NULL) { xmlNsPtr tmpnsptr; @@ -817,10 +823,15 @@ if (nsptr == NULL) { if (prefix == NULL) { - errorcode = NAMESPACE_ERR; + if (is_xmlns == 1) { + xmlNewNs(elemp, (xmlChar *)value, NULL); + xmlReconciliateNs(elemp->doc, elemp); + } else { + errorcode = NAMESPACE_ERR; + } } else { if (is_xmlns == 1) { - xmlNewNs(elemp, value, localname); + xmlNewNs(elemp, (xmlChar *)value, (xmlChar *)localname); } else { nsptr = dom_get_ns(elemp, uri, &errorcode, prefix); } Added: php/php-src/branches/PHP_5_2/ext/dom/tests/bug49463.phpt =================================================================== --- php/php-src/branches/PHP_5_2/ext/dom/tests/bug49463.phpt (rev 0) +++ php/php-src/branches/PHP_5_2/ext/dom/tests/bug49463.phpt 2010-01-15 21:29:56 UTC (rev 293597) @@ -0,0 +1,17 @@ +--TEST-- +Bug #49463 (setAttributeNS fails setting default namespace). +--SKIPIF-- +<?php require_once('skipif.inc'); ?> +--FILE-- +<?php + +$doc = new DOMDocument('1.0', 'utf-8'); +$root = $doc->createElementNS('http://purl.org/rss/1.0/','rdf:RDF'); +$doc->appendChild($root); +$root->setAttributeNS("http://www.w3.org/2000/xmlns/","xmlns","http://purl.org/rss/1.0/" ); + +echo $doc->saveXML()."\n"; +?> +--EXPECT-- +<?xml version="1.0" encoding="utf-8"?> +<rdf:RDF xmlns:rdf="http://purl.org/rss/1.0/" xmlns="http://purl.org/rss/1.0/"/> Modified: php/php-src/branches/PHP_5_3/NEWS =================================================================== --- php/php-src/branches/PHP_5_3/NEWS 2010-01-15 21:13:25 UTC (rev 293596) +++ php/php-src/branches/PHP_5_3/NEWS 2010-01-15 21:29:56 UTC (rev 293597) @@ -27,6 +27,7 @@ variable does not exist). (Ilia) - Fixed bug #50576 (XML_OPTION_SKIP_TAGSTART option has no effect). (Pierrick) - Fixed bug #49560 (oci8: using LOBs causes slow PHP shutdown). (Oracle Corp.) +- Fixed bug #49463 (setAttributeNS fails setting default namespace). (Rob) - Fixed bug #48590 (SoapClient does not honor max_redirects). (Sriram) - Fixed bug #48190 (Content-type parameter "boundary" is not case-insensitive in HTTP uploads). (Ilia) Modified: php/php-src/branches/PHP_5_3/ext/dom/element.c =================================================================== --- php/php-src/branches/PHP_5_3/ext/dom/element.c 2010-01-15 21:13:25 UTC (rev 293596) +++ php/php-src/branches/PHP_5_3/ext/dom/element.c 2010-01-15 21:29:56 UTC (rev 293597) @@ -777,9 +777,15 @@ node_list_unlink(nodep->children TSRMLS_CC); } - if (xmlStrEqual((xmlChar *) prefix, (xmlChar *)"xmlns") && xmlStrEqual((xmlChar *) uri, (xmlChar *)DOM_XMLNS_NAMESPACE)) { + if ((xmlStrEqual((xmlChar *) prefix, (xmlChar *)"xmlns") || + (prefix == NULL && xmlStrEqual((xmlChar *) localname, (xmlChar *)"xmlns"))) && + xmlStrEqual((xmlChar *) uri, (xmlChar *)DOM_XMLNS_NAMESPACE)) { is_xmlns = 1; - nsptr = dom_get_nsdecl(elemp, (xmlChar *)localname); + if (prefix == NULL) { + nsptr = dom_get_nsdecl(elemp, NULL); + } else { + nsptr = dom_get_nsdecl(elemp, (xmlChar *)localname); + } } else { nsptr = xmlSearchNsByHref(elemp->doc, elemp, (xmlChar *)uri); if (nsptr && nsptr->prefix == NULL) { @@ -802,7 +808,12 @@ if (nsptr == NULL) { if (prefix == NULL) { - errorcode = NAMESPACE_ERR; + if (is_xmlns == 1) { + xmlNewNs(elemp, (xmlChar *)value, NULL); + xmlReconciliateNs(elemp->doc, elemp); + } else { + errorcode = NAMESPACE_ERR; + } } else { if (is_xmlns == 1) { xmlNewNs(elemp, (xmlChar *)value, (xmlChar *)localname); Added: php/php-src/branches/PHP_5_3/ext/dom/tests/bug49463.phpt =================================================================== --- php/php-src/branches/PHP_5_3/ext/dom/tests/bug49463.phpt (rev 0) +++ php/php-src/branches/PHP_5_3/ext/dom/tests/bug49463.phpt 2010-01-15 21:29:56 UTC (rev 293597) @@ -0,0 +1,17 @@ +--TEST-- +Bug #49463 (setAttributeNS fails setting default namespace). +--SKIPIF-- +<?php require_once('skipif.inc'); ?> +--FILE-- +<?php + +$doc = new DOMDocument('1.0', 'utf-8'); +$root = $doc->createElementNS('http://purl.org/rss/1.0/','rdf:RDF'); +$doc->appendChild($root); +$root->setAttributeNS("http://www.w3.org/2000/xmlns/","xmlns","http://purl.org/rss/1.0/" ); + +echo $doc->saveXML()."\n"; +?> +--EXPECT-- +<?xml version="1.0" encoding="utf-8"?> +<rdf:RDF xmlns:rdf="http://purl.org/rss/1.0/" xmlns="http://purl.org/rss/1.0/"/> Modified: php/php-src/trunk/ext/dom/element.c =================================================================== --- php/php-src/trunk/ext/dom/element.c 2010-01-15 21:13:25 UTC (rev 293596) +++ php/php-src/trunk/ext/dom/element.c 2010-01-15 21:29:56 UTC (rev 293597) @@ -777,9 +777,15 @@ node_list_unlink(nodep->children TSRMLS_CC); } - if (xmlStrEqual((xmlChar *) prefix, (xmlChar *)"xmlns") && xmlStrEqual((xmlChar *) uri, (xmlChar *)DOM_XMLNS_NAMESPACE)) { + if ((xmlStrEqual((xmlChar *) prefix, (xmlChar *)"xmlns") || + (prefix == NULL && xmlStrEqual((xmlChar *) localname, (xmlChar *)"xmlns"))) && + xmlStrEqual((xmlChar *) uri, (xmlChar *)DOM_XMLNS_NAMESPACE)) { is_xmlns = 1; - nsptr = dom_get_nsdecl(elemp, (xmlChar *)localname); + if (prefix == NULL) { + nsptr = dom_get_nsdecl(elemp, NULL); + } else { + nsptr = dom_get_nsdecl(elemp, (xmlChar *)localname); + } } else { nsptr = xmlSearchNsByHref(elemp->doc, elemp, (xmlChar *)uri); if (nsptr && nsptr->prefix == NULL) { @@ -802,7 +808,12 @@ if (nsptr == NULL) { if (prefix == NULL) { - errorcode = NAMESPACE_ERR; + if (is_xmlns == 1) { + xmlNewNs(elemp, (xmlChar *)value, NULL); + xmlReconciliateNs(elemp->doc, elemp); + } else { + errorcode = NAMESPACE_ERR; + } } else { if (is_xmlns == 1) { xmlNewNs(elemp, (xmlChar *)value, (xmlChar *)localname); Added: php/php-src/trunk/ext/dom/tests/bug49463.phpt =================================================================== --- php/php-src/trunk/ext/dom/tests/bug49463.phpt (rev 0) +++ php/php-src/trunk/ext/dom/tests/bug49463.phpt 2010-01-15 21:29:56 UTC (rev 293597) @@ -0,0 +1,17 @@ +--TEST-- +Bug #49463 (setAttributeNS fails setting default namespace). +--SKIPIF-- +<?php require_once('skipif.inc'); ?> +--FILE-- +<?php + +$doc = new DOMDocument('1.0', 'utf-8'); +$root = $doc->createElementNS('http://purl.org/rss/1.0/','rdf:RDF'); +$doc->appendChild($root); +$root->setAttributeNS("http://www.w3.org/2000/xmlns/","xmlns","http://purl.org/rss/1.0/" ); + +echo $doc->saveXML()."\n"; +?> +--EXPECT-- +<?xml version="1.0" encoding="utf-8"?> +<rdf:RDF xmlns:rdf="http://purl.org/rss/1.0/" xmlns="http://purl.org/rss/1.0/"/>
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php