From: Marcus Boerger Date: Thu, 21 Aug 2003 14:39:17 +0000 (+0000) Subject: Paramspec 'O' / zend_parse_method_params(): only if given check the class type X-Git-Tag: RELEASE_0_7~527 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=80b3498839e80563ded34416cf5110bcf65a8e32;p=php Paramspec 'O' / zend_parse_method_params(): only if given check the class type --- 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);