From: Dmitry Stogov Date: Mon, 21 Apr 2014 11:18:19 +0000 (+0400) Subject: Use alloca() for temporary allocation X-Git-Tag: POST_PHPNG_MERGE~412^2~81^2~12 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=acd77dec81fa45a8bb4a3766b04443b2b6d73633;p=php Use alloca() for temporary allocation --- diff --git a/Zend/zend_API.c b/Zend/zend_API.c index 7d79d99bee..7d394bfe13 100644 --- a/Zend/zend_API.c +++ b/Zend/zend_API.c @@ -2836,6 +2836,7 @@ static int zend_is_callable_check_func(int check_flags, zval *callable, zend_fca zend_class_entry *last_scope; HashTable *ftable; int call_via_handler = 0; + ALLOCA_FLAG(use_heap) if (error) { *error = NULL; @@ -2845,22 +2846,27 @@ static int zend_is_callable_check_func(int check_flags, zval *callable, zend_fca fcc->function_handler = NULL; if (!ce_org) { + char *lmname; + int lmname_len; + /* Skip leading \ */ if (Z_STRVAL_P(callable)[0] == '\\') { - lmname = STR_ALLOC(Z_STRLEN_P(callable) - 1, 0); - zend_str_tolower_copy(lmname->val, Z_STRVAL_P(callable) + 1, Z_STRLEN_P(callable) - 1); + lmname = do_alloca(Z_STRLEN_P(callable) - 1, use_heap); + lmname_len = Z_STRLEN_P(callable) - 1; + zend_str_tolower_copy(lmname, Z_STRVAL_P(callable) + 1, lmname_len); } else { - lmname = STR_ALLOC(Z_STRLEN_P(callable), 0); - zend_str_tolower_copy(lmname->val, Z_STRVAL_P(callable), Z_STRLEN_P(callable)); + lmname = do_alloca(Z_STRLEN_P(callable), use_heap); + lmname_len = Z_STRLEN_P(callable); + zend_str_tolower_copy(lmname, Z_STRVAL_P(callable), lmname_len); } /* Check if function with given name exists. * This may be a compound name that includes namespace name */ - fcc->function_handler = zend_hash_find_ptr(EG(function_table), lmname); + fcc->function_handler = zend_hash_str_find_ptr(EG(function_table), lmname, lmname_len); if (fcc->function_handler != NULL) { - STR_FREE(lmname); + free_alloca(lmname, use_heap); return 1; } - STR_FREE(lmname); + free_alloca(lmname, use_heap); } /* Split name into class/namespace and method/function names */