mirror of
https://github.com/openjdk/jdk.git
synced 2025-08-27 06:45:07 +02:00
8245412: Better class definitions
Reviewed-by: coleenp, rhalade, jwilhelm, skoivu
This commit is contained in:
parent
00a5af44af
commit
24f7f84594
1 changed files with 24 additions and 4 deletions
|
@ -2992,19 +2992,39 @@ bool InstanceKlass::is_override(const methodHandle& super_method, Handle targetc
|
||||||
return(is_same_class_package(targetclassloader(), targetclassname));
|
return(is_same_class_package(targetclassloader(), targetclassname));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static bool is_prohibited_package_slow(Symbol* class_name) {
|
||||||
|
// Caller has ResourceMark
|
||||||
|
int length;
|
||||||
|
jchar* unicode = class_name->as_unicode(length);
|
||||||
|
return (length >= 5 &&
|
||||||
|
unicode[0] == 'j' &&
|
||||||
|
unicode[1] == 'a' &&
|
||||||
|
unicode[2] == 'v' &&
|
||||||
|
unicode[3] == 'a' &&
|
||||||
|
unicode[4] == '/');
|
||||||
|
}
|
||||||
|
|
||||||
// Only boot and platform class loaders can define classes in "java/" packages.
|
// Only boot and platform class loaders can define classes in "java/" packages.
|
||||||
void InstanceKlass::check_prohibited_package(Symbol* class_name,
|
void InstanceKlass::check_prohibited_package(Symbol* class_name,
|
||||||
ClassLoaderData* loader_data,
|
ClassLoaderData* loader_data,
|
||||||
TRAPS) {
|
TRAPS) {
|
||||||
if (!loader_data->is_boot_class_loader_data() &&
|
if (!loader_data->is_boot_class_loader_data() &&
|
||||||
!loader_data->is_platform_class_loader_data() &&
|
!loader_data->is_platform_class_loader_data() &&
|
||||||
class_name != NULL) {
|
class_name != NULL && class_name->utf8_length() >= 5) {
|
||||||
ResourceMark rm(THREAD);
|
ResourceMark rm(THREAD);
|
||||||
char* name = class_name->as_C_string();
|
bool prohibited;
|
||||||
if (strncmp(name, JAVAPKG, JAVAPKG_LEN) == 0 && name[JAVAPKG_LEN] == '/') {
|
const u1* base = class_name->base();
|
||||||
|
if ((base[0] | base[1] | base[2] | base[3] | base[4]) & 0x80) {
|
||||||
|
prohibited = is_prohibited_package_slow(class_name);
|
||||||
|
} else {
|
||||||
|
char* name = class_name->as_C_string();
|
||||||
|
prohibited = (strncmp(name, JAVAPKG, JAVAPKG_LEN) == 0 && name[JAVAPKG_LEN] == '/');
|
||||||
|
}
|
||||||
|
if (prohibited) {
|
||||||
TempNewSymbol pkg_name = ClassLoader::package_from_class_name(class_name);
|
TempNewSymbol pkg_name = ClassLoader::package_from_class_name(class_name);
|
||||||
assert(pkg_name != NULL, "Error in parsing package name starting with 'java/'");
|
assert(pkg_name != NULL, "Error in parsing package name starting with 'java/'");
|
||||||
name = pkg_name->as_C_string();
|
char* name = pkg_name->as_C_string();
|
||||||
const char* class_loader_name = loader_data->loader_name_and_id();
|
const char* class_loader_name = loader_data->loader_name_and_id();
|
||||||
StringUtils::replace_no_expand(name, "/", ".");
|
StringUtils::replace_no_expand(name, "/", ".");
|
||||||
const char* msg_text1 = "Class loader (instance of): ";
|
const char* msg_text1 = "Class loader (instance of): ";
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue