zeev Mon Aug 18 18:33:15 2003 EDT Modified files: /php-src/ext/simplexml simplexml.c Log: Fix a gazillion leaks in SimpleXML. One gazillion to go ;) Index: php-src/ext/simplexml/simplexml.c diff -u php-src/ext/simplexml/simplexml.c:1.56 php-src/ext/simplexml/simplexml.c:1.57 --- php-src/ext/simplexml/simplexml.c:1.56 Mon Aug 18 07:26:12 2003 +++ php-src/ext/simplexml/simplexml.c Mon Aug 18 18:33:15 2003 @@ -16,7 +16,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: simplexml.c,v 1.56 2003/08/18 11:26:12 zeev Exp $ */ +/* $Id: simplexml.c,v 1.57 2003/08/18 22:33:15 zeev Exp $ */ #ifdef HAVE_CONFIG_H #include "config.h" @@ -181,6 +181,9 @@ return_value = value; } + return_value->refcount = 0; + return_value->is_ref = 0; + return return_value; } /* }}} */ @@ -487,7 +490,7 @@ zend_internal_function *f; f = emalloc(sizeof(zend_internal_function)); - f->type = ZEND_OVERLOADED_FUNCTION; + f->type = ZEND_OVERLOADED_FUNCTION_TEMPORARY; f->arg_info = NULL; f->num_args = 0; f->scope = sxe_class_entry; @@ -630,15 +633,19 @@ simplexml_ce_to_xml_string(INTERNAL_FUNCTION_PARAMETERS) { php_sxe_object *sxe; + xmlChar *strval; + if (ZEND_NUM_ARGS() != 0) { RETURN_FALSE; } sxe = php_sxe_fetch_object(getThis() TSRMLS_CC); - xmlDocDumpMemory((xmlDocPtr) sxe->document->ptr, (xmlChar **) &Z_STRVAL_P(return_value), &Z_STRLEN_P(return_value)); + xmlDocDumpMemory((xmlDocPtr) sxe->document->ptr, &strval, &Z_STRLEN_P(return_value)); + Z_STRVAL_P(return_value) = estrndup(strval, Z_STRLEN_P(return_value)); + xmlFree(strval); + Z_TYPE_P(return_value) = IS_STRING; - zval_add_ref(&return_value); } /* }}} */ @@ -744,10 +751,11 @@ { php_sxe_object *sxe; char *contents = NULL; + zval free_obj; sxe = php_sxe_fetch_object(readobj TSRMLS_CC); if (should_free) { - zval_dtor(writeobj); + free_obj = *writeobj; } if (!sxe->node) { @@ -767,6 +775,9 @@ if (contents) { xmlFree(contents); } + if (should_free) { + zval_dtor(&free_obj); + } } /* }}} */ @@ -1056,7 +1067,7 @@ { php_info_print_table_start(); php_info_print_table_header(2, "Simplexml support", "enabled"); - php_info_print_table_row(2, "Revision", "$Revision: 1.56 $"); + php_info_print_table_row(2, "Revision", "$Revision: 1.57 $"); php_info_print_table_end(); } /* }}} */
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php