]> granicus.if.org Git - php/commitdiff
Fixed memory leaks (related to bug #52361)
authorDmitry Stogov <dmitry@php.net>
Mon, 16 Aug 2010 08:11:08 +0000 (08:11 +0000)
committerDmitry Stogov <dmitry@php.net>
Mon, 16 Aug 2010 08:11:08 +0000 (08:11 +0000)
Zend/zend_exceptions.c

index abed6c7f84d1e43a60f9bc8d7211ed51dce14145..73cf2bdaf49c3eec75b1d733d7b533bcc52bb446 100644 (file)
@@ -81,7 +81,7 @@ void zend_exception_restore(TSRMLS_D) /* {{{ */
 }
 /* }}} */
 
-void zend_throw_exception_internal(zval *exception TSRMLS_DC) /* {{{ */
+ZEND_API void zend_throw_exception_internal(zval *exception TSRMLS_DC) /* {{{ */
 {
 #ifdef HAVE_DTRACE
        if (DTRACE_EXCEPTION_THROWN_ENABLED()) {
@@ -580,6 +580,7 @@ ZEND_METHOD(exception, __toString)
                zend_call_function(&fci, NULL TSRMLS_CC);
 
                if (Z_TYPE_P(trace) != IS_STRING) {
+                       zval_ptr_dtor(&trace);
                        trace = NULL;
                }
 
@@ -600,6 +601,11 @@ ZEND_METHOD(exception, __toString)
                zval_dtor(&line);
 
                exception = zend_read_property(default_exception_ce, exception, "previous", sizeof("previous")-1, 0 TSRMLS_CC);
+
+               if (trace) {
+                       zval_ptr_dtor(&trace);
+               }
+
        }
        zval_dtor(&fname);
 
@@ -607,10 +613,6 @@ ZEND_METHOD(exception, __toString)
         * the result in uncaught exception handlers without memleaks. */
        zend_update_property_string(default_exception_ce, getThis(), "string", sizeof("string")-1, str TSRMLS_CC);
 
-       if (trace) {
-               zval_ptr_dtor(&trace);
-       }
-
        RETURN_STRINGL(str, len, 0);
 }
 /* }}} */