diff options
author | Dmitry Stogov <dmitry@php.net> | 2007-11-22 13:27:13 +0000 |
---|---|---|
committer | Dmitry Stogov <dmitry@php.net> | 2007-11-22 13:27:13 +0000 |
commit | 648fbe9d5838073154f3737829d5298502184343 (patch) | |
tree | bd21fcbb0af89d62032a842dc4e6f29518fa3cdf /ext/reflection/php_reflection.c | |
parent | 1836daf7f9f3ab088a65fd8c0b8c9421d6550be5 (diff) | |
download | php-git-648fbe9d5838073154f3737829d5298502184343.tar.gz |
Fixed bug #43128 (Very long class name causes segfault)
Diffstat (limited to 'ext/reflection/php_reflection.c')
-rw-r--r-- | ext/reflection/php_reflection.c | 14 |
1 files changed, 8 insertions, 6 deletions
diff --git a/ext/reflection/php_reflection.c b/ext/reflection/php_reflection.c index 9a7de3e37d..06cad88f9a 100644 --- a/ext/reflection/php_reflection.c +++ b/ext/reflection/php_reflection.c @@ -1047,14 +1047,15 @@ static void reflection_extension_factory(zval *object, const char *name_str TSRM int name_len = strlen(name_str); char *lcname; struct _zend_module_entry *module; + ALLOCA_FLAG(use_heap) - lcname = do_alloca(name_len + 1); + lcname = do_alloca(name_len + 1, use_heap); zend_str_tolower_copy(lcname, name_str, name_len); if (zend_hash_find(&module_registry, lcname, name_len + 1, (void **)&module) == FAILURE) { - free_alloca(lcname); + free_alloca(lcname, use_heap); return; } - free_alloca(lcname); + free_alloca(lcname, use_heap); reflection_instantiate(reflection_extension_ptr, object TSRMLS_CC); intern = (reflection_object *) zend_object_store_get_object(object TSRMLS_CC); @@ -4127,6 +4128,7 @@ ZEND_METHOD(reflection_extension, __construct) zend_module_entry *module; char *name_str; int name_len; + ALLOCA_FLAG(use_heap) if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &name_str, &name_len) == FAILURE) { return; @@ -4137,15 +4139,15 @@ ZEND_METHOD(reflection_extension, __construct) if (intern == NULL) { return; } - lcname = do_alloca(name_len + 1); + lcname = do_alloca(name_len + 1, use_heap); zend_str_tolower_copy(lcname, name_str, name_len); if (zend_hash_find(&module_registry, lcname, name_len + 1, (void **)&module) == FAILURE) { - free_alloca(lcname); + free_alloca(lcname, use_heap); zend_throw_exception_ex(reflection_exception_ptr, 0 TSRMLS_CC, "Extension %s does not exist", name_str); return; } - free_alloca(lcname); + free_alloca(lcname, use_heap); MAKE_STD_ZVAL(name); ZVAL_STRING(name, module->name, 1); zend_hash_update(Z_OBJPROP_P(object), "name", sizeof("name"), (void **) &name, sizeof(zval *), NULL); |