@@ -1640,10 +1640,11 @@ PHP_METHOD(SimpleXMLElement, addChild)
1640
1640
{
1641
1641
php_sxe_object * sxe ;
1642
1642
char * qname , * value = NULL , * nsuri = NULL ;
1643
- size_t qname_len , value_len = 0 , nsuri_len = 0 ;
1643
+ size_t qname_len , value_len = 0 , nsuri_len = 0 ;
1644
1644
xmlNodePtr node , newnode ;
1645
1645
xmlNsPtr nsptr = NULL ;
1646
1646
xmlChar * localname , * prefix = NULL ;
1647
+ bool free_localname = false;
1647
1648
1648
1649
if (zend_parse_parameters (ZEND_NUM_ARGS (), "s|s!s!" ,
1649
1650
& qname , & qname_len , & value , & value_len , & nsuri , & nsuri_len ) == FAILURE ) {
@@ -1674,7 +1675,9 @@ PHP_METHOD(SimpleXMLElement, addChild)
1674
1675
1675
1676
localname = xmlSplitQName2 ((xmlChar * )qname , & prefix );
1676
1677
if (localname == NULL ) {
1677
- localname = xmlStrdup ((xmlChar * )qname );
1678
+ localname = (xmlChar * )qname ;
1679
+ } else {
1680
+ free_localname = true;
1678
1681
}
1679
1682
1680
1683
newnode = xmlNewChild (node , NULL , localname , (xmlChar * )value );
@@ -1694,7 +1697,9 @@ PHP_METHOD(SimpleXMLElement, addChild)
1694
1697
1695
1698
node_as_zval_str (sxe , newnode , return_value , SXE_ITER_NONE , localname , prefix , 0 );
1696
1699
1697
- xmlFree (localname );
1700
+ if (free_localname ) {
1701
+ xmlFree (localname );
1702
+ }
1698
1703
if (prefix != NULL ) {
1699
1704
xmlFree (prefix );
1700
1705
}
0 commit comments