mirror of
https://github.com/php/php-src.git
synced 2024-09-22 02:17:32 +00:00
fix bug #41562 (SimpleXML memory issue)
This commit is contained in:
parent
9cfc5580f4
commit
ec042f7d55
@ -141,24 +141,6 @@ zend_module_entry libxml_module_entry = {
|
||||
/* }}} */
|
||||
|
||||
/* {{{ internal functions for interoperability */
|
||||
static int php_libxml_dec_node(php_libxml_node_ptr *nodeptr)
|
||||
{
|
||||
int ret_refcount;
|
||||
|
||||
ret_refcount = --nodeptr->refcount;
|
||||
if (ret_refcount == 0) {
|
||||
if (nodeptr->node != NULL && nodeptr->node->type != XML_DOCUMENT_NODE) {
|
||||
nodeptr->node->_private = NULL;
|
||||
}
|
||||
/* node is destroyed by another object. reset ret_refcount to 1 and node to NULL
|
||||
so the php_libxml_node_ptr is detroyed when the object is destroyed */
|
||||
nodeptr->refcount = 1;
|
||||
nodeptr->node = NULL;
|
||||
}
|
||||
|
||||
return ret_refcount;
|
||||
}
|
||||
|
||||
static int php_libxml_clear_object(php_libxml_node_object *object TSRMLS_DC)
|
||||
{
|
||||
if (object->properties) {
|
||||
@ -179,7 +161,10 @@ static int php_libxml_unregister_node(xmlNodePtr nodep TSRMLS_DC)
|
||||
if (wrapper) {
|
||||
php_libxml_clear_object(wrapper TSRMLS_CC);
|
||||
} else {
|
||||
php_libxml_dec_node(nodeptr);
|
||||
if (nodeptr->node != NULL && nodeptr->node->type != XML_DOCUMENT_NODE) {
|
||||
nodeptr->node->_private = NULL;
|
||||
}
|
||||
nodeptr->node = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user