wez Tue Apr 19 01:57:22 2005 EDT
Modified files: (Branch: PHP_5_0)
/php-src/ext/com_dotnet com_com.c com_handlers.c com_typeinfo.c
php_com_dotnet_internal.h
Log:
- Fix #32758 Cannot access safearray properties
- Fix #32759 incorrect determination of default value
http://cvs.php.net/diff.php/php-src/ext/com_dotnet/com_com.c?r1=1.14&r2=1.14.2.1&ty=u
Index: php-src/ext/com_dotnet/com_com.c
diff -u php-src/ext/com_dotnet/com_com.c:1.14
php-src/ext/com_dotnet/com_com.c:1.14.2.1
--- php-src/ext/com_dotnet/com_com.c:1.14 Wed Jun 16 19:57:25 2004
+++ php-src/ext/com_dotnet/com_com.c Tue Apr 19 01:57:21 2005
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: com_com.c,v 1.14 2004/06/16 23:57:25 abies Exp $ */
+/* $Id: com_com.c,v 1.14.2.1 2005/04/19 05:57:21 wez Exp $ */
#ifdef HAVE_CONFIG_H
#include "config.h"
@@ -398,7 +398,7 @@
default:
desc = php_win_err(hr);
- spprintf(&msg, 0, "Error %s", desc);
+ spprintf(&msg, 0, "Error [0x%08x] %s", hr,
desc);
LocalFree(desc);
break;
}
@@ -620,7 +620,7 @@
efree(vargs);
}
- /* a bit strange this, but... */
+ /* a bit of a hack this, but it's needed for COM array access. */
if (hr == DISP_E_BADPARAMCOUNT)
return hr;
http://cvs.php.net/diff.php/php-src/ext/com_dotnet/com_handlers.c?r1=1.22.2.4&r2=1.22.2.5&ty=u
Index: php-src/ext/com_dotnet/com_handlers.c
diff -u php-src/ext/com_dotnet/com_handlers.c:1.22.2.4
php-src/ext/com_dotnet/com_handlers.c:1.22.2.5
--- php-src/ext/com_dotnet/com_handlers.c:1.22.2.4 Mon Apr 18 12:22:38 2005
+++ php-src/ext/com_dotnet/com_handlers.c Tue Apr 19 01:57:21 2005
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: com_handlers.c,v 1.22.2.4 2005/04/18 16:22:38 wez Exp $ */
+/* $Id: com_handlers.c,v 1.22.2.5 2005/04/19 05:57:21 wez Exp $ */
#ifdef HAVE_CONFIG_H
#include "config.h"
@@ -49,7 +49,7 @@
convert_to_string_ex(&member);
res = php_com_do_invoke(obj, Z_STRVAL_P(member),
Z_STRLEN_P(member),
- DISPATCH_PROPERTYGET, &v, 0, NULL TSRMLS_CC);
+ DISPATCH_METHOD|DISPATCH_PROPERTYGET, &v, 0,
NULL TSRMLS_CC);
if (res == SUCCESS) {
php_com_zval_from_variant(return_value, &v,
obj->code_page TSRMLS_CC);
@@ -84,30 +84,6 @@
}
}
-static HRESULT com_get_default_binding(php_com_dotnet_object *obj TSRMLS_DC)
-{
- VARDESC *vardesc;
- int i;
-
- if (!obj->typeinfo) {
- return FAILURE;
- }
-
- for (i = 0; !obj->have_default_bind; i++) {
- if (FAILED(ITypeInfo_GetVarDesc(obj->typeinfo, i, &vardesc))) {
- return FAILURE;
- }
-
- if (vardesc->wVarFlags & VARFLAG_FDEFAULTBIND) {
- obj->default_bind = (DISPID)vardesc->memid;
- obj->have_default_bind = 1;
- }
-
- ITypeInfo_ReleaseVarDesc(obj->typeinfo, vardesc);
- }
- return obj->have_default_bind ? SUCCESS : FAILURE;
-}
-
static zval *com_read_dimension(zval *object, zval *offset, int type TSRMLS_DC)
{
zval *return_value;
@@ -122,14 +98,9 @@
obj = CDNO_FETCH(object);
if (V_VT(&obj->v) == VT_DISPATCH) {
- if (!obj->have_default_bind && !com_get_default_binding(obj
TSRMLS_CC)) {
- php_com_throw_exception(E_INVALIDARG, "this COM object
has no default property" TSRMLS_CC);
- return return_value;
- }
-
VariantInit(&v);
- if (SUCCESS == php_com_do_invoke_by_id(obj, obj->default_bind,
+ if (SUCCESS == php_com_do_invoke_by_id(obj, DISPID_VALUE,
DISPATCH_METHOD|DISPATCH_PROPERTYGET, &v, 1,
&offset TSRMLS_CC)) {
php_com_zval_from_variant(return_value, &v,
obj->code_page TSRMLS_CC);
VariantClear(&v);
@@ -163,17 +134,12 @@
obj = CDNO_FETCH(object);
if (V_VT(&obj->v) == VT_DISPATCH) {
- if (!obj->have_default_bind && !com_get_default_binding(obj
TSRMLS_CC)) {
- php_com_throw_exception(E_INVALIDARG, "this COM object
has no default property" TSRMLS_CC);
- return;
- }
-
args[0] = offset;
args[1] = value;
VariantInit(&v);
- if (SUCCESS == php_com_do_invoke_by_id(obj, obj->default_bind,
+ if (SUCCESS == php_com_do_invoke_by_id(obj, DISPID_VALUE,
DISPATCH_METHOD|DISPATCH_PROPERTYPUT, &v, 2,
args TSRMLS_CC)) {
VariantClear(&v);
}
@@ -536,12 +502,7 @@
VariantInit(&v);
if (V_VT(&obj->v) == VT_DISPATCH) {
-
- if (!obj->have_default_bind && !com_get_default_binding(obj
TSRMLS_CC)) {
- return FAILURE;
- }
-
- if (FAILURE == php_com_do_invoke_by_id(obj, obj->default_bind,
+ if (FAILURE == php_com_do_invoke_by_id(obj, DISPID_VALUE,
DISPATCH_METHOD|DISPATCH_PROPERTYGET, &v, 0,
NULL TSRMLS_CC)) {
return FAILURE;
}
http://cvs.php.net/diff.php/php-src/ext/com_dotnet/com_typeinfo.c?r1=1.4.2.1&r2=1.4.2.2&ty=u
Index: php-src/ext/com_dotnet/com_typeinfo.c
diff -u php-src/ext/com_dotnet/com_typeinfo.c:1.4.2.1
php-src/ext/com_dotnet/com_typeinfo.c:1.4.2.2
--- php-src/ext/com_dotnet/com_typeinfo.c:1.4.2.1 Sat Oct 9 09:08:49 2004
+++ php-src/ext/com_dotnet/com_typeinfo.c Tue Apr 19 01:57:21 2005
@@ -17,7 +17,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: com_typeinfo.c,v 1.4.2.1 2004/10/09 13:08:49 wez Exp $ */
+/* $Id: com_typeinfo.c,v 1.4.2.2 2005/04/19 05:57:21 wez Exp $ */
#ifdef HAVE_CONFIG_H
#include "config.h"
@@ -400,6 +400,7 @@
{ VT_VOID, "VT_VOID" },
{ VT_PTR, "VT_PTR" },
{ VT_HRESULT, "VT_HRESULT" },
+ { VT_SAFEARRAY, "VT_SAFEARRAY" },
{ 0, NULL }
};
http://cvs.php.net/diff.php/php-src/ext/com_dotnet/php_com_dotnet_internal.h?r1=1.12&r2=1.12.2.1&ty=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.12
php-src/ext/com_dotnet/php_com_dotnet_internal.h:1.12.2.1
--- php-src/ext/com_dotnet/php_com_dotnet_internal.h:1.12 Wed Jun 16
19:57:25 2004
+++ php-src/ext/com_dotnet/php_com_dotnet_internal.h Tue Apr 19 01:57:21 2005
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: php_com_dotnet_internal.h,v 1.12 2004/06/16 23:57:25 abies Exp $ */
+/* $Id: php_com_dotnet_internal.h,v 1.12.2.1 2005/04/19 05:57:21 wez Exp $ */
#ifndef PHP_COM_DOTNET_INTERNAL_H
#define PHP_COM_DOTNET_INTERNAL_H
@@ -37,10 +37,8 @@
ITypeInfo *typeinfo;
long code_page;
- unsigned int have_default_bind:1;
zend_class_entry *ce;
- DISPID default_bind; /* default property for array accesses */
/* associated event sink */
IDispatch *sink_dispatch;
--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php