diff options
Diffstat (limited to 'Zend/zend_execute.c')
-rw-r--r-- | Zend/zend_execute.c | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/Zend/zend_execute.c b/Zend/zend_execute.c index 6d0111f936..df8914cb20 100644 --- a/Zend/zend_execute.c +++ b/Zend/zend_execute.c @@ -2454,7 +2454,7 @@ int zend_init_fcall_by_name_handler(ZEND_OPCODE_HANDLER_ARGS) zval *function_name; zend_function *function; zend_bool is_const; - char *function_name_strval; + char *function_name_strval, *lcname; int function_name_strlen; zend_ptr_stack_n_push(&EG(arg_types_stack), 3, EX(fbc), EX(object), EX(calling_scope)); @@ -2470,16 +2470,18 @@ int zend_init_fcall_by_name_handler(ZEND_OPCODE_HANDLER_ARGS) if (Z_TYPE_P(function_name) != IS_STRING) { zend_error(E_ERROR, "Function name must be a string"); } - function_name_strval = zend_str_tolower_dup(function_name->value.str.val, function_name->value.str.len); + function_name_strval = function_name->value.str.val; function_name_strlen = function_name->value.str.len; } - if (zend_hash_find(EG(function_table), function_name_strval, function_name_strlen+1, (void **) &function)==FAILURE) { + lcname = zend_str_tolower_dup(function_name_strval, function_name_strlen); + if (zend_hash_find(EG(function_table), lcname, function_name_strlen+1, (void **) &function)==FAILURE) { + efree(lcname); zend_error(E_ERROR, "Call to undefined function %s()", function_name_strval); } + efree(lcname); if (!is_const) { - efree(function_name_strval); FREE_OP(EX(Ts), &EX(opline)->op2, EG(free_op2)); } |