wez             Fri Nov 28 12:11:16 2003 EDT

  Modified files:              
    /php-src/ext/com_dotnet     com_com.c 
  Log:
  Fix #25664 - COM crashes when calling a Delphi implementations of ITypeInfo.
  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.
  
Index: php-src/ext/com_dotnet/com_com.c
diff -u php-src/ext/com_dotnet/com_com.c:1.4 php-src/ext/com_dotnet/com_com.c:1.5
--- php-src/ext/com_dotnet/com_com.c:1.4        Tue Oct  7 14:50:07 2003
+++ php-src/ext/com_dotnet/com_com.c    Fri Nov 28 12:11:16 2003
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: com_com.c,v 1.4 2003/10/07 18:50:07 wez Exp $ */
+/* $Id: com_com.c,v 1.5 2003/11/28 17:11:16 wez Exp $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
@@ -290,21 +290,8 @@
        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;

-- 
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to