summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWez Furlong <wez@php.net>2004-12-23 01:10:48 +0000
committerWez Furlong <wez@php.net>2004-12-23 01:10:48 +0000
commit4e84c36fba427dad7dfb11d2a236e0411f078ac7 (patch)
treee3e40603b1c396715ffaeaa7dabdce2cacc0ba2c
parent26420231c8ab13f073b3760918054ab05fed0f0c (diff)
downloadphp-git-4e84c36fba427dad7dfb11d2a236e0411f078ac7.tar.gz
Black magic bad.
This will probably fixed reported COM problems (multiple bug #s)
-rw-r--r--ext/com/COM.c14
1 files changed, 8 insertions, 6 deletions
diff --git a/ext/com/COM.c b/ext/com/COM.c
index 10288ca734..bfe22bc70f 100644
--- a/ext/com/COM.c
+++ b/ext/com/COM.c
@@ -1972,15 +1972,17 @@ PHPAPI void php_COM_call_function_handler(INTERNAL_FUNCTION_PARAMETERS, zend_pro
int type;
if (zend_llist_count(property_reference->elements_list)==1
- && !strcmp(Z_STRVAL(function_name->element), "com")) {
+ && !strcmp(Z_STRVAL(function_name->element), "com")) {
+ zval *tmp;
+
/* constructor */
PHP_FN(com_load)(INTERNAL_FUNCTION_PARAM_PASSTHRU);
- /* free instance created by 'new' */
- zval_dtor(object);
- /* and override it with the instance created by 'com_load()' */
- *object = *return_value;
- INIT_ZVAL(*return_value);
+ zend_hash_index_find(Z_OBJPROP_P(return_value), 0, (void**)&handle);
+ zend_list_addref(Z_RESVAL_PP(handle));
+ MAKE_STD_ZVAL(tmp);
+ ZVAL_RESOURCE(tmp, Z_RESVAL_PP(handle));
+ zend_hash_index_update(Z_OBJPROP_P(object), 0, &tmp, sizeof(tmp), NULL);
zval_dtor(&function_name->element);
return;