From 6ef4239827aec605ba5f65c42cea45a3517b7e44 Mon Sep 17 00:00:00 2001 From: Dmitry Stogov Date: Fri, 21 Oct 2005 08:03:39 +0000 Subject: [PATCH] Fixed bug #29268 (__autoload() not called with Reflection->getClass()) --- Zend/zend_reflection_api.c | 6 +----- ext/reflection/php_reflection.c | 6 +----- ext/reflection/tests/bug29268.phpt | 26 ++++++++++++++++++++++++++ 3 files changed, 28 insertions(+), 10 deletions(-) create mode 100755 ext/reflection/tests/bug29268.phpt diff --git a/Zend/zend_reflection_api.c b/Zend/zend_reflection_api.c index f7c816b3ee..588e44669c 100644 --- a/Zend/zend_reflection_api.c +++ b/Zend/zend_reflection_api.c @@ -1857,16 +1857,12 @@ ZEND_METHOD(reflection_parameter, getClass) RETURN_NULL(); } else { zend_class_entry **pce; - unsigned int lcname_len; - char *lcname = zend_u_str_case_fold(UG(unicode)?IS_UNICODE:IS_STRING, param->arg_info->class_name, param->arg_info->class_name_len, 0, &lcname_len); - if (zend_u_hash_find(EG(class_table), UG(unicode)?IS_UNICODE:IS_STRING, lcname, lcname_len + 1, (void **) &pce) == FAILURE) { - efree(lcname); + if (zend_u_lookup_class_ex(UG(unicode)?IS_UNICODE:IS_STRING, param->arg_info->class_name, param->arg_info->class_name_len, 1, &pce TSRMLS_CC) == FAILURE) { zend_throw_exception_ex(U_CLASS_ENTRY(reflection_exception_ptr), 0 TSRMLS_CC, "Class %v does not exist", param->arg_info->class_name); return; } - efree(lcname); zend_reflection_class_factory(*pce, return_value TSRMLS_CC); } } diff --git a/ext/reflection/php_reflection.c b/ext/reflection/php_reflection.c index f7c816b3ee..588e44669c 100644 --- a/ext/reflection/php_reflection.c +++ b/ext/reflection/php_reflection.c @@ -1857,16 +1857,12 @@ ZEND_METHOD(reflection_parameter, getClass) RETURN_NULL(); } else { zend_class_entry **pce; - unsigned int lcname_len; - char *lcname = zend_u_str_case_fold(UG(unicode)?IS_UNICODE:IS_STRING, param->arg_info->class_name, param->arg_info->class_name_len, 0, &lcname_len); - if (zend_u_hash_find(EG(class_table), UG(unicode)?IS_UNICODE:IS_STRING, lcname, lcname_len + 1, (void **) &pce) == FAILURE) { - efree(lcname); + if (zend_u_lookup_class_ex(UG(unicode)?IS_UNICODE:IS_STRING, param->arg_info->class_name, param->arg_info->class_name_len, 1, &pce TSRMLS_CC) == FAILURE) { zend_throw_exception_ex(U_CLASS_ENTRY(reflection_exception_ptr), 0 TSRMLS_CC, "Class %v does not exist", param->arg_info->class_name); return; } - efree(lcname); zend_reflection_class_factory(*pce, return_value TSRMLS_CC); } } diff --git a/ext/reflection/tests/bug29268.phpt b/ext/reflection/tests/bug29268.phpt new file mode 100755 index 0000000000..d1f74f2e2b --- /dev/null +++ b/ext/reflection/tests/bug29268.phpt @@ -0,0 +1,26 @@ +--TEST-- +Bug #29268 (__autoload() not called with reflectionProperty->getClass()) +--FILE-- +getParameters(); +foreach($parameters as $parameter){ + $class = $parameter->getClass(); + echo $class->name."\n"; +} +echo "ok\n"; +?> +--EXPECT-- +__autoload(A) +A +ok -- 2.40.0