Skip to content

Commit

Permalink
Adopt "JDK-8324646: Avoid Class.forName in SecureRandom constructor"
Browse files Browse the repository at this point in the history
Adapted backport of
oracle@05c1e79

Fixes graalvm#716
  • Loading branch information
zakkak committed Apr 24, 2024
1 parent 4cc6ec2 commit 4e7ffed
Showing 1 changed file with 8 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -659,7 +659,10 @@ private static boolean isValid(Service s) {
private static Function<String, Class<?>> getConstructorParameterClassAccessor(ImageClassLoader loader) {
Map<String, /* EngineDescription */ Object> knownEngines = ReflectionUtil.readStaticField(Provider.class, "knownEngines");
Class<?> clazz = loader.findClassOrFail("java.security.Provider$EngineDescription");
Field consParamClassNameField = ReflectionUtil.lookupField(clazz, "constructorParameterClassName");
int feature = Runtime.version().feature();
int update = Runtime.version().update();
Field consParamClassField = ReflectionUtil.lookupField(clazz,
feature == 22 && update >= 2 ? "constructorParameterClass" : "constructorParameterClassName");

/*
* The returned lambda captures the value of the Provider.knownEngines map retrieved above
Expand All @@ -684,7 +687,10 @@ private static Function<String, Class<?>> getConstructorParameterClassAccessor(I
if (engineDescription == null) {
return null;
}
String constrParamClassName = (String) consParamClassNameField.get(engineDescription);
if (feature == 22 && update >= 2) {
return (Class<?>) consParamClassField.get(engineDescription);
}
String constrParamClassName = (String) consParamClassField.get(engineDescription);
if (constrParamClassName != null) {
return loader.findClass(constrParamClassName).get();
}
Expand Down

0 comments on commit 4e7ffed

Please sign in to comment.