php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Return to Bug #61759
Patch fix-class_alias revision 2013-08-27 09:46 UTC by jpauli@php.net

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) {
 
PHP Copyright © 2001-2014 The PHP Group
All rights reserved.
Last updated: Fri Apr 18 08:02:55 2014 UTC