From 876c7fb5f7aab9fb13f6581b79ec14b27c3944d7 Mon Sep 17 00:00:00 2001
From: Roger Riggs <rriggs@openjdk.org>
Date: Fri, 8 Jan 2021 21:31:37 +0000
Subject: [PATCH] 8259493: [test] Use HexFormat instead of adhoc hex utilities
 in network code and locale SoftKeys

Reviewed-by: lancea, naoto
---
 test/jdk/java/net/Authenticator/B6870935.java  | 17 ++---------------
 .../SetAuthenticator/HTTPTestServer.java       | 18 +++---------------
 .../java/net/httpclient/DigestEchoServer.java  | 18 +++---------------
 test/jdk/java/util/Locale/SoftKeys.java        | 15 ++-------------
 .../sun/net/www/protocol/http/DigestTest.java  | 17 ++---------------
 5 files changed, 12 insertions(+), 73 deletions(-)

diff --git a/test/jdk/java/net/Authenticator/B6870935.java b/test/jdk/java/net/Authenticator/B6870935.java
index 766407a104a..9f672775ad5 100644
--- a/test/jdk/java/net/Authenticator/B6870935.java
+++ b/test/jdk/java/net/Authenticator/B6870935.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2001, 2019, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2001, 2021, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -186,11 +186,6 @@ public class B6870935 {
             return finalHash;
         }
 
-        private final static char charArray[] = {
-            '0', '1', '2', '3', '4', '5', '6', '7',
-            '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'
-        };
-
         private String encode(String src, char[] passwd, MessageDigest md) {
             md.update(src.getBytes());
             if (passwd != null) {
@@ -201,15 +196,7 @@ public class B6870935 {
                 Arrays.fill(passwdBytes, (byte)0x00);
             }
             byte[] digest = md.digest();
-
-            StringBuffer res = new StringBuffer(digest.length * 2);
-            for (int i = 0; i < digest.length; i++) {
-                int hashchar = ((digest[i] >>> 4) & 0xf);
-                res.append(charArray[hashchar]);
-                hashchar = (digest[i] & 0xf);
-                res.append(charArray[hashchar]);
-            }
-            return res.toString();
+            return HexFormat.of().formatHex(digest);
         }
     }
 
diff --git a/test/jdk/java/net/HttpURLConnection/SetAuthenticator/HTTPTestServer.java b/test/jdk/java/net/HttpURLConnection/SetAuthenticator/HTTPTestServer.java
index a896142b513..91efe8d736b 100644
--- a/test/jdk/java/net/HttpURLConnection/SetAuthenticator/HTTPTestServer.java
+++ b/test/jdk/java/net/HttpURLConnection/SetAuthenticator/HTTPTestServer.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2016, 2019, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2016, 2021, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -52,6 +52,7 @@ import java.time.Instant;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Base64;
+import java.util.HexFormat;
 import java.util.List;
 import java.util.Objects;
 import java.util.Random;
