]> granicus.if.org Git - php/commitdiff
Fixed bug #62343 (Show class_alias In get_declared_classes())
authorDmitry Stogov <dmitry@zend.com>
Tue, 19 Mar 2013 10:56:53 +0000 (14:56 +0400)
committerDmitry Stogov <dmitry@zend.com>
Tue, 19 Mar 2013 10:56:53 +0000 (14:56 +0400)
NEWS
Zend/tests/bug62343.phpt [new file with mode: 0644]
Zend/zend_builtin_functions.c

diff --git a/NEWS b/NEWS
index adf868f0f4761b2ef4217ce424b1c30e2430c088..c8c6f754a0ed70fbe52f3ee67954b84e54b4d90e 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -5,6 +5,7 @@ PHP                                                                        NEWS
 - Core
   . Fixed bug #64370 (microtime(true) less than $_SERVER['REQUEST_TIME_FLOAT']).
     (Anatol)
+  . Fixed bug #62343 (Show class_alias In get_declared_classes()) (Dmitry)
 
 - PCRE:
   . Merged PCRE 8.32). (Anatol)
diff --git a/Zend/tests/bug62343.phpt b/Zend/tests/bug62343.phpt
new file mode 100644 (file)
index 0000000..b0208c4
--- /dev/null
@@ -0,0 +1,13 @@
+--TEST--
+Bug #62343 (Show class_alias In get_declared_classes())
+--FILE--
+<?php
+class a { }
+class_alias("a", "b");
+$c = get_declared_classes();
+var_dump(end($c));
+var_dump(prev($c));
+?>
+--EXPECT--
+string(1) "b"
+string(1) "a"
index 06f14624be4cc4a1878ae016210dfbb30ab04af4..c60cff522c24da2c706f60c99b0f9c25acdd946e 100644 (file)
@@ -1541,6 +1541,13 @@ ZEND_FUNCTION(restore_exception_handler)
 }
 /* }}} */
 
+static int same_name(const char *key, const char *name, zend_uint name_len)
+{
+       char *lcname = zend_str_tolower_dup(name, name_len);
+       int ret = memcmp(lcname, key, name_len) == 0;
+       efree(lcname);
+       return ret;
+}
 
 static int copy_class_or_interface_name(zend_class_entry **pce TSRMLS_DC, int num_args, va_list args, zend_hash_key *hash_key)
 {
@@ -1552,7 +1559,13 @@ static int copy_class_or_interface_name(zend_class_entry **pce TSRMLS_DC, int nu
 
        if ((hash_key->nKeyLength==0 || hash_key->arKey[0]!=0)
                && (comply_mask == (ce->ce_flags & mask))) {
-               add_next_index_stringl(array, ce->name, ce->name_length, 1);
+               if (ce->refcount > 1 && 
+                   (ce->name_length != hash_key->nKeyLength - 1 || 
+                    !same_name(hash_key->arKey, ce->name, ce->name_length))) {
+                       add_next_index_stringl(array, hash_key->arKey, hash_key->nKeyLength - 1, 1);
+               } else {
+                       add_next_index_stringl(array, ce->name, ce->name_length, 1);
+               }
        }
        return ZEND_HASH_APPLY_KEEP;
 }