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

Reply via email to