fix bug #49463 (setAttributeNS fails setting default namespace)

add test
This commit is contained in:
Rob Richards 2010-01-15 21:29:56 +00:00
parent 7931525343
commit 30fc597c92
2 changed files with 31 additions and 3 deletions

View File

@ -777,9 +777,15 @@ PHP_FUNCTION(dom_element_set_attribute_ns)
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 @@ PHP_FUNCTION(dom_element_set_attribute_ns)
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);

View File

@ -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/"/>