diff options
| author | Dmitry Stogov <dmitry@zend.com> | 2014-04-21 15:18:19 +0400 |
|---|---|---|
| committer | Dmitry Stogov <dmitry@zend.com> | 2014-04-21 15:18:19 +0400 |
| commit | acd77dec81fa45a8bb4a3766b04443b2b6d73633 (patch) | |
| tree | b932a8c041fffbb5b45b27f0b23d9f0608b83fb6 | |
| parent | fd24614cd996058b46d1476e52fff9b7cc788544 (diff) | |
| download | php-git-acd77dec81fa45a8bb4a3766b04443b2b6d73633.tar.gz | |
Use alloca() for temporary allocation
| -rw-r--r-- | Zend/zend_API.c | 20 |
1 files changed, 13 insertions, 7 deletions
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 */ |
