This is an automated email from the ASF dual-hosted git repository. markt pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/tomcat.git
commit bd23ba3b79f21210891f036e54c3b80886401ef0 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 6377416ea4..ab4a8c3287 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; @@ -38,7 +39,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; @@ -166,8 +166,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); @@ -264,7 +265,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 77501a4ffd..d656a564ae 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; @@ -47,7 +48,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; @@ -220,7 +220,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 e6376ce4b2..e84a309b7d 100644 --- a/java/org/apache/tomcat/websocket/WsWebSocketContainer.java +++ b/java/org/apache/tomcat/websocket/WsWebSocketContainer.java @@ -30,6 +30,7 @@ import java.nio.channels.AsynchronousSocketChannel; import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.Arrays; +import java.util.Base64; import java.util.Collections; import java.util.HashMap; import java.util.HashSet; @@ -66,7 +67,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; @@ -697,7 +697,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 814587390f..2c334d81be 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 jakarta.websocket.Extension; import jakarta.websocket.HandshakeResponse; import jakarta.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 bfebfc769e..1f364ba8fa 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 5475355907..d9f82d1de5 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 c0347756b9..ce54782903 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 d37e750482..821a0a6076 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 eb74714a71..21233bce05 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 953aa9a759..714ff14b90 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; @@ -59,7 +60,6 @@ import org.apache.coyote.http11.AbstractHttp11Protocol; 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; @@ -106,7 +106,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 8be61d7d88..797b5a0a52 100644 --- a/webapps/docs/changelog.xml +++ b/webapps/docs/changelog.xml @@ -132,6 +132,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 11.0.0-M19 (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