From c3f34796a053f5ff1016d872f8c339e32468783f Mon Sep 17 00:00:00 2001
From: Felipe Pena <felipensp@gmail.com>
Date: Sat, 23 Jun 2012 15:10:47 -0300
Subject: [PATCH] - Improved fix for #62384

---
 ext/reflection/php_reflection.c | 8 +++-----
 1 file changed, 3 insertions(+), 5 deletions(-)

diff --git a/ext/reflection/php_reflection.c b/ext/reflection/php_reflection.c
index 966c9a5448..180ce8f91a 100644
--- a/ext/reflection/php_reflection.c
+++ b/ext/reflection/php_reflection.c
@@ -2749,12 +2749,10 @@ ZEND_METHOD(reflection_method, invokeArgs)
 	fcc.object_ptr = object;
 	
 	/* 
-	 * Closure::__invoke() actually expects a copy of zend_function, so that it
-	 * frees it after the invoking.
+	 * Copy the zend_function when calling via handler (e.g. Closure::__invoke())
 	 */
-	if (obj_ce == zend_ce_closure && object &&
-		strlen(mptr->common.function_name) == sizeof(ZEND_INVOKE_FUNC_NAME)-1 &&
-		memcmp(mptr->common.function_name, ZEND_INVOKE_FUNC_NAME, sizeof(ZEND_INVOKE_FUNC_NAME)-1) == 0) {
+	if (mptr->type == ZEND_INTERNAL_FUNCTION &&
+		(mptr->internal_function.fn_flags & ZEND_ACC_CALL_VIA_HANDLER) != 0) {
 		fcc.function_handler = _copy_function(mptr TSRMLS_CC);
 	}
 
-- 
2.40.0