Skip to content

Commit e27b13a

Browse files
author
Harald Radi
committed
again fixed a few memory issues
1 parent bd21994 commit e27b13a

File tree

6 files changed

+40
-28
lines changed

6 files changed

+40
-28
lines changed

ext/com/COM.c

Lines changed: 17 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ PHPAPI HRESULT php_COM_get_ids_of_names(comval *obj, OLECHAR FAR* FAR* rgszNames
8181
PHPAPI HRESULT php_COM_release(comval *obj);
8282
PHPAPI HRESULT php_COM_addref(comval *obj);
8383
PHPAPI HRESULT php_COM_destruct(comval *obj);
84-
PHPAPI HRESULT php_COM_set(comval *obj, IDispatch FAR* pDisp, int cleanup);
84+
PHPAPI HRESULT php_COM_set(comval *obj, IDispatch FAR* FAR* pDisp, int cleanup);
8585
PHPAPI HRESULT php_COM_clone(comval *obj, comval *clone, int cleanup);
8686

8787
PHPAPI int php_COM_get_le_comval();
@@ -236,12 +236,19 @@ PHPAPI HRESULT php_COM_addref(comval *obj)
236236
return obj->refcount;
237237
}
238238

239-
PHPAPI HRESULT php_COM_set(comval *obj, IDispatch FAR* pDisp, int cleanup)
239+
PHPAPI HRESULT php_COM_set(comval *obj, IDispatch FAR* FAR* ppDisp, int cleanup)
240240
{
241241
HRESULT hr = 1;
242242
DISPPARAMS dispparams;
243243
VARIANT *var_result;
244+
IDispatch FAR* pDisp;
244245

246+
pDisp = *ppDisp;
247+
if(cleanup)
248+
{
249+
*ppDisp = NULL;
250+
}
251+
245252
C_REFCOUNT(obj) = 1;
246253
C_DISPATCH(obj) = pDisp;
247254
C_HASTLIB(obj) = SUCCEEDED(C_DISPATCH_VT(obj)->GetTypeInfo(C_DISPATCH(obj), 0, LANG_NEUTRAL, &C_TYPEINFO(obj)));
@@ -610,7 +617,7 @@ PHP_FUNCTION(com_load)
610617
}
611618
}
612619

613-
php_COM_set(obj, C_DISPATCH(obj), TRUE);
620+
php_COM_set(obj, &C_DISPATCH(obj), TRUE);
614621

615622
if(INI_INT("com.autoregister_casesensitive"))
616623
{
@@ -865,7 +872,7 @@ PHP_FUNCTION(com_invoke)
865872
RETURN_FALSE;
866873
}
867874

868-
php_variant_to_pval(var_result, return_value, 0, codepage);
875+
php_variant_to_pval(var_result, return_value, FALSE, codepage);
869876

870877
FREE_VARIANT(var_result);
871878
efree(arguments);
@@ -1066,7 +1073,7 @@ static void do_COM_propput(pval *return_value, comval *obj, pval *arg_property,
10661073

10671074
if(SUCCEEDED(hr))
10681075
{
1069-
php_variant_to_pval(var_result, return_value, 0, codepage);
1076+
php_variant_to_pval(var_result, return_value, FALSE, codepage);
10701077
}
10711078
else
10721079
{
@@ -1112,7 +1119,7 @@ PHP_FUNCTION(com_propget)
11121119
RETURN_FALSE;
11131120
}
11141121

1115-
php_variant_to_pval(var_result, return_value, 0, codepage);
1122+
php_variant_to_pval(var_result, return_value, FALSE, codepage);
11161123

11171124
FREE_VARIANT(var_result);
11181125
}
@@ -1261,7 +1268,7 @@ PHPAPI pval php_COM_get_property_handler(zend_property_reference *property_refer
12611268
}
12621269

12631270
obj = obj_prop;
1264-
php_COM_set(obj, V_DISPATCH(var_result), TRUE);
1271+
php_COM_set(obj, &V_DISPATCH(var_result), TRUE);
12651272

12661273
RETVAL_COM(obj);
12671274
}
@@ -1347,7 +1354,7 @@ PHPAPI int php_COM_set_property_handler(zend_property_reference *property_refere
13471354
}
13481355

