This is an automated email from the ASF dual-hosted git repository.

markt pushed a commit to branch 9.0.x
in repository https://gitbox.apache.org/repos/asf/tomcat.git

commit 9ce43c498064e54504c29af65d32cd815f1ee0f9
Author: Mark Thomas <ma...@apache.org>
AuthorDate: Tue Apr 16 15:31:37 2024 +0100

    Switch to the Base64 encoder and decoder provided by the JRE.
    
    This removes the dependency on the internal fork of Commons Codec.
---
 .../authenticator/SpnegoAuthenticator.java         |  9 +++----
 .../realm/MessageDigestCredentialHandler.java      |  6 ++---
 .../apache/coyote/http2/Http2UpgradeHandler.java   |  4 ++--
 .../http/fileupload/util/mime/MimeUtility.java     |  5 ++--
 .../tomcat/util/http/parser/StructuredField.java   |  4 ++--
 java/org/apache/tomcat/util/net/jsse/PEMFile.java  |  7 +++---
 .../tomcat/websocket/WsWebSocketContainer.java     |  4 ++--
 .../tomcat/websocket/server/UpgradeUtil.java       | 28 +++++++---------------
 .../authenticator/TestAuthInfoResponseHeaders.java |  4 ++--
 .../TestNonLoginAndBasicAuthenticator.java         |  4 ++--
 .../TestSSOnonLoginAndBasicAuthenticator.java      |  4 ++--
 .../core/TestPropertiesRoleMappingListener.java    |  4 ++--
 .../filters/TestRestCsrfPreventionFilter2.java     |  4 ++--
 test/org/apache/coyote/http2/Http2TestBase.java    |  4 ++--
 webapps/docs/changelog.xml                         |  8 +++++++
 15 files changed, 47 insertions(+), 52 deletions(-)

diff --git a/java/org/apache/catalina/authenticator/SpnegoAuthenticator.java 
b/java/org/apache/catalina/authenticator/SpnegoAuthenticator.java
index 08ae4e1426..7f7656dae4 100644
--- a/java/org/apache/catalina/authenticator/SpnegoAuthenticator.java
+++ b/java/org/apache/catalina/authenticator/SpnegoAuthenticator.java
@@ -22,6 +22,7 @@ import java.security.Principal;
 import java.security.PrivilegedAction;
 import java.security.PrivilegedActionException;
 import java.security.PrivilegedExceptionAction;
+import java.util.Base64;
 import java.util.LinkedHashMap;
 import java.util.regex.Pattern;
 
@@ -37,7 +38,6 @@ import org.apache.juli.logging.Log;
 import org.apache.juli.logging.LogFactory;
 import org.apache.tomcat.util.buf.ByteChunk;
 import org.apache.tomcat.util.buf.MessageBytes;
-import org.apache.tomcat.util.codec.binary.Base64;
 import org.apache.tomcat.util.compat.JreVendor;
 import org.ietf.jgss.GSSContext;
 import org.ietf.jgss.GSSCredential;
