From b58d3719277139258f6c6b171783ee6975ce57d6 Mon Sep 17 00:00:00 2001 From: Marcus Boerger Date: Mon, 22 Dec 2003 20:03:01 +0000 Subject: [PATCH] Fixed bug #26695 (Reflection API does not recognize mixed-case class hints) # The exception part --- Zend/zend_reflection_api.c | 7 +++++-- ext/reflection/php_reflection.c | 7 +++++-- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/Zend/zend_reflection_api.c b/Zend/zend_reflection_api.c index f2559609ed..a62b49bd00 100644 --- a/Zend/zend_reflection_api.c +++ b/Zend/zend_reflection_api.c @@ -1416,12 +1416,15 @@ ZEND_METHOD(reflection_parameter, getClass) RETURN_NULL(); } else { zend_class_entry **pce; - - if (zend_hash_find(EG(class_table), param->arg_info->class_name, param->arg_info->class_name_len + 1, (void **) &pce) == FAILURE) { + char *lcname = do_alloca(param->arg_info->class_name_len + 1); + zend_str_tolower_copy(lcname, param->arg_info->class_name, param->arg_info->class_name_len); + if (zend_hash_find(EG(class_table), lcname, param->arg_info->class_name_len + 1, (void **) &pce) == FAILURE) { + free_alloca(lcname); zend_throw_exception_ex(reflection_exception_ptr, 0 TSRMLS_CC, "Class %s does not exist", param->arg_info->class_name); return; } + free_alloca(lcname); reflection_class_factory(*pce, return_value TSRMLS_CC); } } diff --git a/ext/reflection/php_reflection.c b/ext/reflection/php_reflection.c index f2559609ed..a62b49bd00 100644 --- a/ext/reflection/php_reflection.c +++ b/ext/reflection/php_reflection.c @@ -1416,12 +1416,15 @@ ZEND_METHOD(reflection_parameter, getClass) RETURN_NULL(); } else { zend_class_entry **pce; - - if (zend_hash_find(EG(class_table), param->arg_info->class_name, param->arg_info->class_name_len + 1, (void **) &pce) == FAILURE) { + char *lcname = do_alloca(param->arg_info->class_name_len + 1); + zend_str_tolower_copy(lcname, param->arg_info->class_name, param->arg_info->class_name_len); + if (zend_hash_find(EG(class_table), lcname, param->arg_info->class_name_len + 1, (void **) &pce) == FAILURE) { + free_alloca(lcname); zend_throw_exception_ex(reflection_exception_ptr, 0 TSRMLS_CC, "Class %s does not exist", param->arg_info->class_name); return; } + free_alloca(lcname); reflection_class_factory(*pce, return_value TSRMLS_CC); } } -- 2.40.0