summaryrefslogtreecommitdiff
path: root/ext
diff options
context:
space:
mode:
Diffstat (limited to 'ext')
-rwxr-xr-xext/spl/spl_foreach.c8
1 files changed, 5 insertions, 3 deletions
diff --git a/ext/spl/spl_foreach.c b/ext/spl/spl_foreach.c
index 6476a82461..ca3920a1b0 100755
--- a/ext/spl/spl_foreach.c
+++ b/ext/spl/spl_foreach.c
@@ -54,14 +54,16 @@ ZEND_EXECUTE_HOOK_FUNCTION(ZEND_FE_RESET)
zval **obj, *retval;
spl_foreach_proxy proxy;
zend_class_entry *instance_ce;
- spl_is_a is_a = 0;
+ spl_is_a is_a;
obj = spl_get_zval_ptr_ptr(&EX(opline)->op1, EX(Ts) TSRMLS_CC);
- if (obj && (instance_ce = spl_get_class_entry(*obj TSRMLS_CC)) != NULL) {
- is_a = spl_implements(instance_ce);
+ if (!obj || (instance_ce = spl_get_class_entry(*obj TSRMLS_CC)) == NULL) {
+ ZEND_EXECUTE_HOOK_ORIGINAL(ZEND_FE_RESET);
}
+ is_a = spl_implements(instance_ce);
+
if (is_a & SPL_IS_A_ITERATOR) {
spl_unlock_zval_ptr_ptr(&EX(opline)->op1, EX(Ts) TSRMLS_CC);
spl_begin_method_call_ex(obj, NULL, NULL, "new_iterator", sizeof("new_iterator")-1, &retval TSRMLS_CC);