summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Zend/tests/bug70987.phpt15
-rw-r--r--Zend/zend_closures.c1
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;