From: Harald Radi Date: Thu, 3 May 2001 11:20:29 +0000 (+0000) Subject: fixed leaky code X-Git-Tag: php-4.0.6RC1~167 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=172a9c93031a21c19ad035df210c2b76e517bb88;p=php fixed leaky code #cleaned up dirty hack from yesterday --- diff --git a/ext/com/COM.c b/ext/com/COM.c index ca26a5c66c..70906964ad 100644 --- a/ext/com/COM.c +++ b/ext/com/COM.c @@ -672,7 +672,8 @@ VARIANT *_php_COM_get_property_handler(zend_property_reference *property_referen obj_prop = (i_dispatch *) emalloc(sizeof(i_dispatch)); php_COM_clone(obj_prop, obj, FALSE); - + + //leak !!! var_result = (VARIANT *) emalloc(sizeof(VARIANT)); var_result->vt = VT_DISPATCH; var_result->pdispVal = obj_prop->i.dispatch; @@ -705,7 +706,6 @@ VARIANT *_php_COM_get_property_handler(zend_property_reference *property_referen break; case OE_IS_METHOD: -// var_result->pdispVal = obj_prop->i.dispatch; efree(obj_prop); return var_result; break; @@ -832,25 +832,28 @@ PHPAPI void php_COM_call_function_handler(INTERNAL_FUNCTION_PARAMETERS, zend_pro i_dispatch *obj; pval **arguments; int arg_count = ZEND_NUM_ARGS(); - VARIANTARG var_result; - - var_result.vt = VT_EMPTY; + VARIANT *var_result; obj = (i_dispatch *) emalloc(sizeof(i_dispatch)); - php_COM_set(obj, _php_COM_get_property_handler(property_reference)->pdispVal, TRUE); + + var_result = _php_COM_get_property_handler(property_reference); + php_COM_set(obj, var_result->pdispVal, TRUE); + + var_result->vt = VT_EMPTY; arguments = (pval **) emalloc(sizeof(pval *)*arg_count); getParametersArray(ht, arg_count, arguments); - - if (do_COM_invoke(obj , &function_name->element, &var_result, arguments, arg_count)==FAILURE) { + + if (do_COM_invoke(obj , &function_name->element, var_result, arguments, arg_count)==FAILURE) { RETVAL_FALSE; } pval_destructor(&function_name->element); php_COM_release(obj); + php_variant_to_pval(var_result, return_value, 0, codepage); efree(obj); + efree(var_result); efree(arguments); - php_variant_to_pval(&var_result, return_value, 0, codepage); } for (overloaded_property = (zend_overloaded_element *) zend_llist_get_first(property_reference->elements_list); diff --git a/ext/rpc/com/com_wrapper.c b/ext/rpc/com/com_wrapper.c index ca26a5c66c..70906964ad 100644 --- a/ext/rpc/com/com_wrapper.c +++ b/ext/rpc/com/com_wrapper.c @@ -672,7 +672,8 @@ VARIANT *_php_COM_get_property_handler(zend_property_reference *property_referen obj_prop = (i_dispatch *) emalloc(sizeof(i_dispatch)); php_COM_clone(obj_prop, obj, FALSE); - + + //leak !!! var_result = (VARIANT *) emalloc(sizeof(VARIANT)); var_result->vt = VT_DISPATCH; var_result->pdispVal = obj_prop->i.dispatch; @@ -705,7 +706,6 @@ VARIANT *_php_COM_get_property_handler(zend_property_reference *property_referen break; case OE_IS_METHOD: -// var_result->pdispVal = obj_prop->i.dispatch; efree(obj_prop); return var_result; break; @@ -832,25 +832,28 @@ PHPAPI void php_COM_call_function_handler(INTERNAL_FUNCTION_PARAMETERS, zend_pro i_dispatch *obj; pval **arguments; int arg_count = ZEND_NUM_ARGS(); - VARIANTARG var_result; - - var_result.vt = VT_EMPTY; + VARIANT *var_result; obj = (i_dispatch *) emalloc(sizeof(i_dispatch)); - php_COM_set(obj, _php_COM_get_property_handler(property_reference)->pdispVal, TRUE); + + var_result = _php_COM_get_property_handler(property_reference); + php_COM_set(obj, var_result->pdispVal, TRUE); + + var_result->vt = VT_EMPTY; arguments = (pval **) emalloc(sizeof(pval *)*arg_count); getParametersArray(ht, arg_count, arguments); - - if (do_COM_invoke(obj , &function_name->element, &var_result, arguments, arg_count)==FAILURE) { + + if (do_COM_invoke(obj , &function_name->element, var_result, arguments, arg_count)==FAILURE) { RETVAL_FALSE; } pval_destructor(&function_name->element); php_COM_release(obj); + php_variant_to_pval(var_result, return_value, 0, codepage); efree(obj); + efree(var_result); efree(arguments); - php_variant_to_pval(&var_result, return_value, 0, codepage); } for (overloaded_property = (zend_overloaded_element *) zend_llist_get_first(property_reference->elements_list);