diff options
author | Andrea Faulds <ajf@ajf.me> | 2015-11-27 15:06:13 +0000 |
---|---|---|
committer | Andrea Faulds <ajf@ajf.me> | 2015-11-27 15:06:13 +0000 |
commit | 8907da99b83204958cb2308ec12aa9e490372150 (patch) | |
tree | 833eab06d0f5615fd7daa4cc2d208d2abfa23c4b | |
parent | a347b0be48d892c105198b23868f37a0d4f92dee (diff) | |
download | php-git-8907da99b83204958cb2308ec12aa9e490372150.tar.gz |
Set called_scope in Closure::call (fixes bug #70987)
-rw-r--r-- | Zend/tests/bug70987.phpt | 15 | ||||
-rw-r--r-- | Zend/zend_closures.c | 1 |
2 files changed, 16 insertions, 0 deletions
diff --git a/Zend/tests/bug70987.phpt b/Zend/tests/bug70987.phpt new file mode 100644 index 0000000000..d31a1d2c6e --- /dev/null +++ b/Zend/tests/bug70987.phpt @@ -0,0 +1,15 @@ +--TEST-- +Bug #70987 (static::class within Closure::call() causes segfault) +--FILE-- +<?php + +class foo {} +$bar = function () { + return static::class; +}; + +var_dump($bar->call(new foo)); + +?> +--EXPECTF-- +string(3) "foo" diff --git a/Zend/zend_closures.c b/Zend/zend_closures.c index 76b10e43d3..beca1cef07 100644 --- a/Zend/zend_closures.c +++ b/Zend/zend_closures.c @@ -150,6 +150,7 @@ ZEND_METHOD(Closure, call) fci.param_count = my_param_count; fci.object = fci_cache.object = newobj; fci_cache.initialized = 1; + fci_cache.called_scope = Z_OBJCE_P(newthis); if (fci_cache.function_handler->common.fn_flags & ZEND_ACC_GENERATOR) { zval new_closure; |