1
0
Fork 0
mirror of https://gitlab.alpinelinux.org/alpine/aports.git synced 2025-07-16 12:45:18 +03:00
aports/community/openjdk-mandrel/Adopt-JDK-8324646-Avoid-Class.forName-in-SecureRando_patch
2024-11-29 11:13:54 -05:00

58 lines
3.2 KiB
Text

From 9504af66016e4c2a42d11c93900104c7c726948c Mon Sep 17 00:00:00 2001
From: Foivos Zakkak <fzakkak@redhat.com>
Date: Wed, 24 Apr 2024 15:13:07 +0300
Subject: [PATCH] Adopt "JDK-8324646: Avoid Class.forName in SecureRandom
constructor"
Version agnostic adaptation of 05c1e79d360a9ab375eac31d1ce6946a311d74bc
(cherry picked from commit 0edb942475a39226d5c68495433e3ea5049b2459)
Fix missing null check in 'Adopt "JDK-8324646: Avoid Class.forName in SecureRandom constructor"'
(cherry picked from commit dcecff795eb9c216bfea170c302b83bf9a43a035)
Fixes https://github.com/graalvm/mandrel/issues/779
---
.../svm/hosted/SecurityServicesFeature.java | 19 +++++++++++++++----
1 file changed, 15 insertions(+), 4 deletions(-)
diff --git a/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/SecurityServicesFeature.java b/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/SecurityServicesFeature.java
index 56e4790d7fb..90e40bee71b 100644
--- a/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/SecurityServicesFeature.java
+++ b/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/SecurityServicesFeature.java
@@ -675,7 +675,15 @@ public class SecurityServicesFeature extends JNIRegistrationUtil implements Inte
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");
+ Field consParamClassField;
+
+ try {
+ consParamClassField = ReflectionUtil.lookupField(clazz, "constructorParameterClassName");
+ } catch (ReflectionUtil.ReflectionUtilError e) {
+ consParamClassField = ReflectionUtil.lookupField(clazz, "constructorParameterClass");
+ }
+
+ final Field consParamClassFieldFinal = consParamClassField;
/*
* The returned lambda captures the value of the Provider.knownEngines map retrieved above
@@ -700,9 +708,12 @@ public class SecurityServicesFeature extends JNIRegistrationUtil implements Inte
if (engineDescription == null) {
return null;
}
- String constrParamClassName = (String) consParamClassNameField.get(engineDescription);
- if (constrParamClassName != null) {
- return loader.findClass(constrParamClassName).get();
+ if (consParamClassFieldFinal.getName().equals("constructorParameterClass")) {
+ return (Class<?>) consParamClassFieldFinal.get(engineDescription);
+ }
+ String constructorParameterClassName = (String) consParamClassFieldFinal.get(engineDescription);
+ if (constructorParameterClassName != null) {
+ return loader.findClass(constructorParameterClassName).get();
}
} catch (IllegalAccessException e) {
VMError.shouldNotReachHere(e);
--
2.47.0