From: Dmitry Stogov Date: Sat, 26 Jul 2008 18:32:39 +0000 (+0000) Subject: Added checks for destroied objects X-Git-Tag: BEFORE_HEAD_NS_CHANGE~1029 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=d379f1fd06ef5c8481d433da4e8cc69d08531323;p=php Added checks for destroied objects --- diff --git a/Zend/zend_API.c b/Zend/zend_API.c index 9137f3be7b..d606e6d6a8 100644 --- a/Zend/zend_API.c +++ b/Zend/zend_API.c @@ -2996,6 +2996,15 @@ ZEND_API zend_bool zend_is_callable_ex(zval *callable, zval **object_pp, uint ch fcc->calling_scope = NULL; fcc->object_pp = NULL; + if (object_pp && (!*object_pp || Z_TYPE_PP(object_pp) != IS_OBJECT)) { + object_pp = NULL; + } + if (object_pp && Z_TYPE_PP(object_pp) == IS_OBJECT && + (!EG(objects_store).object_buckets || + !EG(objects_store).object_buckets[Z_OBJ_HANDLE_PP(object_pp)].valid)) { + return 0; + } + switch (Z_TYPE_P(callable)) { case IS_STRING: case IS_UNICODE: @@ -3144,6 +3153,11 @@ ZEND_API zend_bool zend_is_callable_ex(zval *callable, zval **object_pp, uint ch return 0; } } else { + if (!EG(objects_store).object_buckets || + !EG(objects_store).object_buckets[Z_OBJ_HANDLE_PP(obj)].valid) { + return 0; + } + fcc->calling_scope = Z_OBJCE_PP(obj); /* TBFixed: what if it's overloaded? */ fcc->object_pp = obj;