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
|