summaryrefslogtreecommitdiff
path: root/Zend
diff options
context:
space:
mode:
authorAndi Gutmans <andi@php.net>2001-05-02 19:51:33 +0000
committerAndi Gutmans <andi@php.net>2001-05-02 19:51:33 +0000
commit2d9eac7e0ecb2b5f2b39e10e8574f4ac88fa2c10 (patch)
treed572ee104da1118239cb7c22994e74aedc0ce421 /Zend
parent09bb75a4a51758bfdfdc8c4c1c129f44df8af689 (diff)
downloadphp-git-2d9eac7e0ecb2b5f2b39e10e8574f4ac88fa2c10.tar.gz
- Patch by Andrei to prevent crash in error situation when not all
object overloading handles are defined.
Diffstat (limited to 'Zend')
-rw-r--r--Zend/zend_execute.c14
1 files changed, 12 insertions, 2 deletions
diff --git a/Zend/zend_execute.c b/Zend/zend_execute.c
index 3cca945669..28025efdf9 100644
--- a/Zend/zend_execute.c
+++ b/Zend/zend_execute.c
@@ -839,7 +839,12 @@ static zval get_overloaded_property(temp_variable *T ELS_DC)
static void set_overloaded_property(temp_variable *T, zval *value ELS_DC)
{
- (T->EA.data.overloaded_element.object)->value.obj.ce->handle_property_set(&T->EA.data.overloaded_element, value);
+ if ((T->EA.data.overloaded_element.object)->value.obj.ce->handle_property_set) {
+ (T->EA.data.overloaded_element.object)->value.obj.ce->handle_property_set(&T->EA.data.overloaded_element, value);
+ } else {
+ zend_error(E_ERROR, "Class '%s' does not support setting overloaded properties",
+ (T->EA.data.overloaded_element.object)->value.obj.ce->name);
+ }
zend_llist_destroy(T->EA.data.overloaded_element.elements_list);
efree(T->EA.data.overloaded_element.elements_list);
}
@@ -847,7 +852,12 @@ static void set_overloaded_property(temp_variable *T, zval *value ELS_DC)
static void call_overloaded_function(temp_variable *T, int arg_count, zval *return_value ELS_DC)
{
- (T->EA.data.overloaded_element.object)->value.obj.ce->handle_function_call(arg_count, return_value, T->EA.data.overloaded_element.object, 1 ELS_CC, &T->EA.data.overloaded_element);
+ if ((T->EA.data.overloaded_element.object)->value.obj.ce->handle_function_call) {
+ (T->EA.data.overloaded_element.object)->value.obj.ce->handle_function_call(arg_count, return_value, T->EA.data.overloaded_element.object, 1 ELS_CC, &T->EA.data.overloaded_element);
+ } else {
+ zend_error(E_ERROR, "Class '%s' does not support overloaded method calls",
+ (T->EA.data.overloaded_element.object)->value.obj.ce->name);
+ }
zend_llist_destroy(T->EA.data.overloaded_element.elements_list);
efree(T->EA.data.overloaded_element.elements_list);
}