diff options
| author | Andi Gutmans <andi@php.net> | 2001-03-12 16:27:26 +0000 |
|---|---|---|
| committer | Andi Gutmans <andi@php.net> | 2001-03-12 16:27:26 +0000 |
| commit | 7db391b054b618263552c5b46bd14337cb6b292e (patch) | |
| tree | dcdb911668fa9bae76cbf79a962d784b6a6f14fb /Zend/zend_API.c | |
| parent | 123491aeac24fa1d221bed72ce12d126c87a9053 (diff) | |
| download | php-git-7db391b054b618263552c5b46bd14337cb6b292e.tar.gz | |
- Missed second place.
Diffstat (limited to 'Zend/zend_API.c')
| -rw-r--r-- | Zend/zend_API.c | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/Zend/zend_API.c b/Zend/zend_API.c index e7aa3ab946..9d028e42ac 100644 --- a/Zend/zend_API.c +++ b/Zend/zend_API.c @@ -935,7 +935,6 @@ zend_bool zend_is_callable(zval *callable, zend_bool syntax_only, char **callabl zval **method; zval **obj; zend_class_entry *ce; - char name_buf[1024]; char callable_name_len; if (zend_hash_index_find(Z_ARRVAL_P(callable), 0, (void **) &obj) == SUCCESS && @@ -967,15 +966,24 @@ zend_bool zend_is_callable(zval *callable, zend_bool syntax_only, char **callabl } break; } - } else + } else { ce = Z_OBJCE_PP(obj); + } lcname = estrndup(Z_STRVAL_PP(method), Z_STRLEN_PP(method)); zend_str_tolower(lcname, Z_STRLEN_PP(method)); if (zend_hash_exists(&ce->function_table, lcname, Z_STRLEN_PP(method)+1)) retval = 1; if (!retval && callable_name) { - callable_name_len = snprintf(name_buf, 1024, "%s::%s", ce->name, Z_STRVAL_PP(method)); - *callable_name = estrndup(name_buf, callable_name_len); + char *ptr; + int ce_name_len = strlen(ce->name); + + callable_name_len = ce_name_len + Z_STRLEN_PP(method) + sizeof("::"); + ptr = *callable_name = emalloc(callable_name_len); + memcpy(ptr, ce->name, ce_name_len); + ptr += ce_name_len; + memcpy(ptr, "::", sizeof("::") - 1); + ptr += sizeof("::") - 1; + memcpy(ptr, Z_STRVAL_PP(method), Z_STRLEN_PP(method) + 1); } efree(lcname); } else if (callable_name) |