13491356
obj = obj_prop;
1350-
php_COM_set(obj, V_DISPATCH(var_result), TRUE);
1357+
php_COM_set(obj, &V_DISPATCH(var_result), TRUE);
13511358
}
13521359
else
13531360
{
@@ -1449,11 +1456,10 @@ PHPAPI void php_COM_call_function_handler(INTERNAL_FUNCTION_PARAMETERS, zend_pro
14491456
}
14501457
else
14511458
{
1452-
php_variant_to_pval(var_result, return_value, 0, codepage);
1459+
php_variant_to_pval(var_result, return_value, FALSE, codepage);
14531460
}
14541461

1455-
// FREE_VARIANT(var_result);
1456-
efree(var_result);
1462+
FREE_VARIANT(var_result);
14571463
efree(arguments);
14581464
}
14591465

ext/com/conversion.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -754,8 +754,8 @@ PHPAPI int php_variant_to_pval(VARIANT *var_arg, pval *pval_arg, int persistent,
754754
else
755755
{
756756
ALLOC_COM(obj);
757-
php_COM_set(obj, V_DISPATCH(var_arg), TRUE);
758-
757+
php_COM_set(obj, &V_DISPATCH(var_arg), TRUE);
758+
759759
ZVAL_COM(pval_arg, obj);
760760
}
761761
}

ext/com/php_COM.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ extern PHPAPI HRESULT php_COM_get_ids_of_names(comval *obj, OLECHAR FAR* FAR* rg
1515
extern PHPAPI HRESULT php_COM_release(comval *obj);
1616
extern PHPAPI HRESULT php_COM_addref(comval *obj);
1717
extern PHPAPI HRESULT php_COM_destruct(comval *obj);
18-
extern PHPAPI HRESULT php_COM_set(comval *obj, IDispatch FAR* pDisp, int cleanup);
18+
extern PHPAPI HRESULT php_COM_set(comval *obj, IDispatch FAR* FAR* pDisp, int cleanup);
1919
extern PHPAPI HRESULT php_COM_clone(comval *obj, comval *clone, int cleanup);
2020

2121
extern int php_COM_get_le_comval();

ext/rpc/com/com_wrapper.c

Lines changed: 17 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ PHPAPI HRESULT php_COM_get_ids_of_names(comval *obj, OLECHAR FAR* FAR* rgszNames
8181
PHPAPI HRESULT php_COM_release(comval *obj);
8282
PHPAPI HRESULT php_COM_addref(comval *obj);
8383
PHPAPI HRESULT php_COM_destruct(comval *obj);
84-
PHPAPI HRESULT php_COM_set(comval *obj, IDispatch FAR* pDisp, int cleanup);
84+
PHPAPI HRESULT php_COM_set(comval *obj, IDispatch FAR* FAR* pDisp, int cleanup);
8585
PHPAPI HRESULT php_COM_clone(comval *obj, comval *clone, int cleanup);
8686

8787
PHPAPI int php_COM_get_le_comval();
@@ -236,12 +236,19 @@ PHPAPI HRESULT php_COM_addref(comval *obj)
236236
return obj->refcount;
237237
}
238238

239-
PHPAPI HRESULT php_COM_set(comval *obj, IDispatch FAR* pDisp, int cleanup)
239+
PHPAPI HRESULT php_COM_set(comval *obj, IDispatch FAR* FAR* ppDisp, int cleanup)
240240
{
241241
HRESULT hr = 1;
242242
DISPPARAMS dispparams;
243243
VARIANT *var_result;
244+
IDispatch FAR* pDisp;
244245

246+
pDisp = *ppDisp;
247+
if(cleanup)
248+
{
249+
*ppDisp = NULL;
250+
}
251+
245252
C_REFCOUNT(obj) = 1;
246253
C_DISPATCH(obj) = pDisp;
247254
C_HASTLIB(obj) = SUCCEEDED(C_DISPATCH_VT(obj)->GetTypeInfo(C_DISPATCH(obj), 0, LANG_NEUTRAL, &C_TYPEINFO(obj)));
@@ -610,7 +617,7 @@ PHP_FUNCTION(com_load)
610617
}
611618
}
612619

