summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStanislav Malyshev <stas@php.net>2003-06-16 09:59:02 +0000
committerStanislav Malyshev <stas@php.net>2003-06-16 09:59:02 +0000
commit4dcc1ef66c40b60cb652f4f7b0553ea7a9f73fa8 (patch)
tree3e1fcb25f76846df8f33f15191dcbb2023f12a9b
parentc44e4eddbea117a678b1643bc9b6f1c65d988382 (diff)
downloadphp-git-4dcc1ef66c40b60cb652f4f7b0553ea7a9f73fa8.tar.gz
fix lambda function static vars (related to #17115)
-rw-r--r--Zend/zend_builtin_functions.c7
1 files changed, 4 insertions, 3 deletions
diff --git a/Zend/zend_builtin_functions.c b/Zend/zend_builtin_functions.c
index 7807d6bd6e..0447917e7e 100644
--- a/Zend/zend_builtin_functions.c
+++ b/Zend/zend_builtin_functions.c
@@ -1174,20 +1174,21 @@ ZEND_FUNCTION(create_function)
efree(eval_name);
if (retval==SUCCESS) {
- zend_function *func;
+ zend_function new_function, *func;
if (zend_hash_find(EG(function_table), LAMBDA_TEMP_FUNCNAME, sizeof(LAMBDA_TEMP_FUNCNAME), (void **) &func)==FAILURE) {
zend_error(E_ERROR, "Unexpected inconsistency in create_function()");
RETURN_FALSE;
}
- function_add_ref(func);
+ new_function = *func;
+ function_add_ref(&new_function);
function_name = (char *) emalloc(sizeof("0lambda_")+MAX_LENGTH_OF_LONG);
do {
sprintf(function_name, "%clambda_%d", 0, ++EG(lambda_count));
function_name_length = strlen(function_name+1)+1;
- } while (zend_hash_add(EG(function_table), function_name, function_name_length+1, func, sizeof(zend_function), NULL)==FAILURE);
+ } while (zend_hash_add(EG(function_table), function_name, function_name_length+1, &new_function, sizeof(zend_function), NULL)==FAILURE);
zend_hash_del(EG(function_table), LAMBDA_TEMP_FUNCNAME, sizeof(LAMBDA_TEMP_FUNCNAME));
RETURN_STRINGL(function_name, function_name_length, 0);
} else {