Skip to content

Commit 65f6120

Browse files
author
Christian Wimmer
committed
[GR-52534] Change digest algorithm and encoding.
PullRequest: graal/17205
2 parents 3570183 + cfb7cec commit 65f6120

File tree

21 files changed

+408
-147
lines changed

21 files changed

+408
-147
lines changed

compiler/mx.compiler/suite.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -512,6 +512,7 @@
512512
org.graalvm.truffle.runtime.svm,
513513
com.oracle.truffle.enterprise.svm""",
514514
"jdk.graal.compiler.java to org.graalvm.nativeimage.agent.tracing,org.graalvm.nativeimage.configure",
515+
"jdk.graal.compiler.util to org.graalvm.nativeimage.agent.tracing,org.graalvm.nativeimage.configure",
515516
"jdk.graal.compiler.core.common to org.graalvm.nativeimage.agent.tracing,org.graalvm.nativeimage.objectfile",
516517
"jdk.graal.compiler.debug to org.graalvm.nativeimage.objectfile",
517518
"jdk.graal.compiler.nodes.graphbuilderconf to org.graalvm.nativeimage.driver,org.graalvm.nativeimage.librarysupport",

compiler/src/jdk.graal.compiler.test/src/jdk/graal/compiler/hotspot/test/LambdaStableNameTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ public void checkStableLamdaNameForRunnableAndAutoCloseable() {
7575
assertEquals("Both stable lambda names are the same as they reference the same method", name, acName);
7676

7777
String myName = Type.getInternalName(getClass());
78-
assertEquals("The name known in 24.0 version is computed", "L" + myName + "$$Lambda.0xed5a4b9e70b8402e1deaafe82331c67282b84ba0;", name);
78+
assertEquals("The name known in 24.0 version is computed", "L" + myName + "$$Lambda.0x605511206480068bfd9e0bafd4f79e22;", name);
7979
}
8080

8181
private static void assertLambdaName(String name) {

compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/java/LambdaUtils.java

Lines changed: 2 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,6 @@
2424
*/
2525
package jdk.graal.compiler.java;
2626

27-
import java.nio.charset.StandardCharsets;
28-
import java.security.MessageDigest;
29-
import java.security.NoSuchAlgorithmException;
3027
import java.util.Arrays;
3128
import java.util.List;
3229
import java.util.function.Function;
@@ -46,14 +43,14 @@
4643
import jdk.graal.compiler.phases.OptimisticOptimizations;
4744
import jdk.graal.compiler.phases.tiers.HighTierContext;
4845
import jdk.graal.compiler.phases.util.Providers;
46+
import jdk.graal.compiler.util.Digest;
4947
import jdk.vm.ci.common.JVMCIError;
5048
import jdk.vm.ci.meta.ResolvedJavaMethod;
5149
import jdk.vm.ci.meta.ResolvedJavaType;
5250

5351
public final class LambdaUtils {
5452

5553
private static final Pattern LAMBDA_PATTERN = Pattern.compile("\\$\\$Lambda[/.][^/]+;");
56-
private static final char[] HEX = "0123456789abcdef".toCharArray();
5754
public static final String LAMBDA_SPLIT_PATTERN = "\\$\\$Lambda";
5855
public static final String LAMBDA_CLASS_NAME_SUBSTRING = "$$Lambda";
5956
public static final String SERIALIZATION_TEST_LAMBDA_CLASS_SUBSTRING = "$$Lambda";
@@ -152,48 +149,13 @@ private static String createStableLambdaName(ResolvedJavaType lambdaType, List<R
152149
for (ResolvedJavaMethod ctor : lambdaType.getDeclaredConstructors()) {
153150
sb.append(ctor.format("%P"));
154151
}
155-
return m.replaceFirst(Matcher.quoteReplacement(LAMBDA_CLASS_NAME_SUBSTRING + ADDRESS_PREFIX + digest(sb.toString()) + ";"));
152+
return m.replaceFirst(Matcher.quoteReplacement(LAMBDA_CLASS_NAME_SUBSTRING + ADDRESS_PREFIX + Digest.digestAsHex(sb.toString()) + ";"));
156153
}
157154

158155
private static Matcher lambdaMatcher(String value) {
159156
return LAMBDA_PATTERN.matcher(value);
160157
}
161158

162-
public static String toHex(byte[] data) {
163-
StringBuilder r = new StringBuilder(data.length * 2);
164-
for (byte b : data) {
165-
r.append(HEX[(b >> 4) & 0xf]);
166-
r.append(HEX[b & 0xf]);
167-
}
168-
return r.toString();
169-
}
170-
171-
/**
172-
* Hashing a passed string parameter using SHA-1 hashing algorithm.
173-
*
174-
* @param value string to be hashed
175-
* @return hexadecimal hashed value of the passed string parameter
176-
*/
177-
public static String digest(String value) {
178-
return digest(value.getBytes(StandardCharsets.UTF_8));
179-
}
180-
181-
/**
182-
* Hashing a passed byte array parameter using SHA-1 hashing algorithm.
183-
*
184-
* @param bytes byte array to be hashed
185-
* @return hexadecimal hashed value of the passed byte array parameter
186-
*/
187-
public static String digest(byte[] bytes) {
188-
try {
189-
MessageDigest md = MessageDigest.getInstance("SHA-1");
190-
md.update(bytes);
191-
return toHex(md.digest());
192-
} catch (NoSuchAlgorithmException ex) {
193-
throw new JVMCIError(ex);
194-
}
195-
}
196-
197159
/**
198160
* Extracts lambda capturing class name from the lambda class name.
199161
*

compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/java/StableMethodNameFormatter.java

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,6 @@
2424
*/
2525
package jdk.graal.compiler.java;
2626

27-
import static jdk.graal.compiler.java.LambdaUtils.digest;
28-
2927
import java.util.List;
3028
import java.util.function.Function;
3129
import java.util.regex.Matcher;
@@ -44,6 +42,7 @@
4442
import jdk.graal.compiler.phases.OptimisticOptimizations;
4543
import jdk.graal.compiler.phases.tiers.HighTierContext;
4644
import jdk.graal.compiler.phases.util.Providers;
45+
import jdk.graal.compiler.util.Digest;
4746
import jdk.vm.ci.meta.ResolvedJavaMethod;
4847
import jdk.vm.ci.meta.ResolvedJavaType;
4948

@@ -86,7 +85,7 @@ public class StableMethodNameFormatter implements Function<ResolvedJavaMethod, S
8685

8786
/**
8887
* The format of the invoked methods passed to {@link ResolvedJavaMethod#format(String)}, which
89-
* is {@link LambdaUtils#digest hashed} later.
88+
* is {@link Digest#digest hashed} later.
9089
*/
9190
private static final String INVOKED_METHOD_FORMAT = "%H.%n(%P)%R";
9291

@@ -183,7 +182,7 @@ private String findStableMHName(ResolvedJavaMethod method) {
183182
Matcher matcher = MH_METHOD_PATTERN.matcher(lambdaName);
184183
StringBuilder sb = new StringBuilder();
185184
invokedMethods.forEach((targetMethod) -> sb.append(targetMethod.format(INVOKED_METHOD_FORMAT)));
186-
return matcher.replaceFirst(Matcher.quoteReplacement(MH_PREFIX + digest(sb.toString())));
185+
return matcher.replaceFirst(Matcher.quoteReplacement(MH_PREFIX + Digest.digest(sb.toString())));
187186
}
188187

189188
/**
@@ -207,6 +206,6 @@ private String findStableLambdaMethodName(ResolvedJavaMethod method) {
207206
Matcher matcher = LAMBDA_METHOD_PATTERN.matcher(lambdaName);
208207
StringBuilder sb = new StringBuilder();
209208
invokedMethods.forEach((targetMethod) -> sb.append(targetMethod.format(INVOKED_METHOD_FORMAT)));
210-
return matcher.replaceFirst(Matcher.quoteReplacement(LAMBDA_PREFIX + digest(sb.toString())));
209+
return matcher.replaceFirst(Matcher.quoteReplacement(LAMBDA_PREFIX + Digest.digest(sb.toString())));
211210
}
212211
}

0 commit comments

Comments
 (0)