rrichards Thu Jan 26 11:17:34 2006 UTC
Modified files: (Branch: PHP_5_1)
/php-src/ext/com_dotnet com_com.c com_handlers.c
php_com_dotnet_internal.h
Log:
Fix bug #35954 (Fatal com_exception casting object)
http://cvs.php.net/viewcvs.cgi/php-src/ext/com_dotnet/com_com.c?r1=1.16.2.1&r2=1.16.2.2&diff_format=u
Index: php-src/ext/com_dotnet/com_com.c
diff -u php-src/ext/com_dotnet/com_com.c:1.16.2.1
php-src/ext/com_dotnet/com_com.c:1.16.2.2
--- php-src/ext/com_dotnet/com_com.c:1.16.2.1 Sun Jan 1 12:50:00 2006
+++ php-src/ext/com_dotnet/com_com.c Thu Jan 26 11:17:34 2006
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: com_com.c,v 1.16.2.1 2006/01/01 12:50:00 sniper Exp $ */
+/* $Id: com_com.c,v 1.16.2.2 2006/01/26 11:17:34 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()
http://cvs.php.net/viewcvs.cgi/php-src/ext/com_dotnet/com_handlers.c?r1=1.30.2.2&r2=1.30.2.3&diff_format=u
Index: php-src/ext/com_dotnet/com_handlers.c
diff -u php-src/ext/com_dotnet/com_handlers.c:1.30.2.2
php-src/ext/com_dotnet/com_handlers.c:1.30.2.3
--- php-src/ext/com_dotnet/com_handlers.c:1.30.2.2 Sun Jan 1 12:50:00 2006
+++ php-src/ext/com_dotnet/com_handlers.c Thu Jan 26 11:17:34 2006
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: com_handlers.c,v 1.30.2.2 2006/01/01 12:50:00 sniper Exp $ */
+/* $Id: com_handlers.c,v 1.30.2.3 2006/01/26 11:17:34 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)) {
@@ -504,8 +504,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/php_com_dotnet_internal.h?r1=1.14.2.2&r2=1.14.2.3&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.14.2.2
php-src/ext/com_dotnet/php_com_dotnet_internal.h:1.14.2.3
--- php-src/ext/com_dotnet/php_com_dotnet_internal.h:1.14.2.2 Sun Jan 1
12:50:00 2006
+++ php-src/ext/com_dotnet/php_com_dotnet_internal.h Thu Jan 26 11:17:34 2006
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: php_com_dotnet_internal.h,v 1.14.2.2 2006/01/01 12:50:00 sniper Exp $
*/
+/* $Id: php_com_dotnet_internal.h,v 1.14.2.3 2006/01/26 11:17:34 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,
--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php