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