summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStanislav Malyshev <stas@php.net>2015-01-31 23:17:24 -0800
committerStanislav Malyshev <stas@php.net>2015-01-31 23:17:24 -0800
commitb64cafdb9e9dccdc43845601f49774523379371f (patch)
treed4053ba4405eef1f17efc71a86977ea73f5142e3
parent6a960b6d1b2b3cdbce7d6faf9e58087297a45887 (diff)
parentdbc0a80b23e222801aa3f26ca56dfb52290c986d (diff)
downloadphp-git-b64cafdb9e9dccdc43845601f49774523379371f.tar.gz
Merge branch 'PHP-5.5' into PHP-5.6
* PHP-5.5: Added test and possible fix for https://bugs.php.net/bug.php?id=67068
-rw-r--r--Zend/zend_closures.c1
-rw-r--r--ext/reflection/tests/bug67068.phpt18
2 files changed, 19 insertions, 0 deletions
diff --git a/Zend/zend_closures.c b/Zend/zend_closures.c
index 1993ed95c7..53465af026 100644
--- a/Zend/zend_closures.c
+++ b/Zend/zend_closures.c
@@ -443,6 +443,7 @@ ZEND_API void zend_create_closure(zval *res, zend_function *func, zend_class_ent
closure->func = *func;
closure->func.common.prototype = NULL;
+ closure->func.common.fn_flags |= ZEND_ACC_CLOSURE;
if ((scope == NULL) && (this_ptr != NULL)) {
/* use dummy scope if we're binding an object without specifying a scope */
diff --git a/ext/reflection/tests/bug67068.phpt b/ext/reflection/tests/bug67068.phpt
new file mode 100644
index 0000000000..35c1b1674f
--- /dev/null
+++ b/ext/reflection/tests/bug67068.phpt
@@ -0,0 +1,18 @@
+--TEST--
+Bug #67068 (ReflectionFunction::getClosure returns something that doesn't report as a closure)
+--FILE--
+<?php
+class MyClass {
+ public function method() {}
+}
+
+$object = new MyClass;
+$reflector = new \ReflectionMethod($object, 'method');
+$closure = $reflector->getClosure($object);
+
+$closureReflector = new \ReflectionFunction($closure);
+
+var_dump($closureReflector->isClosure());
+?>
+--EXPECT--
+bool(true) \ No newline at end of file