< prev index next >

src/share/vm/classfile/modules.cpp

Print this page




 308   if (loader != java_lang_ClassLoader::non_reflection_class_loader(loader)) {
 309     THROW_MSG(vmSymbols::java_lang_IllegalArgumentException(),
 310               "Class loader is an invalid delegating class loader");
 311   }
 312   Handle h_loader = Handle(THREAD, loader);
 313 
 314   // Check that the list of packages has no duplicates and that the
 315   // packages are syntactically ok.
 316   GrowableArray<Symbol*>* pkg_list = new GrowableArray<Symbol*>(num_packages);
 317   for (int x = 0; x < num_packages; x++) {
 318     const char* package_name = packages[x];
 319     if (!verify_package_name(package_name)) {
 320       THROW_MSG(vmSymbols::java_lang_IllegalArgumentException(),
 321                 err_msg("Invalid package name: %s for module: %s",
 322                         package_name, module_name));
 323     }
 324 
 325     // Only modules defined to either the boot or platform class loader, can define a "java/" package.
 326     if (!h_loader.is_null() &&
 327         !SystemDictionary::is_platform_class_loader(h_loader) &&
 328         strncmp(package_name, JAVAPKG, JAVAPKG_LEN) == 0) {

 329       const char* class_loader_name = SystemDictionary::loader_name(h_loader());
 330       size_t pkg_len = strlen(package_name);
 331       char* pkg_name = NEW_RESOURCE_ARRAY_IN_THREAD(THREAD, char, pkg_len);
 332       strncpy(pkg_name, package_name, pkg_len);
 333       StringUtils::replace_no_expand(pkg_name, "/", ".");
 334       const char* msg_text1 = "Class loader (instance of): ";
 335       const char* msg_text2 = " tried to define prohibited package name: ";
 336       size_t len = strlen(msg_text1) + strlen(class_loader_name) + strlen(msg_text2) + pkg_len + 1;
 337       char* message = NEW_RESOURCE_ARRAY_IN_THREAD(THREAD, char, len);
 338       jio_snprintf(message, len, "%s%s%s%s", msg_text1, class_loader_name, msg_text2, pkg_name);
 339       THROW_MSG(vmSymbols::java_lang_IllegalArgumentException(), message);
 340     }
 341 
 342     Symbol* pkg_symbol = SymbolTable::new_symbol(package_name, CHECK);
 343     // append_if_missing() returns FALSE if entry already exists.
 344     if (!pkg_list->append_if_missing(pkg_symbol)) {
 345       THROW_MSG(vmSymbols::java_lang_IllegalArgumentException(),
 346                 err_msg("Duplicate package name: %s for module %s",
 347                         package_name, module_name));
 348     }


 731   }
 732   ModuleEntry* module_entry = get_module_entry(module, CHECK);
 733   if (module_entry == NULL) {
 734     THROW_MSG(vmSymbols::java_lang_IllegalArgumentException(),
 735               "module is invalid");
 736   }
 737   if (!module_entry->is_named()) {
 738     THROW_MSG(vmSymbols::java_lang_IllegalArgumentException(),
 739               "module cannot be an unnamed module");
 740   }
 741   if (!verify_package_name(package_name)) {
 742     THROW_MSG(vmSymbols::java_lang_IllegalArgumentException(),
 743               err_msg("Invalid package name: %s", package_name));
 744   }
 745 
 746   ClassLoaderData *loader_data = module_entry->loader_data();
 747 
 748   // Only modules defined to either the boot or platform class loader, can define a "java/" package.
 749   if (!loader_data->is_the_null_class_loader_data() &&
 750       !loader_data->is_platform_class_loader_data() &&
 751       strncmp(package_name, JAVAPKG, JAVAPKG_LEN) == 0) {

 752     const char* class_loader_name = SystemDictionary::loader_name(loader_data);
 753     size_t pkg_len = strlen(package_name);
 754     char* pkg_name = NEW_RESOURCE_ARRAY_IN_THREAD(THREAD, char, pkg_len);
 755     strncpy(pkg_name, package_name, pkg_len);
 756     StringUtils::replace_no_expand(pkg_name, "/", ".");
 757     const char* msg_text1 = "Class loader (instance of): ";
 758     const char* msg_text2 = " tried to define prohibited package name: ";
 759     size_t len = strlen(msg_text1) + strlen(class_loader_name) + strlen(msg_text2) + pkg_len + 1;
 760     char* message = NEW_RESOURCE_ARRAY_IN_THREAD(THREAD, char, len);
 761     jio_snprintf(message, len, "%s%s%s%s", msg_text1, class_loader_name, msg_text2, pkg_name);
 762     THROW_MSG(vmSymbols::java_lang_IllegalArgumentException(), message);
 763   }
 764 
 765   log_debug(modules)("add_module_package(): Adding package %s to module %s",
 766                      package_name, module_entry->name()->as_C_string());
 767 
 768   TempNewSymbol pkg_symbol = SymbolTable::new_symbol(package_name, CHECK);
 769   PackageEntryTable* package_table = loader_data->packages();
 770   assert(package_table != NULL, "Missing package_table");
 771 




 308   if (loader != java_lang_ClassLoader::non_reflection_class_loader(loader)) {
 309     THROW_MSG(vmSymbols::java_lang_IllegalArgumentException(),
 310               "Class loader is an invalid delegating class loader");
 311   }
 312   Handle h_loader = Handle(THREAD, loader);
 313 
 314   // Check that the list of packages has no duplicates and that the
 315   // packages are syntactically ok.
 316   GrowableArray<Symbol*>* pkg_list = new GrowableArray<Symbol*>(num_packages);
 317   for (int x = 0; x < num_packages; x++) {
 318     const char* package_name = packages[x];
 319     if (!verify_package_name(package_name)) {
 320       THROW_MSG(vmSymbols::java_lang_IllegalArgumentException(),
 321                 err_msg("Invalid package name: %s for module: %s",
 322                         package_name, module_name));
 323     }
 324 
 325     // Only modules defined to either the boot or platform class loader, can define a "java/" package.
 326     if (!h_loader.is_null() &&
 327         !SystemDictionary::is_platform_class_loader(h_loader) &&
 328         (strncmp(package_name, JAVAPKG, JAVAPKG_LEN) == 0 &&
 329           (package_name[JAVAPKG_LEN] == '/' || package_name[JAVAPKG_LEN] == '\0'))) {
 330       const char* class_loader_name = SystemDictionary::loader_name(h_loader());
 331       size_t pkg_len = strlen(package_name);
 332       char* pkg_name = NEW_RESOURCE_ARRAY_IN_THREAD(THREAD, char, pkg_len);
 333       strncpy(pkg_name, package_name, pkg_len);
 334       StringUtils::replace_no_expand(pkg_name, "/", ".");
 335       const char* msg_text1 = "Class loader (instance of): ";
 336       const char* msg_text2 = " tried to define prohibited package name: ";
 337       size_t len = strlen(msg_text1) + strlen(class_loader_name) + strlen(msg_text2) + pkg_len + 1;
 338       char* message = NEW_RESOURCE_ARRAY_IN_THREAD(THREAD, char, len);
 339       jio_snprintf(message, len, "%s%s%s%s", msg_text1, class_loader_name, msg_text2, pkg_name);
 340       THROW_MSG(vmSymbols::java_lang_IllegalArgumentException(), message);
 341     }
 342 
 343     Symbol* pkg_symbol = SymbolTable::new_symbol(package_name, CHECK);
 344     // append_if_missing() returns FALSE if entry already exists.
 345     if (!pkg_list->append_if_missing(pkg_symbol)) {
 346       THROW_MSG(vmSymbols::java_lang_IllegalArgumentException(),
 347                 err_msg("Duplicate package name: %s for module %s",
 348                         package_name, module_name));
 349     }


 732   }
 733   ModuleEntry* module_entry = get_module_entry(module, CHECK);
 734   if (module_entry == NULL) {
 735     THROW_MSG(vmSymbols::java_lang_IllegalArgumentException(),
 736               "module is invalid");
 737   }
 738   if (!module_entry->is_named()) {
 739     THROW_MSG(vmSymbols::java_lang_IllegalArgumentException(),
 740               "module cannot be an unnamed module");
 741   }
 742   if (!verify_package_name(package_name)) {
 743     THROW_MSG(vmSymbols::java_lang_IllegalArgumentException(),
 744               err_msg("Invalid package name: %s", package_name));
 745   }
 746 
 747   ClassLoaderData *loader_data = module_entry->loader_data();
 748 
 749   // Only modules defined to either the boot or platform class loader, can define a "java/" package.
 750   if (!loader_data->is_the_null_class_loader_data() &&
 751       !loader_data->is_platform_class_loader_data() &&
 752       (strncmp(package_name, JAVAPKG, JAVAPKG_LEN) == 0 &&
 753         (package_name[JAVAPKG_LEN] == '/' || package_name[JAVAPKG_LEN] == '\0'))) {
 754     const char* class_loader_name = SystemDictionary::loader_name(loader_data);
 755     size_t pkg_len = strlen(package_name);
 756     char* pkg_name = NEW_RESOURCE_ARRAY_IN_THREAD(THREAD, char, pkg_len);
 757     strncpy(pkg_name, package_name, pkg_len);
 758     StringUtils::replace_no_expand(pkg_name, "/", ".");
 759     const char* msg_text1 = "Class loader (instance of): ";
 760     const char* msg_text2 = " tried to define prohibited package name: ";
 761     size_t len = strlen(msg_text1) + strlen(class_loader_name) + strlen(msg_text2) + pkg_len + 1;
 762     char* message = NEW_RESOURCE_ARRAY_IN_THREAD(THREAD, char, len);
 763     jio_snprintf(message, len, "%s%s%s%s", msg_text1, class_loader_name, msg_text2, pkg_name);
 764     THROW_MSG(vmSymbols::java_lang_IllegalArgumentException(), message);
 765   }
 766 
 767   log_debug(modules)("add_module_package(): Adding package %s to module %s",
 768                      package_name, module_entry->name()->as_C_string());
 769 
 770   TempNewSymbol pkg_symbol = SymbolTable::new_symbol(package_name, CHECK);
 771   PackageEntryTable* package_table = loader_data->packages();
 772   assert(package_table != NULL, "Missing package_table");
 773 


< prev index next >