rrichards               Thu Jan 26 11:18:09 2006 UTC

  Modified files:              
    /php-src/ext/com_dotnet     php_com_dotnet_internal.h com_handlers.c 
                                com_com.c 
  Log:
  MFB51: Fix bug #35954 (Fatal com_exception casting object)
  
http://cvs.php.net/viewcvs.cgi/php-src/ext/com_dotnet/php_com_dotnet_internal.h?r1=1.16&r2=1.17&diff_format=u
Index: php-src/ext/com_dotnet/php_com_dotnet_internal.h
diff -u php-src/ext/com_dotnet/php_com_dotnet_internal.h:1.16 
php-src/ext/com_dotnet/php_com_dotnet_internal.h:1.17
--- php-src/ext/com_dotnet/php_com_dotnet_internal.h:1.16       Sun Jan  1 
13:09:48 2006
+++ php-src/ext/com_dotnet/php_com_dotnet_internal.h    Thu Jan 26 11:18:09 2006
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: php_com_dotnet_internal.h,v 1.16 2006/01/01 13:09:48 sniper Exp $ */
+/* $Id: php_com_dotnet_internal.h,v 1.17 2006/01/26 11:18:09 rrichards Exp $ */
 
 #ifndef PHP_COM_DOTNET_INTERNAL_H
 #define PHP_COM_DOTNET_INTERNAL_H
