2454 |
2454 |
2455 // Only boot and platform class loaders can define classes in "java/" packages. |
2455 // Only boot and platform class loaders can define classes in "java/" packages. |
2456 void InstanceKlass::check_prohibited_package(Symbol* class_name, |
2456 void InstanceKlass::check_prohibited_package(Symbol* class_name, |
2457 Handle class_loader, |
2457 Handle class_loader, |
2458 TRAPS) { |
2458 TRAPS) { |
2459 ResourceMark rm(THREAD); |
|
2460 if (!class_loader.is_null() && |
2459 if (!class_loader.is_null() && |
2461 !SystemDictionary::is_platform_class_loader(class_loader) && |
2460 !SystemDictionary::is_platform_class_loader(class_loader) && |
2462 class_name != NULL && |
2461 class_name != NULL) { |
2463 strncmp(class_name->as_C_string(), JAVAPKG, JAVAPKG_LEN) == 0) { |
2462 ResourceMark rm(THREAD); |
2464 TempNewSymbol pkg_name = InstanceKlass::package_from_name(class_name, CHECK); |
2463 char* name = class_name->as_C_string(); |
2465 assert(pkg_name != NULL, "Error in parsing package name starting with 'java/'"); |
2464 if (strncmp(name, JAVAPKG, JAVAPKG_LEN) == 0 && name[JAVAPKG_LEN] == '/') { |
2466 char* name = pkg_name->as_C_string(); |
2465 TempNewSymbol pkg_name = InstanceKlass::package_from_name(class_name, CHECK); |
2467 const char* class_loader_name = SystemDictionary::loader_name(class_loader()); |
2466 assert(pkg_name != NULL, "Error in parsing package name starting with 'java/'"); |
2468 StringUtils::replace_no_expand(name, "/", "."); |
2467 name = pkg_name->as_C_string(); |
2469 const char* msg_text1 = "Class loader (instance of): "; |
2468 const char* class_loader_name = SystemDictionary::loader_name(class_loader()); |
2470 const char* msg_text2 = " tried to load prohibited package name: "; |
2469 StringUtils::replace_no_expand(name, "/", "."); |
2471 size_t len = strlen(msg_text1) + strlen(class_loader_name) + strlen(msg_text2) + strlen(name) + 1; |
2470 const char* msg_text1 = "Class loader (instance of): "; |
2472 char* message = NEW_RESOURCE_ARRAY_IN_THREAD(THREAD, char, len); |
2471 const char* msg_text2 = " tried to load prohibited package name: "; |
2473 jio_snprintf(message, len, "%s%s%s%s", msg_text1, class_loader_name, msg_text2, name); |
2472 size_t len = strlen(msg_text1) + strlen(class_loader_name) + strlen(msg_text2) + strlen(name) + 1; |
2474 THROW_MSG(vmSymbols::java_lang_SecurityException(), message); |
2473 char* message = NEW_RESOURCE_ARRAY_IN_THREAD(THREAD, char, len); |
|
2474 jio_snprintf(message, len, "%s%s%s%s", msg_text1, class_loader_name, msg_text2, name); |
|
2475 THROW_MSG(vmSymbols::java_lang_SecurityException(), message); |
|
2476 } |
2475 } |
2477 } |
2476 return; |
2478 return; |
2477 } |
2479 } |
2478 |
2480 |
2479 // tell if two classes have the same enclosing class (at package level) |
2481 // tell if two classes have the same enclosing class (at package level) |