@@ -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