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