@@ -165,8 +165,9 @@ public class SpnegoAuthenticator extends AuthenticatorBase {
 
         authorizationBC.setOffset(authorizationBC.getOffset() + 10);
 
-        byte[] decoded = Base64.decodeBase64(authorizationBC.getBuffer(), 
authorizationBC.getOffset(),
-                authorizationBC.getLength());
+        byte[] encoded = new byte[authorizationBC.getLength()];
+        System.arraycopy(authorizationBC.getBuffer(), 0, encoded, 0, 
authorizationBC.getLength());
+        byte[] decoded = Base64.getDecoder().decode(encoded);
 
         if (getApplyJava8u40Fix()) {
             SpnegoTokenFixer.fix(decoded);
@@ -263,7 +264,7 @@ public class SpnegoAuthenticator extends AuthenticatorBase {
         }
 
         // Send response token on success and failure
-        response.setHeader(AUTH_HEADER_NAME, AUTH_HEADER_VALUE_NEGOTIATE + " " 
+ Base64.encodeBase64String(outToken));
+        response.setHeader(AUTH_HEADER_NAME, AUTH_HEADER_VALUE_NEGOTIATE + " " 
+ Base64.getEncoder().encodeToString(outToken));
 
         if (principal != null) {
             register(request, response, principal, Constants.SPNEGO_METHOD, 
principal.getName(), null);
diff --git a/java/org/apache/catalina/realm/MessageDigestCredentialHandler.java 
b/java/org/apache/catalina/realm/MessageDigestCredentialHandler.java
index 7945af8490..e3aa771d60 100644
--- a/java/org/apache/catalina/realm/MessageDigestCredentialHandler.java
+++ b/java/org/apache/catalina/realm/MessageDigestCredentialHandler.java
@@ -21,12 +21,12 @@ import java.nio.charset.Charset;
 import java.nio.charset.StandardCharsets;
 import java.security.NoSuchAlgorithmException;
 import java.util.Arrays;
+import java.util.Base64;
 
 import org.apache.juli.logging.Log;
 import org.apache.juli.logging.LogFactory;
 import org.apache.tomcat.util.buf.B2CConverter;
 import org.apache.tomcat.util.buf.HexUtils;
-import org.apache.tomcat.util.codec.binary.Base64;
 import org.apache.tomcat.util.security.ConcurrentMessageDigest;
 
 /**
@@ -110,7 +110,7 @@ public class MessageDigestCredentialHandler extends 
DigestCredentialHandlerBase
                 String base64ServerDigest = storedCredentials.substring(5);
                 byte[] userDigest = 
ConcurrentMessageDigest.digest(getAlgorithm(),
                         
inputCredentials.getBytes(StandardCharsets.ISO_8859_1));
-                String base64UserDigest = 
Base64.encodeBase64String(userDigest);
+                String base64UserDigest = 
Base64.getEncoder().encodeToString(userDigest);
 
                 return DigestCredentialHandlerBase.equals(base64UserDigest, 
base64ServerDigest, false);
             } else if (storedCredentials.startsWith("{SSHA}")) {
@@ -118,7 +118,7 @@ public class MessageDigestCredentialHandler extends 
DigestCredentialHandlerBase
                 // Need to convert the salt to bytes to apply it to the user's
                 // digested password.
                 String serverDigestPlusSalt = storedCredentials.substring(6);
-                byte[] serverDigestPlusSaltBytes = 
Base64.decodeBase64(serverDigestPlusSalt);
+                byte[] serverDigestPlusSaltBytes = 
Base64.getDecoder().decode(serverDigestPlusSalt);
 
                 // Extract the first 20 bytes containing the SHA-1 digest
                 final int digestLength = 20;
diff --git a/java/org/apache/coyote/http2/Http2UpgradeHandler.java 
b/java/org/apache/coyote/http2/Http2UpgradeHandler.java
index 1ba0001709..a50f62287d 100644
--- a/java/org/apache/coyote/http2/Http2UpgradeHandler.java
+++ b/java/org/apache/coyote/http2/Http2UpgradeHandler.java
@@ -20,6 +20,7 @@ import java.io.EOFException;
 import java.io.IOException;
 import java.nio.ByteBuffer;
 import java.nio.charset.StandardCharsets;
+import java.util.Base64;
 import java.util.Comparator;
 import java.util.HashSet;
 import java.util.Iterator;
@@ -46,7 +47,6 @@ import org.apache.coyote.http2.Http2Parser.Input;
 import org.apache.coyote.http2.Http2Parser.Output;
 import org.apache.juli.logging.Log;
 import org.apache.juli.logging.LogFactory;
-import org.apache.tomcat.util.codec.binary.Base64;
 import org.apache.tomcat.util.http.MimeHeaders;
 import org.apache.tomcat.util.http.parser.Priority;
 import org.apache.tomcat.util.log.UserDataHelper;
@@ -218,7 +218,7 @@ class Http2UpgradeHandler extends AbstractStream implements 
InternalHttpUpgradeH
                 // Process the initial settings frame
                 stream = getStream(1, true);
                 String base64Settings = 
stream.getCoyoteRequest().getHeader(HTTP2_SETTINGS_HEADER);
-                byte[] settings = Base64.decodeBase64URLSafe(base64Settings);
+                byte[] settings = 
Base64.getUrlDecoder().decode(base64Settings);
 
                 // Settings are only valid on stream 0
                 FrameType.SETTINGS.check(0, settings.length);
diff --git 
a/java/org/apache/tomcat/util/http/fileupload/util/mime/MimeUtility.java 
b/java/org/apache/tomcat/util/http/fileupload/util/mime/MimeUtility.java
index d55151401e..7debaf915e 100644
--- a/java/org/apache/tomcat/util/http/fileupload/util/mime/MimeUtility.java
+++ b/java/org/apache/tomcat/util/http/fileupload/util/mime/MimeUtility.java
@@ -20,12 +20,11 @@ import java.io.ByteArrayOutputStream;
 import java.io.IOException;
 import java.io.UnsupportedEncodingException;
 import java.nio.charset.StandardCharsets;
+import java.util.Base64;
 import java.util.HashMap;
 import java.util.Locale;
 import java.util.Map;
 
-import org.apache.tomcat.util.codec.binary.Base64;
-
 /**
  * Utility class to decode MIME texts.
  *
@@ -238,7 +237,7 @@ public final class MimeUtility {
             byte[] decodedData;
             // Base64 encoded?
             if (encoding.equals(BASE64_ENCODING_MARKER)) {
-                decodedData = Base64.decodeBase64(encodedText);
+                decodedData = Base64.getDecoder().decode(encodedText);
             } else if (encoding.equals(QUOTEDPRINTABLE_ENCODING_MARKER)) { // 
maybe quoted printable.
                 byte[] encodedData = 
encodedText.getBytes(StandardCharsets.US_ASCII);
                 QuotedPrintableDecoder.decode(encodedData, out);
diff --git a/java/org/apache/tomcat/util/http/parser/StructuredField.java 
b/java/org/apache/tomcat/util/http/parser/StructuredField.java
index ab31edfe99..f6900cb1fd 100644
--- a/java/org/apache/tomcat/util/http/parser/StructuredField.java
+++ b/java/org/apache/tomcat/util/http/parser/StructuredField.java
@@ -19,11 +19,11 @@ package org.apache.tomcat.util.http.parser;
 import java.io.IOException;
 import java.io.Reader;
 import java.util.ArrayList;
+import java.util.Base64;
 import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
 
-import org.apache.tomcat.util.codec.binary.Base64;
 import org.apache.tomcat.util.res.StringManager;
 
 /**
@@ -379,7 +379,7 @@ public class StructuredField {
             }
         }
 
-        return new SfByteSequence(Base64.decodeBase64(base64.toString()));
+        return new 
SfByteSequence(Base64.getDecoder().decode(base64.toString()));
     }
 
 
diff --git a/java/org/apache/tomcat/util/net/jsse/PEMFile.java 
b/java/org/apache/tomcat/util/net/jsse/PEMFile.java
index 8b5e8fdc61..d5bf84246e 100644
--- a/java/org/apache/tomcat/util/net/jsse/PEMFile.java
+++ b/java/org/apache/tomcat/util/net/jsse/PEMFile.java
@@ -39,6 +39,7 @@ import java.security.spec.PKCS8EncodedKeySpec;
 import java.security.spec.RSAPrivateCrtKeySpec;
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.Base64;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -53,7 +54,6 @@ import javax.crypto.spec.SecretKeySpec;
 import org.apache.tomcat.util.buf.Asn1Parser;
 import org.apache.tomcat.util.buf.Asn1Writer;
 import org.apache.tomcat.util.buf.HexUtils;
-import org.apache.tomcat.util.codec.binary.Base64;
 import org.apache.tomcat.util.file.ConfigFileLoader;
 import org.apache.tomcat.util.res.StringManager;
 import org.ietf.jgss.GSSException;
@@ -110,8 +110,7 @@ public class PEMFile {
         StringBuilder result = new StringBuilder();
         result.append(Part.BEGIN_BOUNDARY + Part.CERTIFICATE + 
Part.FINISH_BOUNDARY);
         result.append(System.lineSeparator());
-        Base64 b64 = new Base64(64);
-        result.append(b64.encodeAsString(certificate.getEncoded()));
+        
result.append(Base64.getMimeEncoder().encodeToString(certificate.getEncoded()));
         result.append(Part.END_BOUNDARY + Part.CERTIFICATE + 
Part.FINISH_BOUNDARY);
         return result.toString();
     }
@@ -250,7 +249,7 @@ public class PEMFile {
         public String ivHex = null;
 
         private byte[] decode() {
-            return Base64.decodeBase64(content);
+            return Base64.getMimeDecoder().decode(content);
         }
 
         public X509Certificate toCertificate() throws CertificateException {
diff --git a/java/org/apache/tomcat/websocket/WsWebSocketContainer.java 
b/java/org/apache/tomcat/websocket/WsWebSocketContainer.java
index 56dfa3e8f2..23211dbf82 100644
--- a/java/org/apache/tomcat/websocket/WsWebSocketContainer.java
+++ b/java/org/apache/tomcat/websocket/WsWebSocketContainer.java
@@ -34,6 +34,7 @@ import java.nio.charset.StandardCharsets;
 import java.security.KeyStore;
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.Base64;
 import java.util.Collections;
 import java.util.HashMap;
 import java.util.HashSet;
@@ -70,7 +71,6 @@ import org.apache.juli.logging.LogFactory;
 import org.apache.tomcat.InstanceManager;
 import org.apache.tomcat.InstanceManagerBindings;
 import org.apache.tomcat.util.buf.StringUtils;
-import org.apache.tomcat.util.codec.binary.Base64;
 import org.apache.tomcat.util.collections.CaseInsensitiveKeyMap;
 import org.apache.tomcat.util.res.StringManager;
 import org.apache.tomcat.util.security.KeyStoreUtil;
@@ -702,7 +702,7 @@ public class WsWebSocketContainer implements 
WebSocketContainer, BackgroundProce
     private static String generateWsKeyValue() {
         byte[] keyBytes = new byte[16];
         RANDOM.nextBytes(keyBytes);
-        return Base64.encodeBase64String(keyBytes);
+        return Base64.getEncoder().encodeToString(keyBytes);
     }
 
 
diff --git a/java/org/apache/tomcat/websocket/server/UpgradeUtil.java 
b/java/org/apache/tomcat/websocket/server/UpgradeUtil.java
index 96d7aaf943..e37f55bf4f 100644
--- a/java/org/apache/tomcat/websocket/server/UpgradeUtil.java
+++ b/java/org/apache/tomcat/websocket/server/UpgradeUtil.java
@@ -19,6 +19,7 @@ package org.apache.tomcat.websocket.server;
 import java.io.IOException;
 import java.nio.charset.StandardCharsets;
 import java.util.ArrayList;
+import java.util.Base64;
 import java.util.Collections;
 import java.util.Enumeration;
 import java.util.LinkedHashMap;
@@ -37,7 +38,6 @@ import javax.websocket.Extension;
 import javax.websocket.HandshakeResponse;
 import javax.websocket.server.ServerEndpointConfig;
 
-import org.apache.tomcat.util.codec.binary.Base64;
 import org.apache.tomcat.util.res.StringManager;
 import org.apache.tomcat.util.security.ConcurrentMessageDigest;
 import org.apache.tomcat.websocket.Constants;
@@ -226,16 +226,7 @@ public class UpgradeUtil {
 
     /*
      * Validate the key. It should be the base64 encoding of a random 16-byte 
value. 16-bytes are encoded in 24 base64
-     * characters, the last two of which must be ==.
-     *
-     * The validation isn't perfect:
-     *
-     * - it doesn't check the final non-'=' character is valid in the context 
of the number of bits it is meant to be
-     * encoding.
-     *
-     * - it doesn't check that the value is random and changes for each 
connection.
-     *
-     * Given that this header is for the benefit of the client, not the 
server, this should be good enough.
+     * characters.
      */
     private static boolean validateKey(String key) {
         if (key == null) {
@@ -246,17 +237,14 @@ public class UpgradeUtil {
             return false;
         }
 
-        char[] keyChars = key.toCharArray();
-        if (keyChars[22] != '=' || keyChars[23] != '=') {
-            return false;
-        }
-
-        for (int i = 0; i < 22; i++) {
-            if (!Base64.isInAlphabet(keyChars[i])) {
+        try {
+            byte[] decoded = Base64.getDecoder().decode(key);
+            if (decoded.length != 16) {
                 return false;
             }
+        } catch (IllegalArgumentException iae) {
+            return false;
         }
-
         return true;
     }
 
@@ -340,6 +328,6 @@ public class UpgradeUtil {
 
     private static String getWebSocketAccept(String key) {
         byte[] digest = 
ConcurrentMessageDigest.digestSHA1(key.getBytes(StandardCharsets.ISO_8859_1), 
WS_ACCEPT);
-        return Base64.encodeBase64String(digest);
+        return Base64.getEncoder().encodeToString(digest);
     }
 }
diff --git 
a/test/org/apache/catalina/authenticator/TestAuthInfoResponseHeaders.java 
b/test/org/apache/catalina/authenticator/TestAuthInfoResponseHeaders.java
index 302a140652..14b0aec823 100644
--- a/test/org/apache/catalina/authenticator/TestAuthInfoResponseHeaders.java
+++ b/test/org/apache/catalina/authenticator/TestAuthInfoResponseHeaders.java
@@ -18,6 +18,7 @@ package org.apache.catalina.authenticator;
 
 import java.nio.charset.StandardCharsets;
 import java.util.ArrayList;
+import java.util.Base64;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -34,7 +35,6 @@ import org.apache.catalina.startup.Tomcat;
 import org.apache.catalina.startup.TomcatBaseTest;
 import org.apache.catalina.valves.RemoteIpValve;
 import org.apache.tomcat.util.buf.ByteChunk;
-import org.apache.tomcat.util.codec.binary.Base64;
 import org.apache.tomcat.util.descriptor.web.LoginConfig;
 import org.apache.tomcat.util.descriptor.web.SecurityCollection;
 import org.apache.tomcat.util.descriptor.web.SecurityConstraint;
@@ -68,7 +68,7 @@ public class TestAuthInfoResponseHeaders extends 
TomcatBaseTest {
             String userCredentials = username + ":" + password;
             byte[] credentialsBytes =
                     userCredentials.getBytes(StandardCharsets.ISO_8859_1);
-            String base64auth = Base64.encodeBase64String(credentialsBytes);
+            String base64auth = 
Base64.getEncoder().encodeToString(credentialsBytes);
             credentials= method + " " + base64auth;
         }
 
diff --git 
a/test/org/apache/catalina/authenticator/TestNonLoginAndBasicAuthenticator.java 
b/test/org/apache/catalina/authenticator/TestNonLoginAndBasicAuthenticator.java
index 3a3abf03c3..2cbc03373d 100644
--- 
a/test/org/apache/catalina/authenticator/TestNonLoginAndBasicAuthenticator.java
+++ 
b/test/org/apache/catalina/authenticator/TestNonLoginAndBasicAuthenticator.java
@@ -18,6 +18,7 @@ package org.apache.catalina.authenticator;
 
 import java.nio.charset.StandardCharsets;
 import java.util.ArrayList;
+import java.util.Base64;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -33,7 +34,6 @@ import org.apache.catalina.startup.TesterServlet;
 import org.apache.catalina.startup.Tomcat;
 import org.apache.catalina.startup.TomcatBaseTest;
 import org.apache.tomcat.util.buf.ByteChunk;
-import org.apache.tomcat.util.codec.binary.Base64;
 import org.apache.tomcat.util.descriptor.web.LoginConfig;
 import org.apache.tomcat.util.descriptor.web.SecurityCollection;
 import org.apache.tomcat.util.descriptor.web.SecurityConstraint;
@@ -558,7 +558,7 @@ public class TestNonLoginAndBasicAuthenticator extends 
TomcatBaseTest {
             String userCredentials = username + ":" + password;
             byte[] credentialsBytes =
                     userCredentials.getBytes(StandardCharsets.ISO_8859_1);
-            String base64auth = Base64.encodeBase64String(credentialsBytes);
+            String base64auth = 
Base64.getEncoder().encodeToString(credentialsBytes);
             credentials= method + " " + base64auth;
         }
 
diff --git 
a/test/org/apache/catalina/authenticator/TestSSOnonLoginAndBasicAuthenticator.java
 
b/test/org/apache/catalina/authenticator/TestSSOnonLoginAndBasicAuthenticator.java
index 90f0652407..0074522b04 100644
--- 
a/test/org/apache/catalina/authenticator/TestSSOnonLoginAndBasicAuthenticator.java
+++ 
b/test/org/apache/catalina/authenticator/TestSSOnonLoginAndBasicAuthenticator.java
@@ -18,6 +18,7 @@ package org.apache.catalina.authenticator;
 
 import java.nio.charset.StandardCharsets;
 import java.util.ArrayList;
+import java.util.Base64;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -34,7 +35,6 @@ import org.apache.catalina.startup.TesterServletEncodeUrl;
 import org.apache.catalina.startup.Tomcat;
 import org.apache.catalina.startup.TomcatBaseTest;
 import org.apache.tomcat.util.buf.ByteChunk;
-import org.apache.tomcat.util.codec.binary.Base64;
 import org.apache.tomcat.util.descriptor.web.LoginConfig;
 import org.apache.tomcat.util.descriptor.web.SecurityCollection;
 import org.apache.tomcat.util.descriptor.web.SecurityConstraint;
@@ -668,7 +668,7 @@ public class TestSSOnonLoginAndBasicAuthenticator extends 
TomcatBaseTest {
             String userCredentials = username + ":" + password;
             byte[] credentialsBytes =
                     userCredentials.getBytes(StandardCharsets.ISO_8859_1);
-            String base64auth = Base64.encodeBase64String(credentialsBytes);
+            String base64auth = 
Base64.getEncoder().encodeToString(credentialsBytes);
             credentials= method + " " + base64auth;
         }
 
diff --git 
a/test/org/apache/catalina/core/TestPropertiesRoleMappingListener.java 
b/test/org/apache/catalina/core/TestPropertiesRoleMappingListener.java
index 23e9b79fb9..a1d7137dae 100644
--- a/test/org/apache/catalina/core/TestPropertiesRoleMappingListener.java
+++ b/test/org/apache/catalina/core/TestPropertiesRoleMappingListener.java
@@ -21,6 +21,7 @@ import java.io.IOException;
 import java.nio.charset.StandardCharsets;
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.Base64;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -38,7 +39,6 @@ import org.apache.catalina.startup.TesterMapRealm;
 import org.apache.catalina.startup.Tomcat;
 import org.apache.catalina.startup.TomcatBaseTest;
 import org.apache.tomcat.util.buf.ByteChunk;
-import org.apache.tomcat.util.codec.binary.Base64;
 import org.apache.tomcat.util.descriptor.web.LoginConfig;
 import org.apache.tomcat.util.descriptor.web.SecurityCollection;
 import org.apache.tomcat.util.descriptor.web.SecurityConstraint;
@@ -160,7 +160,7 @@ public class TestPropertiesRoleMappingListener extends 
TomcatBaseTest {
         Map<String, List<String>> reqHead = new HashMap<>();
         List<String> head = new ArrayList<>();
         head.add(HttpServletRequest.BASIC_AUTH + " " +
-                
Base64.encodeBase64String(credentials.getBytes(StandardCharsets.ISO_8859_1)));
+                
Base64.getEncoder().encodeToString(credentials.getBytes(StandardCharsets.ISO_8859_1)));
         reqHead.put("Authorization", head);
         int rc = getUrl("http://localhost:"; + getPort() + path, out, reqHead, 
null);
         Assert.assertEquals(statusCode, rc);
diff --git 
a/test/org/apache/catalina/filters/TestRestCsrfPreventionFilter2.java 
b/test/org/apache/catalina/filters/TestRestCsrfPreventionFilter2.java
index 0f28c93fad..32e21b423e 100644
--- a/test/org/apache/catalina/filters/TestRestCsrfPreventionFilter2.java
+++ b/test/org/apache/catalina/filters/TestRestCsrfPreventionFilter2.java
@@ -19,6 +19,7 @@ package org.apache.catalina.filters;
 import java.io.IOException;
 import java.nio.charset.StandardCharsets;
 import java.util.ArrayList;
+import java.util.Base64;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -39,7 +40,6 @@ import org.apache.catalina.authenticator.BasicAuthenticator;
 import org.apache.catalina.startup.Tomcat;
 import org.apache.catalina.startup.TomcatBaseTest;
 import org.apache.tomcat.util.buf.ByteChunk;
-import org.apache.tomcat.util.codec.binary.Base64;
 import org.apache.tomcat.util.descriptor.web.FilterDef;
 import org.apache.tomcat.util.descriptor.web.FilterMap;
 import org.apache.tomcat.util.descriptor.web.LoginConfig;
@@ -313,7 +313,7 @@ public class TestRestCsrfPreventionFilter2 extends 
TomcatBaseTest {
             password = aPassword;
             String userCredentials = username + ":" + password;
             byte[] credentialsBytes = 
userCredentials.getBytes(StandardCharsets.ISO_8859_1);
-            String base64auth = Base64.encodeBase64String(credentialsBytes);
+            String base64auth = 
Base64.getEncoder().encodeToString(credentialsBytes);
             credentials = method + " " + base64auth;
         }
 
diff --git a/test/org/apache/coyote/http2/Http2TestBase.java 
b/test/org/apache/coyote/http2/Http2TestBase.java
index 9341ea68b6..82dc91726f 100644
--- a/test/org/apache/coyote/http2/Http2TestBase.java
+++ b/test/org/apache/coyote/http2/Http2TestBase.java
@@ -29,6 +29,7 @@ import java.net.SocketException;
 import java.nio.ByteBuffer;
 import java.nio.charset.StandardCharsets;
 import java.util.ArrayList;
+import java.util.Base64;
 import java.util.Collection;
 import java.util.List;
 import java.util.Locale;
@@ -57,7 +58,6 @@ import org.apache.catalina.util.IOTools;
 import org.apache.coyote.http2.HpackDecoder.HeaderEmitter;
 import org.apache.coyote.http2.Http2Parser.Input;
 import org.apache.coyote.http2.Http2Parser.Output;
-import org.apache.tomcat.util.codec.binary.Base64;
 import org.apache.tomcat.util.compat.JrePlatform;
 import org.apache.tomcat.util.http.FastHttpDateFormat;
 import org.apache.tomcat.util.http.MimeHeaders;
@@ -104,7 +104,7 @@ public abstract class Http2TestBase extends TomcatBaseTest {
 
     static {
         byte[] empty = new byte[0];
-        EMPTY_HTTP2_SETTINGS_HEADER = "HTTP2-Settings: " + 
Base64.encodeBase64URLSafeString(empty) + "\r\n";
+        EMPTY_HTTP2_SETTINGS_HEADER = "HTTP2-Settings: " + 
Base64.getUrlEncoder().encodeToString(empty) + "\r\n";
     }
 
     protected static final String TRAILER_HEADER_NAME = "x-trailertest";
diff --git a/webapps/docs/changelog.xml b/webapps/docs/changelog.xml
index 9e62e190f7..95655b67a4 100644
--- a/webapps/docs/changelog.xml
+++ b/webapps/docs/changelog.xml
@@ -127,6 +127,14 @@
       </fix>
     </changelog>
   </subsection>
+  <subsection name="Other">
+    <changelog>
+      <update>
+        Switch to using the Base64 encoder and decoder provided by the JRE
+        rather than the version provided by Commons Codec. (markt)
+      </update>
+    </changelog>
+  </subsection>
 </section>
 <section name="Tomcat 9.0.88 (remm)" rtext="release in progress">
   <subsection name="Catalina">


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org

Reply via email to