cvs: /php4 NEWS /php4/ext/com COM.c
| From: | Zeev Suraski | Date: | Mon, 10 Apr 2000 21:54:44 +0000 |
| Subject: | cvs: /php4 NEWS /php4/ext/com COM.c | ||
| Groups: | php.version4 | ||
| Request: | Send a blank email to php-version4+get-13372@lists.php.net to get a copy of this message | ||
zeev Mon Apr 10 14:54:44 2000 EDT
Modified files:
/php4 NEWS
/php4/ext/com COM.c
Log:
- Added support for reading properties that require arguments in the COM
module - writing to them will only be supported in PHP 4.1 (Zeev)
Index: php4/NEWS
diff -u php4/NEWS:1.193 php4/NEWS:1.194
--- php4/NEWS:1.193 Mon Apr 10 14:25:08 2000
+++ php4/NEWS Mon Apr 10 14:54:14 2000
@@ -2,7 +2,9 @@
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
?? ??? 2000, Version 4.0.0 Release
-- Fixed a memory leak in the COM module (Zeev)
+- Added support for reading properties that require arguments in the COM
+ module - writing to them will only be supported in PHP 4.1 (Zeev)
+- Fixed a very old legacy memory leak in the COM module (Zeev)
- Fixed problems with object-overloading support - noteably, COM and Java (Zeev,
Zend Engine)
- Fixed an overrun in WDDX. (Thies)
Index: php4/ext/com/COM.c
diff -u php4/ext/com/COM.c:1.28 php4/ext/com/COM.c:1.29
--- php4/ext/com/COM.c:1.28 Mon Apr 10 14:32:18 2000
+++ php4/ext/com/COM.c Mon Apr 10 14:54:14 2000
@@ -220,7 +220,7 @@
PHP_MINIT_FUNCTION(COM)
{
CoInitialize(NULL);
- le_idispatch = register_list_destructors(php_idispatch_destructor,NULL);
+ le_idispatch = register_list_destructors(php_idispatch_destructor, NULL);
php_register_COM_class();
REGISTER_INI_ENTRIES();
return SUCCESS;
@@ -507,7 +507,7 @@
dispparams.cNamedArgs = 0;
hr = i_dispatch->lpVtbl->Invoke(i_dispatch, dispid, &IID_NULL,
- LOCALE_SYSTEM_DEFAULT, DISPATCH_METHOD,
+ LOCALE_SYSTEM_DEFAULT, DISPATCH_METHOD|DISPATCH_PROPERTYGET,
&dispparams, var_result, NULL, 0);
if (FAILED(hr)) {
@@ -773,7 +773,8 @@
zend_hash_index_find(object->value.obj.properties, 0, (void **) &idispatch_handle);
i_dispatch = zend_list_find((*idispatch_handle)->value.lval,&type);
if (!i_dispatch || (type!=le_idispatch)) {
- /* bail out */
+ var_result.vt = VT_EMPTY;
+ return var_result;
}
var_result.vt = VT_DISPATCH;
@@ -784,16 +785,19 @@
switch (overloaded_property->type) {
case OE_IS_ARRAY:
if (do_COM_offget(&var_result, &var_result, &overloaded_property->element,
element!=property_reference->elements_list->head)==FAILURE) {
- /* bail out */
+ var_result.vt = VT_EMPTY;
+ return var_result;
}
/*printf("Array offset: ");*/
break;
case OE_IS_OBJECT:
if (var_result.vt != VT_DISPATCH) {
- /* bail out */
+ var_result.vt = VT_EMPTY;
+ return var_result;
} else {
if (do_COM_propget(&var_result, var_result.pdispVal, &overloaded_property->element,
element!=property_reference->elements_list->head)==FAILURE) {
- /* bail out */
+ var_result.vt = VT_EMPTY;
+ return var_result;
}
/*printf("Object property: ");*/
}
@@ -844,7 +848,7 @@
zend_hash_index_find(object->value.obj.properties, 0, (void **) &idispatch_handle);
i_dispatch = zend_list_find((*idispatch_handle)->value.lval,&type);
if (!i_dispatch || (type!=le_idispatch)) {
- /* bail out */
+ return FAILURE;
}
var_result.vt = VT_DISPATCH;
var_result.pdispVal = i_dispatch;
@@ -857,7 +861,7 @@
break;
case OE_IS_OBJECT:
if (var_result.vt != VT_DISPATCH) {
- /* bail out */
+ return FAILURE;
} else {
do_COM_propget(&var_result, i_dispatch, &overloaded_property->element,
element!=property_reference->elements_list->head);
/*printf("Object property: ");*/