]> granicus.if.org Git - php/commitdiff
Fix #25664 - COM crashes when calling a Delphi implementations of ITypeInfo.
authorWez Furlong <wez@php.net>
Fri, 28 Nov 2003 17:11:16 +0000 (17:11 +0000)
committerWez Furlong <wez@php.net>
Fri, 28 Nov 2003 17:11:16 +0000 (17:11 +0000)
Problem was that our extension assumes that the first param to ITypeInfo::Invoke was a reference to the COM object; this is not necessarily true and caused a crash in this instance.
Problem solved by removing the ITypeInfo::Invoke call, as it doesn't buy us anything anyway.

ext/com_dotnet/com_com.c

index b2465f82bd6fdaed2304555b3cb52886d4f702f8..5484161712bd2721ed5d22a35c1ddf2ac3c18865 100644 (file)
@@ -290,21 +290,8 @@ HRESULT php_com_invoke_helper(php_com_dotnet_object *obj, DISPID id_member,
        unsigned int arg_err;
        EXCEPINFO e;
 
-       if (obj->typeinfo) {
-               hr = ITypeInfo_Invoke(obj->typeinfo, V_DISPATCH(&obj->v), id_member, flags, disp_params, v, &e, &arg_err);
-               if (FAILED(hr) && (hr != DISP_E_EXCEPTION)) {
-                       hr = IDispatch_Invoke(V_DISPATCH(&obj->v), id_member,
-                               &IID_NULL, LOCALE_SYSTEM_DEFAULT, flags, disp_params, v, &e, &arg_err);
-                       if (SUCCEEDED(hr)) {
-                               /* fall back on using IDispatch directly */
-                               ITypeInfo_Release(obj->typeinfo);
-                               obj->typeinfo = NULL;
-                       }
-               }
-       } else {
-               hr = IDispatch_Invoke(V_DISPATCH(&obj->v), id_member,
-                       &IID_NULL, LOCALE_SYSTEM_DEFAULT, flags, disp_params, v, &e, &arg_err);
-       }
+       hr = IDispatch_Invoke(V_DISPATCH(&obj->v), id_member,
+               &IID_NULL, LOCALE_SYSTEM_DEFAULT, flags, disp_params, v, &e, &arg_err);
 
        if (FAILED(hr)) {
                char *source = NULL, *desc = NULL, *msg = NULL;