1
0
mirror of https://github.com/php/php-src.git synced 2026-04-25 00:48:25 +02:00

Fix #23326: Attributes via append_child not supported

Add testcase
This commit is contained in:
Melvyn Sopacua
2003-09-09 19:43:45 +00:00
parent fc787ac20f
commit cd8ba5af5b
2 changed files with 43 additions and 5 deletions
+22 -5
View File
@@ -2425,11 +2425,6 @@ PHP_FUNCTION(domxml_node_append_child)
DOMXML_GET_OBJ(child, node, le_domxmlnodep);
if (child->type == XML_ATTRIBUTE_NODE) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Can't append attribute node");
RETURN_FALSE;
}
/* XXX:ls */
if (child == parent) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Can't append node to itself");
@@ -2469,6 +2464,28 @@ PHP_FUNCTION(domxml_node_append_child)
}
}
/* end libxml2 code */
else if (child->type == XML_ATTRIBUTE_NODE) {
if (parent->properties != NULL) {
/* Check if an attribute with the same name exists */
xmlAttrPtr foundattrp;
if (child->ns == NULL)
foundattrp = xmlHasProp(parent, child->name);
else
foundattrp = xmlHasNsProp(parent, child->name, child->ns->href);
if ((foundattrp != NULL) && (foundattrp != (xmlAttrPtr) child)) {
xmlUnlinkNode((xmlNodePtr) foundattrp);
(void)xmlCopyProp(parent, (xmlAttrPtr) child);
/* We're in the dark here, what happened to the parent, let's
* assume it's handled properly and return the new(?) parent
*/
new_child = parent;
}
}
/* For all other intents and purposes fall through to the xmlAddChild
* call
*/
}
if (NULL == new_child) {
new_child = xmlAddChild(parent, child);
+21
View File
@@ -0,0 +1,21 @@
--TEST--
Attributes via append_child not supported (bug #23326)
--SKIPIF--
<?php require_once('skipif.inc'); ?>
--FILE--
<?php
$document = domxml_new_doc('1.0');
$test = $document->create_element('test');
$j = 0;
for($i=0;$i<10;$i++)
{
if( $j < 5 )
$j = $i;
$test->append_child($document->create_attribute("key$j", $i));
}
$document->append_child($test);
echo $document->dump_mem(1);
?>
--EXPECT--
<?xml version="1.0"?>
<test key0="0" key1="1" key2="2" key3="3" key4="4" key5="9"/>