ID:               24609
 Updated by:       [EMAIL PROTECTED]
 Reported By:      rehsack at liwing dot de
-Status:           Open
+Status:           Feedback
 Bug Type:         DOM XML related
 Operating System: FreeBSD 5.1-CURRENT
 PHP Version:      4.3.3RC1
 New Comment:

Could you please supply the complete source (as small as possible) of
the script resulting in the error as well as the XML file you are
using/creating.


Previous Comments:
------------------------------------------------------------------------

[2003-07-11 13:18:05] rehsack at liwing dot de

Description:
------------
When a dom node is copied like below described wrong way, php fails
when the method is executed at the end with:

Program received signal SIGBUS, Bus error.
xmlGetDtdAttrDesc (dtd=0xd0d0d0d0, elem=0x8aa4a70 "METATAG",
name=0x8aa4a80 "NAME") at valid.c:2857
2857    valid.c: No such file or directory.
        in valid.c
(gdb) bt
#0  xmlGetDtdAttrDesc (dtd=0xd0d0d0d0, elem=0x8aa4a70 "METATAG",
name=0x8aa4a80 "NAME") at valid.c:2857
#1  0x2867cc12 in xmlIsID (doc=0x8acb380, elem=0x8ace700,
attr=0x8ace740) at valid.c:2315
#2  0x28668e84 in xmlFreeProp (cur=0x8ace740) at tree.c:1839
#3  0x28668dfb in xmlFreePropList (cur=0x0) at tree.c:1811
#4  0x2866a41a in xmlFreeNodeList (cur=0x8ace700) at tree.c:3108
#5  0x2866a3f7 in xmlFreeNodeList (cur=0x8ace5c0) at tree.c:3103
#6  0x2866a3f7 in xmlFreeNodeList (cur=0x8aa9f40) at tree.c:3103
#7  0x2866a3f7 in xmlFreeNodeList (cur=0x8aa9dc0) at tree.c:3103
#8  0x28667e35 in xmlFreeDoc (cur=0x8a8af80) at tree.c:1014
#9  0x0807be09 in php_free_xml_doc ()
#10 0x0816bc52 in list_entry_destructor ()
#11 0x0816b81c in zend_hash_apply_deleter ()
#12 0x0816a2cc in zend_hash_graceful_reverse_destroy ()
#13 0x0816be1f in zend_destroy_rsrc_list ()
#14 0x0815bb86 in shutdown_executor ()
#15 0x0816471e in zend_deactivate ()
#16 0x081359ef in php_request_shutdown ()
#17 0x0817b30d in main ()
#18 0x0806c285 in _start ()

Either the documentation of DomNode->replace_node() is wrong:
 (PHP 4.3) This function replaces an existing node with the passed new
node. It is not copied anymore. If newnode was already inserted in the
document it is first unlinked from its existing context
or the code of replace_node must be updated a little bit.

Reproduce code:
---------------
Wrong:

function ReplaceNodeWithFile( &$node, $filename )
{
$src = file( $filename );
$this->Dom = domxml_open_mem( $src );
$srcRoot = $src->document_element();
$node->replace_node( $srcRoot );
}

Right:
function ReplaceNodeWithFile( &$node, $filename )
{
$src = file( $filename );
$this->Dom = domxml_open_mem( $src );
$srcRoot = $src->document_element();
$cloned = $srcRoot->clone_node( TRUE );
$node->replace_node( $cloned );
}





------------------------------------------------------------------------


-- 
Edit this bug report at http://bugs.php.net/?id=24609&edit=1

Reply via email to