From: Dmitry Stogov Date: Fri, 21 Oct 2005 08:03:28 +0000 (+0000) Subject: Fixed bug #29268 (__autoload() not called with Reflection->getClass()) X-Git-Tag: php-5.1.0RC4~55 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=863bf8a5745489e24c961591d9cb531bd6acba72;p=php Fixed bug #29268 (__autoload() not called with Reflection->getClass()) --- diff --git a/NEWS b/NEWS index 32de2e4ef4..8cfb9af536 100644 --- a/NEWS +++ b/NEWS @@ -15,6 +15,8 @@ PHP NEWS - Fixed bug #31177 (menory leaks and corruption because of incorrect refcounting). (Dmitry) - Fixed bug #29983 (PHP does not explicitly set mime type & charset). (Ilia) +- Fixed bug #29268 (__autoload() not called with Reflection->getClass()). + (Dmitry) 17 Oct 2005, PHP 5.1 Release Candidate 3 - Fixed bug #34873 (Segmentation Fault on foreach in object). (Dmitry) diff --git a/Zend/zend_reflection_api.c b/Zend/zend_reflection_api.c index 05df2d6fd6..cd56a3213d 100644 --- a/Zend/zend_reflection_api.c +++ b/Zend/zend_reflection_api.c @@ -1740,15 +1740,12 @@ ZEND_METHOD(reflection_parameter, getClass) RETURN_NULL(); } else { zend_class_entry **pce; - 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); + + if (zend_lookup_class_ex(param->arg_info->class_name, param->arg_info->class_name_len, 1, &pce TSRMLS_CC) == FAILURE) { zend_throw_exception_ex(reflection_exception_ptr, 0 TSRMLS_CC, "Class %s does not exist", param->arg_info->class_name); return; } - free_alloca(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 05df2d6fd6..cd56a3213d 100644 --- a/ext/reflection/php_reflection.c +++ b/ext/reflection/php_reflection.c @@ -1740,15 +1740,12 @@ ZEND_METHOD(reflection_parameter, getClass) RETURN_NULL(); } else { zend_class_entry **pce; - 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); + + if (zend_lookup_class_ex(param->arg_info->class_name, param->arg_info->class_name_len, 1, &pce TSRMLS_CC) == FAILURE) { zend_throw_exception_ex(reflection_exception_ptr, 0 TSRMLS_CC, "Class %s does not exist", param->arg_info->class_name); return; } - free_alloca(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