diff options
| author | Dmitry Stogov <dmitry@php.net> | 2008-07-26 18:32:20 +0000 |
|---|---|---|
| committer | Dmitry Stogov <dmitry@php.net> | 2008-07-26 18:32:20 +0000 |
| commit | 8ee5b58bbe3dd586ec3f9dd12d7f4d8c200ed4e7 (patch) | |
| tree | 06ef2c9b4830a3d790e2743f73deff26495776f9 /Zend/zend_API.c | |
| parent | f5f8cba8e978a7408b337e9c5e622086a1c697ac (diff) | |
| download | php-git-8ee5b58bbe3dd586ec3f9dd12d7f4d8c200ed4e7.tar.gz | |
Added checks for destroied objects
Diffstat (limited to 'Zend/zend_API.c')
| -rw-r--r-- | Zend/zend_API.c | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/Zend/zend_API.c b/Zend/zend_API.c index 2ec10b8239..2afb16576c 100644 --- a/Zend/zend_API.c +++ b/Zend/zend_API.c @@ -2573,6 +2573,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 && + (!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: if (object_pp && *object_pp) { @@ -2648,6 +2657,11 @@ ZEND_API zend_bool zend_is_callable_ex(zval *callable, zval **object_pp, uint ch } } 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; |
