From e395b62c51524427b225323f827efdc46eb0b9b0 Mon Sep 17 00:00:00 2001 From: Nikita Popov Date: Tue, 5 Jul 2016 15:13:36 +0200 Subject: [PATCH] Closure::fromCallable(): Use fake closures --- .../closure_from_callable_rebinding.phpt | 20 +++++++++++++++++++ Zend/zend_closures.c | 4 ++-- 2 files changed, 22 insertions(+), 2 deletions(-) create mode 100644 Zend/tests/closures/closure_from_callable_rebinding.phpt diff --git a/Zend/tests/closures/closure_from_callable_rebinding.phpt b/Zend/tests/closures/closure_from_callable_rebinding.phpt new file mode 100644 index 0000000000..6fb5c6ffc1 --- /dev/null +++ b/Zend/tests/closures/closure_from_callable_rebinding.phpt @@ -0,0 +1,20 @@ +--TEST-- +Testing Closure::fromCallable() functionality: Rebinding +--FILE-- +call(new B); + +?> +--EXPECTF-- +Warning: Cannot bind method A::method() to object of class B in %s on line %d diff --git a/Zend/zend_closures.c b/Zend/zend_closures.c index 5c5e8a6cb5..6185c212a8 100644 --- a/Zend/zend_closures.c +++ b/Zend/zend_closures.c @@ -295,9 +295,9 @@ static int zend_create_closure_from_callable(zval *return_value, zval *callable, if (fcc.object) { ZVAL_OBJ(&instance, fcc.object); - zend_create_closure(return_value, mptr, mptr->common.scope, fcc.object->ce, &instance); + zend_create_fake_closure(return_value, mptr, mptr->common.scope, fcc.object->ce, &instance); } else { - zend_create_closure(return_value, mptr, mptr->common.scope, NULL, NULL); + zend_create_fake_closure(return_value, mptr, mptr->common.scope, NULL, NULL); } return SUCCESS; -- 2.50.1