< prev index next >
src/hotspot/share/oops/instanceKlass.cpp
Print this page
*** 2326,2337 ****
}
void InstanceKlass::set_package(ClassLoaderData* loader_data, TRAPS) {
// ensure java/ packages only loaded by boot or platform builtin loaders
! Handle class_loader(THREAD, loader_data->class_loader());
! check_prohibited_package(name(), class_loader, CHECK);
TempNewSymbol pkg_name = package_from_name(name(), CHECK);
if (pkg_name != NULL && loader_data != NULL) {
--- 2326,2336 ----
}
void InstanceKlass::set_package(ClassLoaderData* loader_data, TRAPS) {
// ensure java/ packages only loaded by boot or platform builtin loaders
! check_prohibited_package(name(), loader_data, CHECK);
TempNewSymbol pkg_name = package_from_name(name(), CHECK);
if (pkg_name != NULL && loader_data != NULL) {
*** 2357,2383 ****
loader_data->unnamed_module());
}
// A package should have been successfully created
assert(_package_entry != NULL, "Package entry for class %s not found, loader %s",
! name()->as_C_string(), loader_data->loader_name());
}
if (log_is_enabled(Debug, module)) {
ResourceMark rm;
ModuleEntry* m = _package_entry->module();
log_trace(module)("Setting package: class: %s, package: %s, loader: %s, module: %s",
external_name(),
pkg_name->as_C_string(),
! loader_data->loader_name(),
(m->is_named() ? m->name()->as_C_string() : UNNAMED_MODULE));
}
} else {
ResourceMark rm;
log_trace(module)("Setting package: class: %s, package: unnamed, loader: %s, module: %s",
external_name(),
! (loader_data != NULL) ? loader_data->loader_name() : "NULL",
UNNAMED_MODULE);
}
}
--- 2356,2382 ----
loader_data->unnamed_module());
}
// A package should have been successfully created
assert(_package_entry != NULL, "Package entry for class %s not found, loader %s",
! name()->as_C_string(), loader_data->loader_name_and_id());
}
if (log_is_enabled(Debug, module)) {
ResourceMark rm;
ModuleEntry* m = _package_entry->module();
log_trace(module)("Setting package: class: %s, package: %s, loader: %s, module: %s",
external_name(),
pkg_name->as_C_string(),
! loader_data->loader_name_and_id(),
(m->is_named() ? m->name()->as_C_string() : UNNAMED_MODULE));
}
} else {
ResourceMark rm;
log_trace(module)("Setting package: class: %s, package: unnamed, loader: %s, module: %s",
external_name(),
! (loader_data != NULL) ? loader_data->loader_name_and_id() : "NULL",
UNNAMED_MODULE);
}
}
*** 2469,2490 ****
return(is_same_class_package(targetclassloader(), targetclassname));
}
// Only boot and platform class loaders can define classes in "java/" packages.
void InstanceKlass::check_prohibited_package(Symbol* class_name,
! Handle class_loader,
TRAPS) {
! if (!class_loader.is_null() &&
! !SystemDictionary::is_platform_class_loader(class_loader()) &&
class_name != NULL) {
ResourceMark rm(THREAD);
char* name = class_name->as_C_string();
if (strncmp(name, JAVAPKG, JAVAPKG_LEN) == 0 && name[JAVAPKG_LEN] == '/') {
TempNewSymbol pkg_name = InstanceKlass::package_from_name(class_name, CHECK);
assert(pkg_name != NULL, "Error in parsing package name starting with 'java/'");
name = pkg_name->as_C_string();
! const char* class_loader_name = SystemDictionary::loader_name(class_loader());
StringUtils::replace_no_expand(name, "/", ".");
const char* msg_text1 = "Class loader (instance of): ";
const char* msg_text2 = " tried to load prohibited package name: ";
size_t len = strlen(msg_text1) + strlen(class_loader_name) + strlen(msg_text2) + strlen(name) + 1;
char* message = NEW_RESOURCE_ARRAY_IN_THREAD(THREAD, char, len);
--- 2468,2489 ----
return(is_same_class_package(targetclassloader(), targetclassname));
}
// Only boot and platform class loaders can define classes in "java/" packages.
void InstanceKlass::check_prohibited_package(Symbol* class_name,
! ClassLoaderData* loader_data,
TRAPS) {
! if (!loader_data->is_boot_class_loader_data() &&
! !loader_data->is_platform_class_loader_data() &&
class_name != NULL) {
ResourceMark rm(THREAD);
char* name = class_name->as_C_string();
if (strncmp(name, JAVAPKG, JAVAPKG_LEN) == 0 && name[JAVAPKG_LEN] == '/') {
TempNewSymbol pkg_name = InstanceKlass::package_from_name(class_name, CHECK);
assert(pkg_name != NULL, "Error in parsing package name starting with 'java/'");
name = pkg_name->as_C_string();
! const char* class_loader_name = loader_data->loader_name_and_id();
StringUtils::replace_no_expand(name, "/", ".");
const char* msg_text1 = "Class loader (instance of): ";
const char* msg_text2 = " tried to load prohibited package name: ";
size_t len = strlen(msg_text1) + strlen(class_loader_name) + strlen(msg_text2) + strlen(name) + 1;
char* message = NEW_RESOURCE_ARRAY_IN_THREAD(THREAD, char, len);
< prev index next >