--- old/src/hotspot/share/classfile/classLoader.cpp 2018-05-04 21:17:08.098193663 -0700 +++ new/src/hotspot/share/classfile/classLoader.cpp 2018-05-04 21:17:07.830168360 -0700 @@ -1557,17 +1557,19 @@ 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 = 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_src_path = NEW_RESOURCE_ARRAY_IN_THREAD(THREAD, char, JVM_MAXPATHLEN); 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)) { + if (get_canonical_path(ent->name(), canonical_path, JVM_MAXPATHLEN) && + get_canonical_path(path, canonical_src_path, JVM_MAXPATHLEN)) { // 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, canonical_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.