@@ -102,11 +102,11 @@
 PHP_FUNCTION(com_get_active_object);
 
 HRESULT php_com_invoke_helper(php_com_dotnet_object *obj, DISPID id_member,
-               WORD flags, DISPPARAMS *disp_params, VARIANT *v TSRMLS_DC);
+               WORD flags, DISPPARAMS *disp_params, VARIANT *v, int silent 
TSRMLS_DC);
 HRESULT php_com_get_id_of_name(php_com_dotnet_object *obj, char *name,
                int namelen, DISPID *dispid TSRMLS_DC);
 int php_com_do_invoke_by_id(php_com_dotnet_object *obj, DISPID dispid,
-               WORD flags,     VARIANT *v, int nargs, zval **args TSRMLS_DC);
+               WORD flags,     VARIANT *v, int nargs, zval **args, int silent 
TSRMLS_DC);
 int php_com_do_invoke(php_com_dotnet_object *obj, char *name, int namelen,
                WORD flags,     VARIANT *v, int nargs, zval **args TSRMLS_DC);
 int php_com_do_invoke_byref(php_com_dotnet_object *obj, char *name, int 
namelen,
http://cvs.php.net/viewcvs.cgi/php-src/ext/com_dotnet/com_handlers.c?r1=1.33&r2=1.34&diff_format=u
Index: php-src/ext/com_dotnet/com_handlers.c
diff -u php-src/ext/com_dotnet/com_handlers.c:1.33 
php-src/ext/com_dotnet/com_handlers.c:1.34
--- php-src/ext/com_dotnet/com_handlers.c:1.33  Sun Jan  1 13:09:48 2006
+++ php-src/ext/com_dotnet/com_handlers.c       Thu Jan 26 11:18:09 2006
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: com_handlers.c,v 1.33 2006/01/01 13:09:48 sniper Exp $ */
+/* $Id: com_handlers.c,v 1.34 2006/01/26 11:18:09 rrichards Exp $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
@@ -101,7 +101,7 @@
                VariantInit(&v);
 
                if (SUCCESS == php_com_do_invoke_by_id(obj, DISPID_VALUE,
-                               DISPATCH_METHOD|DISPATCH_PROPERTYGET, &v, 1, 
&offset TSRMLS_CC)) {
+                               DISPATCH_METHOD|DISPATCH_PROPERTYGET, &v, 1, 
&offset, 0 TSRMLS_CC)) {
                        php_com_zval_from_variant(return_value, &v, 
obj->code_page TSRMLS_CC);
                        VariantClear(&v);
                }
@@ -140,7 +140,7 @@
                VariantInit(&v);
 
                if (SUCCESS == php_com_do_invoke_by_id(obj, DISPID_VALUE,
-                               DISPATCH_METHOD|DISPATCH_PROPERTYPUT, &v, 2, 
args TSRMLS_CC)) {
+                               DISPATCH_METHOD|DISPATCH_PROPERTYPUT, &v, 2, 
args, 0 TSRMLS_CC)) {
                        VariantClear(&v);
                }
        } else if (V_ISARRAY(&obj->v)) {
@@ -500,8 +500,8 @@
 
        if (V_VT(&obj->v) == VT_DISPATCH) {
                if (FAILURE == php_com_do_invoke_by_id(obj, DISPID_VALUE,
-                               DISPATCH_METHOD|DISPATCH_PROPERTYGET, &v, 0, 
NULL TSRMLS_CC)) {
-                       return FAILURE;
+                               DISPATCH_METHOD|DISPATCH_PROPERTYGET, &v, 0, 
NULL, 1 TSRMLS_CC)) {
+                       VariantCopy(&v, &obj->v);
                }
        } else {
                VariantCopy(&v, &obj->v);
http://cvs.php.net/viewcvs.cgi/php-src/ext/com_dotnet/com_com.c?r1=1.17&r2=1.18&diff_format=u
Index: php-src/ext/com_dotnet/com_com.c
diff -u php-src/ext/com_dotnet/com_com.c:1.17 
php-src/ext/com_dotnet/com_com.c:1.18
--- php-src/ext/com_dotnet/com_com.c:1.17       Sun Jan  1 13:09:48 2006
+++ php-src/ext/com_dotnet/com_com.c    Thu Jan 26 11:18:09 2006
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: com_com.c,v 1.17 2006/01/01 13:09:48 sniper Exp $ */
+/* $Id: com_com.c,v 1.18 2006/01/26 11:18:09 rrichards Exp $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
@@ -336,7 +336,7 @@
 /* Performs an Invoke on the given com object.
  * returns a failure code and creates an exception if there was an error */
 HRESULT php_com_invoke_helper(php_com_dotnet_object *obj, DISPID id_member,
-               WORD flags, DISPPARAMS *disp_params, VARIANT *v TSRMLS_DC)
+               WORD flags, DISPPARAMS *disp_params, VARIANT *v, int silent 
TSRMLS_DC)
 {
        HRESULT hr;
        unsigned int arg_err;
@@ -345,7 +345,7 @@
        hr = IDispatch_Invoke(V_DISPATCH(&obj->v), id_member,
                &IID_NULL, LOCALE_SYSTEM_DEFAULT, flags, disp_params, v, &e, 
&arg_err);
 
-       if (FAILED(hr)) {
+       if (silent == 0 && FAILED(hr)) {
                char *source = NULL, *desc = NULL, *msg = NULL;
                int source_len, desc_len;
 
@@ -543,7 +543,7 @@
        }
 
        /* this will create an exception if needed */
-       hr = php_com_invoke_helper(obj, dispid, flags, &disp_params, v 
TSRMLS_CC);      
+       hr = php_com_invoke_helper(obj, dispid, flags, &disp_params, v, 0 
TSRMLS_CC);   
 
        /* release variants */
        if (vargs) {
@@ -581,7 +581,7 @@
 
 
 int php_com_do_invoke_by_id(php_com_dotnet_object *obj, DISPID dispid,
-               WORD flags,     VARIANT *v, int nargs, zval **args TSRMLS_DC)
+               WORD flags,     VARIANT *v, int nargs, zval **args, int silent 
TSRMLS_DC)
 {
        DISPID altdispid;
        DISPPARAMS disp_params;
@@ -610,7 +610,7 @@
        }
 
        /* this will create an exception if needed */
-       hr = php_com_invoke_helper(obj, dispid, flags, &disp_params, v 
TSRMLS_CC);      
+       hr = php_com_invoke_helper(obj, dispid, flags, &disp_params, v, silent 
TSRMLS_CC);      
 
        /* release variants */
        if (vargs) {
@@ -646,7 +646,7 @@
                return FAILURE;
        }
 
-       return php_com_do_invoke_by_id(obj, dispid, flags, v, nargs, args 
TSRMLS_CC);
+       return php_com_do_invoke_by_id(obj, dispid, flags, v, nargs, args, 0 
TSRMLS_CC);
 }
 
 /* {{{ proto string com_create_guid()

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

Reply via email to