613-
php_COM_set(obj, C_DISPATCH(obj), TRUE);
620+
php_COM_set(obj, &C_DISPATCH(obj), TRUE);
614621

615622
if(INI_INT("com.autoregister_casesensitive"))
616623
{
@@ -865,7 +872,7 @@ PHP_FUNCTION(com_invoke)
865872
RETURN_FALSE;
866873
}
867874

868-
php_variant_to_pval(var_result, return_value, 0, codepage);
875+
php_variant_to_pval(var_result, return_value, FALSE, codepage);
869876

870877
FREE_VARIANT(var_result);
871878
efree(arguments);
@@ -1066,7 +1073,7 @@ static void do_COM_propput(pval *return_value, comval *obj, pval *arg_property,
10661073

10671074
if(SUCCEEDED(hr))
10681075
{
1069-
php_variant_to_pval(var_result, return_value, 0, codepage);
1076+
php_variant_to_pval(var_result, return_value, FALSE, codepage);
10701077
}
10711078
else
10721079
{
@@ -1112,7 +1119,7 @@ PHP_FUNCTION(com_propget)
11121119
RETURN_FALSE;
11131120
}
11141121

1115-
php_variant_to_pval(var_result, return_value, 0, codepage);
1122+
php_variant_to_pval(var_result, return_value, FALSE, codepage);
11161123

11171124
FREE_VARIANT(var_result);
11181125
}
@@ -1261,7 +1268,7 @@ PHPAPI pval php_COM_get_property_handler(zend_property_reference *property_refer
12611268
}
12621269

12631270
obj = obj_prop;
1264-
php_COM_set(obj, V_DISPATCH(var_result), TRUE);
1271+
php_COM_set(obj, &V_DISPATCH(var_result), TRUE);
12651272

12661273
RETVAL_COM(obj);
12671274
}
@@ -1347,7 +1354,7 @@ PHPAPI int php_COM_set_property_handler(zend_property_reference *property_refere
13471354
}
13481355

13491356
obj = obj_prop;
1350-
php_COM_set(obj, V_DISPATCH(var_result), TRUE);
1357+
php_COM_set(obj, &V_DISPATCH(var_result), TRUE);
13511358
}
13521359
else
13531360
{
@@ -1449,11 +1456,10 @@ PHPAPI void php_COM_call_function_handler(INTERNAL_FUNCTION_PARAMETERS, zend_pro
14491456
}
14501457
else
14511458
{
1452-
php_variant_to_pval(var_result, return_value, 0, codepage);
1459+
php_variant_to_pval(var_result, return_value, FALSE, codepage);
14531460
}
14541461

1455-
// FREE_VARIANT(var_result);
1456-
efree(var_result);
1462+
FREE_VARIANT(var_result);
14571463
efree(arguments);
14581464
}
14591465

ext/rpc/com/conversion.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -754,8 +754,8 @@ PHPAPI int php_variant_to_pval(VARIANT *var_arg, pval *pval_arg, int persistent,
754754
else
755755
{
756756
ALLOC_COM(obj);
757-
php_COM_set(obj, V_DISPATCH(var_arg), TRUE);
758-
757+
php_COM_set(obj, &V_DISPATCH(var_arg), TRUE);
758+
759759
ZVAL_COM(pval_arg, obj);
760760
}
761761
}

ext/rpc/com/php_com.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ extern PHPAPI HRESULT php_COM_get_ids_of_names(comval *obj, OLECHAR FAR* FAR* rg
1515
extern PHPAPI HRESULT php_COM_release(comval *obj);
1616
extern PHPAPI HRESULT php_COM_addref(comval *obj);
1717
extern PHPAPI HRESULT php_COM_destruct(comval *obj);
18-
extern PHPAPI HRESULT php_COM_set(comval *obj, IDispatch FAR* pDisp, int cleanup);
18+
extern PHPAPI HRESULT php_COM_set(comval *obj, IDispatch FAR* FAR* pDisp, int cleanup);
1919
extern PHPAPI HRESULT php_COM_clone(comval *obj, comval *clone, int cleanup);
2020

2121
extern int php_COM_get_le_comval();

0 commit comments

Comments
 (0)