@@ -1210,9 +1210,17 @@ static zend_class_entry *zend_resolve_nested_class(zend_string *requested_name,
1210
1210
}
1211
1211
1212
1212
// 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 );
1216
1224
zend_string_release (outer_class_name );
1217
1225
if (ce ) {
1218
1226
zend_string_release (scope_name );
@@ -1227,15 +1235,6 @@ static zend_class_entry *zend_resolve_nested_class(zend_string *requested_name,
1227
1235
scope_name = shorter_scope ;
1228
1236
}
1229
1237
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
-
1239
1238
zend_string_release (scope_name );
1240
1239
1241
1240
// Final lookup directly at namespace/global scope
0 commit comments