]> granicus.if.org Git - php/commitdiff
@ fixes bugs #19156 and #19544 (memleak)
authorHarald Radi <phanto@php.net>
Thu, 17 Oct 2002 16:21:00 +0000 (16:21 +0000)
committerHarald Radi <phanto@php.net>
Thu, 17 Oct 2002 16:21:00 +0000 (16:21 +0000)
ext/com/COM.c

index e846aee2031a30fe9596c41bb7db0c57ec478eb9..7c923f40dc28993446570ec17122476dc0c4215b 100644 (file)
@@ -1870,7 +1870,6 @@ PHPAPI pval php_COM_get_property_handler(zend_property_reference *property_refer
                switch (Z_TYPE_P(overloaded_property)) {
                        case OE_IS_ARRAY:
                                if (do_COM_offget(var_result, obj, &overloaded_property->element, FALSE TSRMLS_CC) == FAILURE) {
-                                       pval_destructor(&overloaded_property->element);
                                        FREE_VARIANT(var_result);
                                        FREE_COM(obj_prop);
 
@@ -1880,7 +1879,6 @@ PHPAPI pval php_COM_get_property_handler(zend_property_reference *property_refer
 
                        case OE_IS_OBJECT:
                                if (do_COM_propget(var_result, obj, &overloaded_property->element, FALSE TSRMLS_CC) == FAILURE) {
-                                       pval_destructor(&overloaded_property->element);
                                        FREE_VARIANT(var_result);
                                        FREE_COM(obj_prop);
 
@@ -1889,7 +1887,6 @@ PHPAPI pval php_COM_get_property_handler(zend_property_reference *property_refer
                                break;
 
                        case OE_IS_METHOD:
-                               pval_destructor(&overloaded_property->element);
                                FREE_VARIANT(var_result);
 
                                if (obj != obj_prop) {
@@ -1904,7 +1901,10 @@ PHPAPI pval php_COM_get_property_handler(zend_property_reference *property_refer
                                return return_value;
                }
 
-               pval_destructor(&overloaded_property->element);
+               if (obj == obj_prop) {
+                       // not head
+                       pval_destructor(&overloaded_property->element);
+               }
 
                if (V_VT(var_result) == VT_DISPATCH) {
                        if (V_DISPATCH(var_result) == NULL) {