[Php-it] problemi con DOM
simo
fsockopen at yahoo.it
Fri Jan 5 11:35:33 CET 2007
Ciao a tutti,
non so ma ho la senzazione di trovarmi davanti ad un
bug di php non ancora inserito in bug-report.
Da 2 giorni sto lottando con un SIGSEGV (Segmentation
Fault).
0xb78a63f8 in php_libxml_node_free_list() from
/usr/local/apache-2.2.3/modules/libphp5.so (gdb).
Sto usando il gdb con php 5.1.6
in particolare il chiodo lo tira utilizzando la
costante LIBXML_COMPACT nel metodo Load() dell'
oggetto DOMDocument.
Se non uso tale costante va a diritto tranquillamente.
il codice che genera l' errore e' il seguente:
<?php
$template = new DOMDocument('1.0', 'iso-8859-1');
$template->load (
'/usr/local/apache-2.2.3/htdocs/sample.xml',
LIBXML_COMPACT );
echo htmlentities ( $template->saveXML() );
$mynode = $template->getElementsByTagName ( 'widget'
);
echo "<br />elementi
widget:".$mynode->length."<br/><br/>";
$mynode->item(0)->parentNode->removeChild(
$mynode->item(0));
echo "<br />".htmlentities ( $template->saveXML() );
echo "<br />end";
?>
<?xml version="1.0" encoding="ISO-8859-1" ?>
<html>
<head>
<title>diomaiale2</title>
</head>
<h2 class="hide">Men principale: </h2>
<widget id="msg"/>
<widget id="list"/>
</html>
Scoppia sia su AMD64 Debian Sarge che su i386 Debian
etch
il pezzo di codice incriminato dell' interprete e'
questo:
static void php_libxml_node_free_list(xmlNodePtr node
TSRMLS_DC)
{
xmlNodePtr curnode;
if (node != NULL) {
curnode = node;
while (curnode != NULL) {
node = curnode;
switch (node->type) {
/* Skip property freeing for the following types
*/
case XML_NOTATION_NODE:
break;
case XML_ENTITY_REF_NODE:
php_libxml_node_free_list((xmlNodePtr)
node->properties TSRMLS_CC);
break;
case XML_ATTRIBUTE_DECL:
case XML_DTD_NODE:
case XML_DOCUMENT_TYPE_NODE:
case XML_ENTITY_DECL:
case XML_ATTRIBUTE_NODE:
case XML_NAMESPACE_DECL:
php_libxml_node_free_list(node->children
TSRMLS_CC);
break;
default:
php_libxml_node_free_list(node->children
TSRMLS_CC);
php_libxml_node_free_list((xmlNodePtr)
node->properties TSRMLS_CC);
}
curnode = node->next;
xmlUnlinkNode(node);
if (php_libxml_unregister_node(node TSRMLS_CC) ==
0) {
node->doc = NULL;
}
php_libxml_node_free(node);
}
}
}
ma sinceramente non capisco come e dove influisce tale
costante.
qualche idea ?
Ciao
Simone
__________________________________________________
Do You Yahoo!?
Poco spazio e tanto spam? Yahoo! Mail ti protegge dallo spam e ti da tanto spazio gratuito per i tuoi file e i messaggi
http://mail.yahoo.it
More information about the Php-it
mailing list