@@ -582,11 +583,6 @@ public class HTTPTestServer extends HTTPTest {
 
         // Code stolen from DigestAuthentication:
 
-        private static final char charArray[] = {
-            '0', '1', '2', '3', '4', '5', '6', '7',
-            '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'
-        };
-
         private static String encode(String src, char[] passwd, MessageDigest md) {
             try {
                 md.update(src.getBytes("ISO-8859-1"));
@@ -601,15 +597,7 @@ public class HTTPTestServer extends HTTPTest {
                 Arrays.fill(passwdBytes, (byte)0x00);
             }
             byte[] digest = md.digest();
-
-            StringBuilder res = new StringBuilder(digest.length * 2);
-            for (int i = 0; i < digest.length; i++) {
-                int hashchar = ((digest[i] >>> 4) & 0xf);
-                res.append(charArray[hashchar]);
-                hashchar = (digest[i] & 0xf);
-                res.append(charArray[hashchar]);
-            }
-            return res.toString();
+            return HexFormat.of().formatHex(digest);
         }
 
         public static String computeDigest(boolean isRequest,
diff --git a/test/jdk/java/net/httpclient/DigestEchoServer.java b/test/jdk/java/net/httpclient/DigestEchoServer.java
index b84b0eb5225..92b96bea51c 100644
--- a/test/jdk/java/net/httpclient/DigestEchoServer.java
+++ b/test/jdk/java/net/httpclient/DigestEchoServer.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2018, 2019, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2018, 2021, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -54,6 +54,7 @@ import java.time.Instant;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Base64;
+import java.util.HexFormat;
 import java.util.List;
 import java.util.Locale;
 import java.util.Objects;
@@ -821,11 +822,6 @@ public abstract class DigestEchoServer implements HttpServerAdapters {
 
         // Code stolen from DigestAuthentication:
 
-        private static final char charArray[] = {
-            '0', '1', '2', '3', '4', '5', '6', '7',
-            '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'
-        };
-
         private static String encode(String src, char[] passwd, MessageDigest md) {
             try {
                 md.update(src.getBytes("ISO-8859-1"));
@@ -840,15 +836,7 @@ public abstract class DigestEchoServer implements HttpServerAdapters {
                 Arrays.fill(passwdBytes, (byte)0x00);
             }
             byte[] digest = md.digest();
-
-            StringBuilder res = new StringBuilder(digest.length * 2);
-            for (int i = 0; i < digest.length; i++) {
-                int hashchar = ((digest[i] >>> 4) & 0xf);
-                res.append(charArray[hashchar]);
-                hashchar = (digest[i] & 0xf);
-                res.append(charArray[hashchar]);
-            }
-            return res.toString();
+            return HexFormat.of().formatHex(digest);
         }
 
         public static String computeDigest(boolean isRequest,
diff --git a/test/jdk/java/util/Locale/SoftKeys.java b/test/jdk/java/util/Locale/SoftKeys.java
index 8e57ed8bb57..6e6a60fbdef 100644
--- a/test/jdk/java/util/Locale/SoftKeys.java
+++ b/test/jdk/java/util/Locale/SoftKeys.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2018, 2021, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -33,8 +33,6 @@ import java.util.*;
 
 public class SoftKeys {
 
-    private static final char[] CHARS = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' };
-
     public static void main(String[] args) {
         try {
             // With 4 characters in "language", we'll fill up a 16M heap quickly,
@@ -44,7 +42,7 @@ public class SoftKeys {
             // been cleared.
             for (int i = 0; i < 2; i++) {
                 for (int j = 0; j < 512*1024; j++) {
-                    new Locale(langForInt(j), "", "");
+                    new Locale(HexFormat.of().toHexDigits((short)j), "", "");
                 }
             }
         } catch (OutOfMemoryError e) {
@@ -57,14 +55,5 @@ public class SoftKeys {
             System.gc();
         }
     }
-
-    private static String langForInt(int val) {
-        StringBuilder buf = new StringBuilder(4);
-        buf.append(CHARS[(val >> 12) & 0xF]);
-        buf.append(CHARS[(val >>  8) & 0xF]);
-        buf.append(CHARS[(val >>  4) & 0xF]);
-        buf.append(CHARS[(val >>  0) & 0xF]);
-        return buf.toString();
-    }
 }
 
diff --git a/test/jdk/sun/net/www/protocol/http/DigestTest.java b/test/jdk/sun/net/www/protocol/http/DigestTest.java
index fe8249c1f98..b699c3ff476 100644
--- a/test/jdk/sun/net/www/protocol/http/DigestTest.java
+++ b/test/jdk/sun/net/www/protocol/http/DigestTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2001, 2019, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2001, 2021, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -172,11 +172,6 @@ class DigestServer extends Thread {
         return finalHash;
     }
 
-    private final static char charArray[] = {
-        '0', '1', '2', '3', '4', '5', '6', '7',
-        '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'
-    };
-
     private String encode(String src, char[] passwd, MessageDigest md) {
         md.update(src.getBytes());
         if (passwd != null) {
@@ -187,15 +182,7 @@ class DigestServer extends Thread {
             Arrays.fill(passwdBytes, (byte)0x00);
         }
         byte[] digest = md.digest();
-
-        StringBuffer res = new StringBuffer(digest.length * 2);
-        for (int i = 0; i < digest.length; i++) {
-            int hashchar = ((digest[i] >>> 4) & 0xf);
-            res.append(charArray[hashchar]);
-            hashchar = (digest[i] & 0xf);
-            res.append(charArray[hashchar]);
-        }
-        return res.toString();
+        return HexFormat.of().formatHex(digest);
     }
 
 }
-- 
GitLab