Patch fix-class_alias for Class/Object related Bug #61759
Patch version 2013-08-27 09:46 UTC
Return to Bug #61759 |
Download this patch
Patch Revisions:
Developer: jpauli@php.net
diff --git a/Zend/zend_API.c b/Zend/zend_API.c
index 23ad158..1f772bb 100644
--- a/Zend/zend_API.c
+++ b/Zend/zend_API.c
@@ -2577,7 +2577,12 @@ ZEND_API int zend_register_class_alias_ex(const char *name, int name_len, zend_c
char *lcname = zend_str_tolower_dup(name, name_len);
int ret;
- ret = zend_hash_add(CG(class_table), lcname, name_len+1, &ce, sizeof(zend_class_entry *), NULL);
+ if (lcname[0] == '\\') {
+ ret = zend_hash_add(CG(class_table), lcname+1, name_len, &ce, sizeof(zend_class_entry *), NULL);
+ } else {
+ ret = zend_hash_add(CG(class_table), lcname, name_len+1, &ce, sizeof(zend_class_entry *), NULL);
+ }
+
efree(lcname);
if (ret == SUCCESS) {
ce->refcount++;
diff --git a/Zend/zend_builtin_functions.c b/Zend/zend_builtin_functions.c
index 44a480f..1ad64e7 100644
--- a/Zend/zend_builtin_functions.c
+++ b/Zend/zend_builtin_functions.c
@@ -1399,15 +1399,8 @@ ZEND_FUNCTION(class_alias)
return;
}
- if (!autoload) {
- lc_name = do_alloca(class_name_len + 1, use_heap);
- zend_str_tolower_copy(lc_name, class_name, class_name_len);
+ found = zend_lookup_class_ex(class_name, class_name_len, NULL, autoload, &ce TSRMLS_CC);
- found = zend_hash_find(EG(class_table), lc_name, class_name_len+1, (void **) &ce);
- free_alloca(lc_name, use_heap);
- } else {
- found = zend_lookup_class(class_name, class_name_len, &ce TSRMLS_CC);
- }
if (found == SUCCESS) {
if ((*ce)->type == ZEND_USER_CLASS) {
if (zend_register_class_alias_ex(alias_name, alias_name_len, *ce TSRMLS_CC) == SUCCESS) {
|