Skip to content

Commit a05c5db

Browse files
committed
properly handle searching up the scope
1 parent 7119f6c commit a05c5db

File tree

1 file changed

+11
-12
lines changed

1 file changed

+11
-12
lines changed

Zend/zend_execute_API.c

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1210,9 +1210,17 @@ static zend_class_entry *zend_resolve_nested_class(zend_string *requested_name,
12101210
}
12111211

12121212
// Check if the class is in the outer scope
1213-
zend_string *outer_name = zend_string_concat3(ZSTR_VAL(outer_class_name), ZSTR_LEN(outer_class_name), "\\", 1, ZSTR_VAL(inner_name), ZSTR_LEN(inner_name));
1214-
ce = zend_lookup_class_ex(outer_name, NULL, flags | ZEND_FETCH_CLASS_NO_INNER);
1215-
zend_string_release(outer_name);
1213+
char *outer_name = strrchr(ZSTR_VAL(outer_class_name), '\\');
1214+
zend_string *outer_name_z;
1215+
if (!outer_name) {
1216+
outer_name_z = zend_string_copy(inner_name);
1217+
} else {
1218+
zend_string *tmp = zend_string_init(ZSTR_VAL(outer_class_name), outer_name - ZSTR_VAL(outer_class_name), 0);
1219+
outer_name_z = zend_string_concat3(ZSTR_VAL(tmp), ZSTR_LEN(tmp), "\\", 1, ZSTR_VAL(inner_name), ZSTR_LEN(inner_name));
1220+
zend_string_release(tmp);
1221+
}
1222+
ce = zend_lookup_class_ex(outer_name_z, NULL, flags | ZEND_FETCH_CLASS_NO_INNER);
1223+
zend_string_release(outer_name_z);
12161224
zend_string_release(outer_class_name);
12171225
if (ce) {
12181226
zend_string_release(scope_name);
@@ -1227,15 +1235,6 @@ static zend_class_entry *zend_resolve_nested_class(zend_string *requested_name,
12271235
scope_name = shorter_scope;
12281236
}
12291237

1230-
// handle the edge case where the class is in the global scope
1231-
//if (separator == NULL) {
1232-
ce = zend_lookup_class_ex(inner_name, NULL, flags | ZEND_FETCH_CLASS_NO_INNER);
1233-
zend_string_release(scope_name);
1234-
zend_string_release(inner_name);
1235-
zend_string_release(requested_name);
1236-
return ce;
1237-
//}
1238-
12391238
zend_string_release(scope_name);
12401239

12411240
// Final lookup directly at namespace/global scope

0 commit comments

Comments
 (0)