From: Andi Gutmans Date: Mon, 1 Mar 2004 15:19:38 +0000 (+0000) Subject: - Fix crash in reflection API (pierre) X-Git-Tag: RELEASE_0_2_0~97 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=0f1382e1266ddac4727971f1121d0b8f6da7df98;p=php - Fix crash in reflection API (pierre) --- diff --git a/Zend/zend_reflection_api.c b/Zend/zend_reflection_api.c index c71044df04..4b5c9b4167 100644 --- a/Zend/zend_reflection_api.c +++ b/Zend/zend_reflection_api.c @@ -1612,15 +1612,19 @@ ZEND_METHOD(reflection_method, invoke) object_pp = NULL; obj_ce = NULL; } else { - obj_ce = Z_OBJCE_PP(params[0]); - if ((Z_TYPE_PP(params[0]) != IS_OBJECT) - || (!instanceof_function(obj_ce, mptr->common.scope TSRMLS_CC))) { + if ((Z_TYPE_PP(params[0]) != IS_OBJECT)) { efree(params); + _DO_THROW("Non-object passed to Invoke()"); + /* Returns from this function */ + } + obj_ce = Z_OBJCE_PP(params[0]); + + if (!instanceof_function(obj_ce, mptr->common.scope TSRMLS_CC)) { _DO_THROW("Given object is not an instance of the class this method was declared in"); /* Returns from this function */ } - + object_pp = params[0]; } diff --git a/ext/reflection/php_reflection.c b/ext/reflection/php_reflection.c index c71044df04..4b5c9b4167 100644 --- a/ext/reflection/php_reflection.c +++ b/ext/reflection/php_reflection.c @@ -1612,15 +1612,19 @@ ZEND_METHOD(reflection_method, invoke) object_pp = NULL; obj_ce = NULL; } else { - obj_ce = Z_OBJCE_PP(params[0]); - if ((Z_TYPE_PP(params[0]) != IS_OBJECT) - || (!instanceof_function(obj_ce, mptr->common.scope TSRMLS_CC))) { + if ((Z_TYPE_PP(params[0]) != IS_OBJECT)) { efree(params); + _DO_THROW("Non-object passed to Invoke()"); + /* Returns from this function */ + } + obj_ce = Z_OBJCE_PP(params[0]); + + if (!instanceof_function(obj_ce, mptr->common.scope TSRMLS_CC)) { _DO_THROW("Given object is not an instance of the class this method was declared in"); /* Returns from this function */ } - + object_pp = params[0]; }