summaryrefslogtreecommitdiff
path: root/Zend/zend_API.c
diff options
context:
space:
mode:
authorDmitry Stogov <dmitry@php.net>2008-07-26 18:32:20 +0000
committerDmitry Stogov <dmitry@php.net>2008-07-26 18:32:20 +0000
commit8ee5b58bbe3dd586ec3f9dd12d7f4d8c200ed4e7 (patch)
tree06ef2c9b4830a3d790e2743f73deff26495776f9 /Zend/zend_API.c
parentf5f8cba8e978a7408b337e9c5e622086a1c697ac (diff)
downloadphp-git-8ee5b58bbe3dd586ec3f9dd12d7f4d8c200ed4e7.tar.gz
Added checks for destroied objects
Diffstat (limited to 'Zend/zend_API.c')
-rw-r--r--Zend/zend_API.c14
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;