[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