cvs: php4 /ext/com COM.c
| From: | Harald Radi | Date: | Thu, 02 May 2002 13:37:30 +0000 |
| Subject: | cvs: php4 /ext/com COM.c | ||
| Groups: | php.cvs | ||
| Request: | Send a blank email to php-cvs+get-11626@lists.php.net to get a copy of this message | ||
phanto Thu May 2 09:37:30 2002 EDT
Modified files:
/php4/ext/com COM.c
Log:
remove temporary resources immediately
return value fix
#thanks to alan for 'remote debugging'
Index: php4/ext/com/COM.c
diff -u php4/ext/com/COM.c:1.69 php4/ext/com/COM.c:1.70
--- php4/ext/com/COM.c:1.69 Mon Apr 29 13:20:14 2002
+++ php4/ext/com/COM.c Thu May 2 09:37:30 2002
@@ -1439,34 +1439,38 @@
pval *object_handle;
PHP_FN(com_load)(INTERNAL_FUNCTION_PARAM_PASSTHRU);
- if (!zend_is_true(return_value)) {
- ZVAL_FALSE(object);
- return;
+ if (zend_is_true(return_value)) {
+ ALLOC_ZVAL(object_handle);
+ *object_handle = *return_value;
+ pval_copy_constructor(object_handle);
+ INIT_PZVAL(object_handle);
+ zend_hash_index_update(Z_OBJPROP_P(object), 0, &object_handle, sizeof(pval *), NULL);
+ pval_destructor(&function_name->element);
+ } else {
+ ZVAL_NULL(object);
}
- ALLOC_ZVAL(object_handle);
- *object_handle = *return_value;
- pval_copy_constructor(object_handle);
- INIT_PZVAL(object_handle);
- zend_hash_index_update(Z_OBJPROP_P(object), 0, &object_handle, sizeof(pval *), NULL);
- pval_destructor(&function_name->element);
return;
}
+ RETVAL_NULL();
property = php_COM_get_property_handler(property_reference);
- if (Z_TYPE(property) == IS_NULL) {
- if (property.refcount == 1) {
- pval_destructor(&property);
- }
+
+ if (Z_TYPE(property) != IS_OBJECT) {
+ pval_destructor(&property);
pval_destructor(&function_name->element);
+
+ /* error message - function call on a non-object */
return;
}
+
zend_hash_index_find(Z_OBJPROP(property), 0, (void **) &handle);
obj = (comval *)zend_list_find(Z_LVAL_PP(handle), &type);
if (!obj || (type != IS_COM)) {
pval_destructor(&property);
pval_destructor(&function_name->element);
+
return;
}
@@ -1486,9 +1490,7 @@
arguments = (pval **) emalloc(sizeof(pval *)*arg_count);
zend_get_parameters_array(ht, arg_count, arguments);
- if (do_COM_invoke(obj , &function_name->element, var_result, arguments, arg_count
TSRMLS_CC) == FAILURE) {
- RETVAL_FALSE;
- } else {
+ if (do_COM_invoke(obj , &function_name->element, var_result, arguments, arg_count
TSRMLS_CC) == SUCCESS) {
php_variant_to_pval(var_result, return_value, codepage TSRMLS_CC);
}
@@ -1496,9 +1498,12 @@
efree(arguments);
}
- if (property.refcount == 1) {
+ if (zend_llist_count(property_reference->elements_list) > 1) {
+ /* destruct temporary object */
+ zend_list_delete(Z_LVAL_PP(handle));
pval_destructor(&property);
}
+
pval_destructor(&function_name->element);
}