summaryrefslogtreecommitdiff
path: root/Zend/zend_API.c
diff options
context:
space:
mode:
authorMarcus Boerger <helly@php.net>2003-08-21 14:39:17 +0000
committerMarcus Boerger <helly@php.net>2003-08-21 14:39:17 +0000
commit80b3498839e80563ded34416cf5110bcf65a8e32 (patch)
tree2861231bcddda52bb9131532ed59b940e6a0eb13 /Zend/zend_API.c
parent304f37fb806f723fab6cf533758888cc8252afd9 (diff)
downloadphp-git-80b3498839e80563ded34416cf5110bcf65a8e32.tar.gz
Paramspec 'O' / zend_parse_method_params(): only if given check the class type
Diffstat (limited to 'Zend/zend_API.c')
-rw-r--r--Zend/zend_API.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/Zend/zend_API.c b/Zend/zend_API.c
index 7c7e0fe31d..482bfc237f 100644
--- a/Zend/zend_API.c
+++ b/Zend/zend_API.c
@@ -395,7 +395,7 @@ static char *zend_parse_arg_impl(zval **arg, va_list *va, char **spec TSRMLS_DC)
zend_class_entry *ce = va_arg(*va, zend_class_entry *);
if (Z_TYPE_PP(arg) == IS_OBJECT &&
- instanceof_function(Z_OBJCE_PP(arg), ce TSRMLS_CC)) {
+ (!ce || instanceof_function(Z_OBJCE_PP(arg), ce TSRMLS_CC))) {
*p = *arg;
} else {
if (Z_TYPE_PP(arg) == IS_NULL && return_null) {
@@ -584,6 +584,10 @@ ZEND_API int zend_parse_method_parameters(int num_args TSRMLS_DC, zval *this_ptr
object = va_arg(va, zval **);
ce = va_arg(va, zend_class_entry *);
*object = this_ptr;
+ if (ce && !instanceof_function(Z_OBJCE_P(this_ptr), ce TSRMLS_CC)) {
+ zend_error(E_CORE_ERROR, "%s::%s() must be derived from %s::%s",
+ ce->name, get_active_function_name(TSRMLS_C), Z_OBJCE_P(this_ptr)->name, get_active_function_name(TSRMLS_C));
+ }
retval = zend_parse_va_args(num_args, p, &va, 0 TSRMLS_CC);
va_end(va);