diff options
| author | Dmitry Stogov <dmitry@zend.com> | 2013-03-19 14:59:08 +0400 |
|---|---|---|
| committer | Dmitry Stogov <dmitry@zend.com> | 2013-03-19 14:59:08 +0400 |
| commit | 84630a1109084507bc0c78301db831328229f1cb (patch) | |
| tree | 28de3655b59369bf10cb378a703a5b63e26117fc /Zend/zend_builtin_functions.c | |
| parent | e62bb0325763d9847847dd198e05c9b3147caf05 (diff) | |
| parent | 4a6291508d69fab951562b996ed7223c052a0168 (diff) | |
| download | php-git-84630a1109084507bc0c78301db831328229f1cb.tar.gz | |
Merge branch 'PHP-5.3' into PHP-5.4
* PHP-5.3:
Fixed bug #62343 (Show class_alias In get_declared_classes())
Diffstat (limited to 'Zend/zend_builtin_functions.c')
| -rw-r--r-- | Zend/zend_builtin_functions.c | 15 |
1 files changed, 14 insertions, 1 deletions
diff --git a/Zend/zend_builtin_functions.c b/Zend/zend_builtin_functions.c index fcd1deac67..1e85785c40 100644 --- a/Zend/zend_builtin_functions.c +++ b/Zend/zend_builtin_functions.c @@ -1640,6 +1640,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) { @@ -1651,7 +1658,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; } |
