summaryrefslogtreecommitdiff
path: root/ext/dom/element.c
diff options
context:
space:
mode:
Diffstat (limited to 'ext/dom/element.c')
-rw-r--r--ext/dom/element.c21
1 files changed, 16 insertions, 5 deletions
diff --git a/ext/dom/element.c b/ext/dom/element.c
index 69d780fa0..d0b7cd488 100644
--- a/ext/dom/element.c
+++ b/ext/dom/element.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2009 The PHP Group |
+ | Copyright (c) 1997-2010 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -17,7 +17,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: element.c 272370 2008-12-31 11:15:49Z sebastian $ */
+/* $Id: element.c 294446 2010-02-03 20:04:38Z pajoye $ */
#ifdef HAVE_CONFIG_H
#include "config.h"
@@ -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);