]> granicus.if.org Git - php/commitdiff
Fixed bug #29268 (__autoload() not called with Reflection->getClass())
authorDmitry Stogov <dmitry@php.net>
Fri, 21 Oct 2005 08:03:28 +0000 (08:03 +0000)
committerDmitry Stogov <dmitry@php.net>
Fri, 21 Oct 2005 08:03:28 +0000 (08:03 +0000)
NEWS
Zend/zend_reflection_api.c
ext/reflection/php_reflection.c
ext/reflection/tests/bug29268.phpt [new file with mode: 0755]

diff --git a/NEWS b/NEWS
index 32de2e4ef4448920310e1d771b3f8fb6ddc9d949..8cfb9af5366d5812b6914c5f898f4ee5267742ca 100644 (file)
--- 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)
index 05df2d6fd684a3079644b0b288639f264fe3f111..cd56a3213da906b71ed83b1167d00ef6ab1a4ece 100644 (file)
@@ -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);
        }
 }
index 05df2d6fd684a3079644b0b288639f264fe3f111..cd56a3213da906b71ed83b1167d00ef6ab1a4ece 100644 (file)
@@ -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 (executable)
index 0000000..d1f74f2
--- /dev/null
@@ -0,0 +1,26 @@
+--TEST--
+Bug #29268 (__autoload() not called with reflectionProperty->getClass())
+--FILE--
+<?php
+function __autoload($classname) {
+       echo "__autoload($classname)\n";
+       eval("class $classname {}");
+}
+
+class B{
+       public function doit(A $a){
+       }
+}
+
+$ref = new reflectionMethod('B','doit');
+$parameters = $ref->getParameters();   
+foreach($parameters as $parameter){
+       $class = $parameter->getClass();        
+       echo $class->name."\n";
+}
+echo "ok\n";
+?>
+--EXPECT--
+__autoload(A)
+A
+ok