RFR: 8299329: Assertion failure with fastdebug build when trying to use CDS without classpath [v3]
Ioi Lam
iklam at openjdk.org
Wed Jan 4 20:34:53 UTC 2023
On Wed, 4 Jan 2023 17:40:58 GMT, Ashutosh Mehra <duke at openjdk.org> wrote:
>> It appears longest_common_app_classpath_prefix_len() is not returning correct value when there is no file separator in the path being searched backwards. Instead of returning 0 it return 1.
>>
>> In case of empty classpath, it can result in assertion failure in check_paths():
>>
>> `assert(strlen(rp_array->at(i)) > (size_t)runtime_prefix_len, "sanity");`
>>
>> It can also result in incorrectly validating the app classpaths if they only differ by first character. Eg:
>>
>> Dump time:
>> -cp hello.jar
>> Run time:
>> -cp mello.jar
>>
>> This would not result in classpath mismatch!
>>
>> This fix updates longest_common_app_classpath_prefix_len() to return 0 if no file separator character is found.
>>
>> Signed-off-by: Ashutosh Mehra <asmehra at redhat.com>
>
> Ashutosh Mehra has updated the pull request incrementally with one additional commit since the last revision:
>
> Fix whitespace
>
> Signed-off-by: Ashutosh Mehra <asmehra at redhat.com>
test/hotspot/jtreg/runtime/cds/appcds/WrongClasspath.java line 51:
> 49: // Run with a jar file that differs from the original jar file by the first character only: -cp mello.jar
> 50: // Shared class paths mismatch should be detected.
> 51: String mellojar = appJarInWorkDir.replace("hello.jar", "mello.jar");
I am not sure if we need to add more APIs to JarBuilder. Since you just need two files "hello.jar" and "mello.jar", I think that can be done like:
import java.nio.file.Paths;
...
String helloJar = "hello.jar";
String melloJar = "mello.jar";
Files.copy(Paths.get(appJar), Paths.get(helloJar), StandardCopyOption.COPY_ATTRIBUTES);
Files.copy(Paths.get(appJar), Paths.get(melloJar), StandardCopyOption.COPY_ATTRIBUTES);
-------------
PR: https://git.openjdk.org/jdk/pull/11781
More information about the hotspot-runtime-dev
mailing list