diff options
-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; |