diff options
author | Andi Gutmans <andi@php.net> | 2001-05-02 19:51:33 +0000 |
---|---|---|
committer | Andi Gutmans <andi@php.net> | 2001-05-02 19:51:33 +0000 |
commit | 2d9eac7e0ecb2b5f2b39e10e8574f4ac88fa2c10 (patch) | |
tree | d572ee104da1118239cb7c22994e74aedc0ce421 /Zend | |
parent | 09bb75a4a51758bfdfdc8c4c1c129f44df8af689 (diff) | |
download | php-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.c | 14 |
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); } |