src/hotspot/share/classfile/classLoader.cpp
Index Unified diffs Context diffs Sdiffs Wdiffs Patch New Old Previous File Next File
*** old/src/hotspot/share/classfile/classLoader.cpp	Tue May  8 09:54:59 2018
--- new/src/hotspot/share/classfile/classLoader.cpp	Tue May  8 09:54:59 2018

*** 1550,1570 **** --- 1550,1574 ---- ResourceMark rm(THREAD); int classpath_index = -1; PackageEntry* pkg_entry = ik->package(); if (FileMapInfo::get_number_of_shared_paths() > 0) { ! char* canonical_path = NEW_RESOURCE_ARRAY(char, JVM_MAXPATHLEN); ! char* canonical_path_table_entry = NEW_RESOURCE_ARRAY_IN_THREAD(THREAD, char, JVM_MAXPATHLEN); // save the path from the file: protocol or the module name from the jrt: protocol // if no protocol prefix is found, path is the same as stream->source() char* path = skip_uri_protocol(src); + char* canonical_class_src_path = NEW_RESOURCE_ARRAY_IN_THREAD(THREAD, char, JVM_MAXPATHLEN); + bool res = get_canonical_path(path, canonical_class_src_path, JVM_MAXPATHLEN); + assert(res, "sanity"); for (int i = 0; i < FileMapInfo::get_number_of_shared_paths(); i++) { SharedClassPathEntry* ent = FileMapInfo::shared_path(i); if (get_canonical_path(ent->name(), canonical_path, JVM_MAXPATHLEN)) { + res = get_canonical_path(ent->name(), canonical_path_table_entry, JVM_MAXPATHLEN); + assert(res, "sanity"); // If the path (from the class stream source) is the same as the shared // class or module path, then we have a match. ! if (strcmp(canonical_path, os::native_path((char*)path)) == 0) { ! if (strcmp(canonical_path_table_entry, canonical_class_src_path) == 0) { // NULL pkg_entry and pkg_entry in an unnamed module implies the class // is from the -cp or boot loader append path which consists of -Xbootclasspath/a // and jvmti appended entries. if ((pkg_entry == NULL) || (pkg_entry->in_unnamed_module())) { // Ensure the index is within the -cp range before assigning
*** 1601,1611 **** --- 1605,1614 ---- if (i == 0 && (is_modules_image(src) || string_starts_with(src, "jrt:"))) { classpath_index = i; break; } } } // No path entry found for this class. Must be a shared class loaded by the // user defined classloader. if (classpath_index < 0) { assert(ik->shared_classpath_index() < 0, "Sanity");

src/hotspot/share/classfile/classLoader.cpp
Index Unified diffs Context diffs Sdiffs Wdiffs Patch New Old Previous File Next File