<?xml version="1.0" encoding="UTF-8"?>
<!--
  Licensed to the Apache Software Foundation (ASF) under one or more
  contributor license agreements.  See the NOTICE file distributed with
  this work for additional information regarding copyright ownership.
  The ASF licenses this file to You under the Apache License, Version 2.0
  (the "License"); you may not use this file except in compliance with
  the License.  You may obtain a copy of the License at

      http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License.
-->
<!DOCTYPE document [
  <!ENTITY project SYSTEM "project.xml">

  <!-- DTD is used to validate changelog structure at build time. BZ 64931. -->

  <!ELEMENT document (project?, properties, body)>
  <!ATTLIST document url CDATA #REQUIRED>

  <!-- body and title are used both in project.xml and in this document -->
  <!ELEMENT body ANY>
  <!ELEMENT title (#PCDATA)>

  <!-- Elements of project.xml -->
  <!ELEMENT project (title, logo, body)>
  <!ATTLIST project name CDATA #REQUIRED>
  <!ATTLIST project href CDATA #REQUIRED>

  <!ELEMENT logo (#PCDATA)>
  <!ATTLIST logo href CDATA #REQUIRED>

  <!ELEMENT menu (item+)>
  <!ATTLIST menu name CDATA #REQUIRED>

  <!ELEMENT item EMPTY>
  <!ATTLIST item name CDATA #REQUIRED>
  <!ATTLIST item href CDATA #REQUIRED>

  <!-- Elements of this document -->
  <!ELEMENT properties (author*, title, no-comments) >
  <!ELEMENT author (#PCDATA)>
  <!ATTLIST author email CDATA #IMPLIED>
  <!ELEMENT no-comments EMPTY>

  <!ELEMENT section (subsection)*>
  <!ATTLIST section name CDATA #REQUIRED>
  <!ATTLIST section rtext CDATA #IMPLIED>

  <!ELEMENT subsection (changelog+)>
  <!ATTLIST subsection name CDATA #REQUIRED>

  <!ELEMENT changelog (add|update|fix|scode|docs|design)*>
  <!ELEMENT add ANY>
  <!ELEMENT update ANY>
  <!ELEMENT fix ANY>
  <!ELEMENT scode ANY>
  <!ELEMENT docs ANY>
  <!ELEMENT design ANY>

  <!ELEMENT bug (#PCDATA)>
  <!ELEMENT rev (#PCDATA)>
  <!ELEMENT pr (#PCDATA)>

  <!-- Random HTML markup tags. Add more here as needed. -->
  <!ELEMENT a (#PCDATA)>
  <!ATTLIST a href CDATA #REQUIRED>
  <!ATTLIST a rel CDATA #IMPLIED>

  <!ELEMENT b (#PCDATA)>
  <!ELEMENT code (#PCDATA)>
  <!ELEMENT em (#PCDATA)>
  <!ELEMENT strong (#PCDATA)>
  <!ELEMENT tt (#PCDATA)>
]>
<?xml-stylesheet type="text/xsl" href="tomcat-docs.xsl"?>
<document url="changelog.html">

  &project;

  <properties>
    <title>Changelog</title>
    <no-comments />
  </properties>

<body>
<!--
  Subsection ordering:
  General, Catalina, Coyote, Jasper, Cluster, WebSocket, Web applications,
  Extras, Tribes, jdbc-pool, Other

  Item Ordering:

  Fixes having an issue number are sorted by their number, ascending.

  There is no ordering by add/update/fix/scode/docs/design.

  Other fixed issues are added to the end of the list, chronologically.
  They eventually become mixed with the numbered issues (i.e., numbered
  issues do not "pop up" wrt. others).
-->
<section name="Tomcat 10.1.54 (schultz)" rtext="">
  <subsection name="Catalina">
    <changelog>
      <fix>
        Add escaping for URI and query string in the access log. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Coyote">
    <changelog>
      <update>
        Align buffer reuse of the OpenSSLEngine for tomcat-native with the FFM
        code. (remm)
      </update>
      <fix>
        Fix an HTTP/2 header frame parsing bug that could result in a connection
        being closed without a <code>GOAWAY</code> frame if an invalid
        <code>HEADERS</code> frame was received. (markt)
      </fix>
      <fix>
        <bug>69982</bug>: Fix a bug in the non-blocking flushing code for
        NIO+TLS that meant that a response may not be fully written until the
        connection is closed. Pull request <pr>966</pr> provided by Phil Clay.
        (markt)
      </fix>
      <fix>
        Ensure the HTTP/2 request header read buffer is reset (including
        restoration to default size) after a stream reset. (markt)
      </fix>
      <add>
        Provide trailer field filtering equivalent to that provided for
        non-trailer fields. Control characters (excluding TAB), and characters
        with code points above 255 will be replaced with a space. (markt)
      </add>
      <fix>
        Align OpenSSl FFM behaviour with Tomcat Native for various OCSP edge
        cases. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Cluster">
    <changelog>
      <fix>
        Reduce log verbosity of the Kubernetes connection attempts and failure.
        (remm)
      </fix>
      <fix>
        Better error handling for the <code>EncryptInterceptor</code>. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Other">
    <changelog>
      <update>
        Update bnd to 7.2.3. (markt)
      </update>
      <update>
        Improvements to French translations. (remm)
      </update>
      <update>
        Improvements to Japanese translations provided by tak7iji. (markt)
      </update>
    </changelog>
  </subsection>
</section>
<section name="Tomcat 10.1.53 (schultz)" rtext="2026-03-23">
  <subsection name="Catalina">
    <changelog>
      <fix>
        <bug>69967</bug>: Fix inconsistencies related to
        <code>Content-Length</code> and <code>Content-Type</code> headers when
        accessed using the <code>getHeader</code> method and similar. (remm)
      </fix>
      <fix>
        <bug>69940</bug>: Improve redirect handling in the
        <code>LoadBalancerDrainingValve</code>. (schultz)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Coyote">
    <changelog>
      <add>
        Add an HTTP configuration setting, <code>noCompressionEncodings</code>,
        that can be used to control which content encodings will not be
        compressed when compression is enabled. Based on pull request
        <pr>914</pr> by Long9725. (markt)
      </add>
      <fix>
        Add size limit for OCSP responses. Based on code submitted by Chenjp.
        (remm)
      </fix>
      <fix>
        To maintain the documented alignment with the OpenSSL development
        branch, the use of the aliases <code>SSLv3</code>, <code>EXPORT</code>,
        <code>EXPORT40</code>, <code>EXPORT56</code>, <code>KRB5</code>,
        <code>kFZA</code>, <code>aFZA</code>, <code>eFZA</code> and
        <code>FZA</code> are no longer supported when setting the
        <code>ciphers</code> attribute of an <code>SSLHostConfig</code> element.
        (markt)
      </fix>
      <fix>
        To maintain the documented alignment with the OpenSSL development
        branch, add support for the aliases <code>ARIAGCM</code> and
        <code>CBC</code>when setting the <code>ciphers</code> attribute of
        an <code>SSLHostConfig</code> element. (markt)
      </fix>
      <add>
        <bug>69870</bug>: Add a <code>drainTimeout</code> to the HTTP/2
        <code>UpgradeProtocol</code> element to allow configuration of an
        time between the two final <code>GOAWAY</code> frames sent by Tomcat
        when closing am HTTP/2 connection. Pull request <pr>917</pr> provided by
        Kai Burjack. (markt)
      </add>
      <update>
        Update the minimum recommended version of Tomcat Native so that users of
        1.3.x are recommended to update to 2.0.x. (markt)
      </update>
      <fix>
        Respect the value for the <code>jdk.tls.namedGroups</code> system
        property as the default value for the configured group list on the
        Connector. (remm)
      </fix>
      <fix>
        <bug>69964</bug>: Respect the configured cipher order, which was no
        longer respected following the addition of TLS 1.3 specific cipher
        configuration. TLS 1.3 ciphers will always be first in the list. (remm)
      </fix>
      <fix>
        Free the x509 object in the FFM code when getting the peer certificate
        if getting the bytes from the certificate somehow fails.
        Pull request <pr>951</pr> provided by Chenjp. (remm)
      </fix>
      <fix>
        Improve HPACK exception use, making sure <code>HpackException</code>
        is thrown instead of unexpected types. (remm)
      </fix>
      <fix>
        Update the parser for the HTTP <code>Host</code> header and
        <code>:authority</code> pseudo header to convert the port, if any, to an
        <code>Integer</code> rather than a <code>Long</code> to be consistent
        with how port is exposed in the Servlet API. (markt)
      </fix>
      <add>
        To aid the migration from the single <code>ciphers</code> configuration
        attribute to the use of <code>ciphers</code> and
        <code>cipherSuites</code>, TLS 1.3 cipher suites listed in the
        <code>ciphers</code> attribute will be removed from the
        <code>ciphers</code> attribute and added to the end of the
        <code>cipherSuites</code> attribute. This behaviour will be removed in
        Tomcat 12.0.x onwards. (markt)
      </add>
      <scode>
        Replace the external OpenSSL based OCSP responder used during unit tests
        with a Bouncy Castle based, in-process Java OCSP responder. (markt)
      </scode>
      <fix>
        Relax HTTP/2 header validation and respond to invalid requests with a
        stream reset or a 400 response as appropriate rather then with a
        connection reset. (markt)
      </fix>
      <fix>
        Add validation of chunk extensions for chunked transfer encoding.
        (markt)
      </fix>
      <update>
        Update the recommended version for Tomcat Native 2.x to 2.0.14. (markt)
      </update>
      <fix>
        Align the FFM handling of OCSP <code>TRY_LATER</code> responses with
        Tomcat Native. (remm)
      </fix>
      <fix>
        Free CA certificate after calling <code>SSL_CTX_add_client_CA</code>
        in the FFM code. Based on code from PR 44 from tomcat-native. (remm)
      </fix>
      <fix>
        Free certificate chain if an error occurs, in the FFM code. (remm)
      </fix>
      <fix>
        Report handshake issues as <code>SSLException</code> in the FFM
        code, rather than <code>IllegalStateException</code>. (remm)
      </fix>
      <fix>
        Fix case sensitive handling of the protocol host name. (remm)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Jasper">
    <changelog>
      <fix>
        <bug>69948</bug>: Avoid ArrayOutOfBoundsException instead of
        PropertyNotFoundException when generating a properties not found
        exception in AstValue. Based on <pr>950</pr> submitted by Jérôme
        Besnard. (remm)
      </fix>
      <add>
        Add support for specifying Java 27 (with the value <code>27</code>) as
        the compiler source and/or compiler target for JSP compilation. If used
        with an Eclipse JDT compiler version that does not support these values,
        a warning will be logged and the default will be used.
        (markt)
      </add>
    </changelog>
  </subsection>
  <subsection name="Cluster">
    <changelog>
      <fix>
        <bug>69970</bug>: Support raw IPv6 in Kubernetes membership provider
        for the service host. (remm)
      </fix>
      <add>
        Add support for new algorithms provided by JPA providers to the
        <code>EncyptInterceptor</code>. (markt)
      </add>
    </changelog>
  </subsection>
  <subsection name="WebSocket">
    <changelog>
      <fix>
        <bug>69972</bug>: Remove unwanted space in DIGEST authorization header.
        Patch submitted by Stefan Kalscheuer in <pr>957</pr>. (remm)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Web applications">
    <changelog>
      <add>
        <bug>69931</bug>: Add &lt;label&gt; for fields in the HTML manager
        application. Patch provided by yukitidev. (schultz)
      </add>
    </changelog>
  </subsection>
  <subsection name="Other">
    <changelog>
      <update>
        Update the internal fork of Apache Commons BCEL to 6.12.0. (markt)
      </update>
      <update>
        Update Tomcat Native to 2.0.14. (markt)
      </update>
      <update>
        Update Objenesis to 3.5. (markt)
      </update>
      <update>
        Update Byte Buddy to 1.18.7. (markt)
      </update>
      <update>
        Update BND to 7.2.1. (markt)
      </update>
      <update>
        Improvements to French translations. (remm)
      </update>
      <update>
        Improvements to Chinese translations provided by eaststrongox. (markt)
      </update>
      <update>
        Improvements to Japanese translations provided by tak7iji. (markt)
      </update>
    </changelog>
  </subsection>
</section>
<section name="Tomcat 10.1.52 (schultz)" rtext="release in progress">
  <subsection name="Coyote">
    <changelog>
      <fix>
        <bug>69936</bug>: Fix bug in previous fix for Tomcat Native crashes on
        shutdown that triggered a significant memory leak. Patch provided by
        Wes. (markt)
      </fix>
      <fix>
        <bug>69938</bug>: Avoid changing the closed state of TLS channel when
        resetting it after close. (remm)
      </fix>
    </changelog>
  </subsection>
</section>
<section name="Tomcat 10.1.51 (schultz)" rtext="not released">
  <subsection name="Catalina">
    <changelog>
      <fix>
        <bug>69623</bug>: Additional fix for the long standing regression that
        meant that calls to <code>ClassLoader.getResource().getContent()</code>
        failed when made from within a web application with resource caching
        enabled if the target resource was packaged in a JAR file. (markt)
      </fix>
      <fix>
        Pull request <pr>923</pr>: Avoid adding multiple CSRF tokens to a URL in
        the <code>CsrfPreventionFilter</code>. (schultz)
      </fix>
      <fix>
        <bug>69918</bug>: Ensure request parameters are correctly parsed for
        HTTP/2 requests when the content-length header is not set. (dsoumis)
      </fix>
      <update>
        Enable minimum and recommended Tomcat Native versions to be set
        separately for Tomcat Native 1.x and 2.x. Update the minimum and
        recommended versions for Tomcat Native 1.x to 1.3.4. Update the minimum
        and recommended versions for Tomcat Native 2.x to 2.0.12. (markt)
      </update>
      <add>
        Add a new <code>ssoReauthenticationMode</code> to the Tomcat provided
        Authenticators that provides a per Authenticator override of the SSO
        Valve <code>requireReauthentication</code> attribute. (markt)
      </add>
      <fix>
        Ensure URL encoding errors in the Rewrite Valve trigger an exception
        rather than silently using a replacement character. (markt)
      </fix>
      <fix>
        <bug>69932</bug>: Fix request end access log pattern regression,
        which would log the start time of the request instead. (remm)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Coyote">
    <changelog>
      <fix>
        Avoid possible NPEs when using a TLS enabled custom connector. (remm)
      </fix>
      <fix>
        Improve warnings when setting ciphers lists in the FFM code, mirroring
        the tomcat-native changes. (remm)
      </fix>
      <fix>
        <bug>69910</bug>: Dereference TLS objects right after closing a socket
        to improve memory efficiency. (remm)
      </fix>
      <fix>
        Relax the JSSE vs OpenSSL configuration style checks on
        <code>SSLHostConfig</code> to reflect the existing implementation that
        allows one configuration style to be used for the trust attributes and a
        different style for all the other attributes. (markt)
      </fix>
      <fix>
        Better warning message when <code>OpenSSLConf</code> configuration
        elements are used with a JSSE TLS implementation. (markt)
      </fix>
      <fix>
        When using OpenSSL via FFM, don't log a warning about missing CA
        certificates unless CA certificates were configured and the
        configuration failed. (markt)
      </fix>
      <add>
        For configuration consistency between OpenSSL and JSSE TLS
        implementations, TLSv1.3 cipher suites included in the
        <code>ciphers</code> attribute of an <code>SSLHostConfig</code> are now
        always ignored (previously they would be ignored with OpenSSL
        implementations and used with JSSE implementations) and a warning is
        logged that the cipher suite has been ignored. (markt)
      </add>
      <add>
        Add the <code>ciphersuite</code> attribute to
        <code>SSLHostConfig</code> to configure the TLSv1.3 cipher suites.
        (markt)
      </add>
      <add>
        Add OCSP support to JSSE based TLS connectors and make the use of OCSP
        configurable per connector for both JSSE and OpenSSL based TLS
        implementations. Align the checks performed by OpenSSL with those
        performed by JSSE. (markt)
      </add>
      <add>
        Add support for soft failure of OCSP checks with soft failure support
        disabled by default. (markt)
      </add>
      <add>
        Add support for configuring the verification flags passed to
        <code>OCSP_basic_verify</code> when using an OpenSSL based TLS
        implementation. (markt)
      </add>
      <fix>
        Fix OpenSSL FFM code compatibility with LibreSSL versions below 3.5.
        (remm)
      </fix>
      <fix>
        Prevent concurrent release of <code>OpenSSLEngine</code> resources and
        the termination of the Tomcat Native library as it can cause crashes
        during Tomcat shutdown. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Jasper">
    <changelog>
      <fix>
        <bug>69333</bug>: Correct a regression in the previous fix for
        <bug>69333</bug> and ensure that <code>reuse()</code> or
        <code>release()</code> is always called for a tag. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Cluster">
    <changelog>
      <add>
        <bug>62814</bug>: Document that human-readable names may be used for
        <code>mapSendOptions</code> and align documentation with
        <code>channelSendOptions</code>. Based on pull request <pr>929</pr> by
        archan0621. (markt)
      </add>
    </changelog>
  </subsection>
  <subsection name="WebSocket">
    <changelog>
      <fix>
        <bug>69920</bug>: When attempting to write to a closed
        <code>Writer</code> or <code>OutputStream</code> obtained from a
        WebSocket session, throw an <code>IOException</code> rather than an
        <code>IllegalStateExcpetion</code> as required by <code>Writer</code>
        and strongly suggested by <code>OutputStream</code>. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Other">
    <changelog>
      <update>
        Update the internal fork of Commons Pool to 2.13.1. (markt)
      </update>
      <update>
        Update the internal fork of Commons DBCP to 2.14.0. (markt)
      </update>
      <update>
        Update Commons Daemon to 1.5.1. (markt)
      </update>
      <update>
        Update ByteBuddy to 1.18.3. (markt)
      </update>
      <update>
        Update UnboundID to 7.0.4. (markt)
      </update>
      <update>
        Update Checkstyle to 12.3.1. (markt)
      </update>
      <add>
        Improvements to French translations. (markt)
      </add>
      <add>
        Improvements to Japanese translations provided by tak7iji. (markt)
      </add>
      <add>
        Improvements to Chinese translations provided by Yang. vincent.h and
        yong hu. (markt)
      </add>
      <update>
        Update Tomcat Native to 2.0.12. (markt)
      </update>
      <update>
        Update bnd to 7.2.0. (markt)
      </update>
      <add>
        Add property "gpg.sign.files" to optionally disable release artefact
        signing with GPG. (rjung)
      </add>
    </changelog>
  </subsection>
</section>
<section name="Tomcat 10.1.50 (schultz)" rtext="2025-12-08">
  <subsection name="General">
    <changelog>
      <add>
        Add <code>test.silent</code> property to suppress JUnit console output
        during test execution. Useful for cleaner console output when running
        tests with multiple threads. (csutherl)
      </add>
    </changelog>
  </subsection>
  <subsection name="Catalina">
    <changelog>
      <fix>
        <bug>69871</bug>: Increase log level to INFO for missing configuration
        for the rewrite valve. (remm)
      </fix>
      <fix>
        Add log warnings for additional Host <code>appBase</code> suspicious
        values. (remm)
      </fix>
      <fix>
        Remove hard dependency on tomcat-jni.jar for catalina.jar.
        <code>org.apache.catalina.Connector</code> no longer requires
        <code>org.apache.tomcat.jni.AprStatus</code> to be present. (markt)
      </fix>
      <add>
        Add the ability to use a custom function to generate the client
        identifier in the <code>CrawlerSessionManagerValve</code>. This is only
        available programmatically. Pull request <pr>902</pr> by Brian Matzon.
        (markt)
      </add>
      <fix>
        Change the SSO reauthentication behaviour for SPNEGO authentication so
        that a normal SPNEGO  authentication is performed if the SSL Valve is
        configured with reauthentication enabled. This is so that the delegated
        credentials will be available to the web application. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Coyote">
    <changelog>
      <fix>
        Don't log an incorrect certificate <code>KeyStore</code> location when
        creating a TLS connector if the <code>KeyStore</code> instance has been
        set directly on the connector. (markt)
      </fix>
      <fix>
        HTTP/0.9 only allows GET as the HTTP method. (remm)
      </fix>
      <add>
        Add <code>strictSni</code> attribute on the <code>Connector</code> to
        allow matching the <code>SSLHostConfig</code> configuration associated
        with the SNI host name to the <code>SSLHostConfig</code> configuration
        matched from the HTTP protocol host name. Non matching configurations
        will cause the request to be rejected. The attribute default value is
        <code>true</code>, enabling the matching. (remm)
      </add>
    </changelog>
  </subsection>
  <subsection name="Jasper">
    <changelog>
      <fix>
        <bug>69877</bug>: Catch IllegalArgumentException when processing URIs
        when creating the classpath to handle invalid URIs. (remm)
      </fix>
      <fix>
        Fix populating the classpath with the webapp classloader repositories.
        (remm)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Clustering">
    <changelog>
      <fix>
        Correct a regression introduced in 10.1.45 that broke some clustering
        configurations. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Web Applications">
    <changelog>
      <fix>
        Manager: Fix abrupt truncation of the HTML and JSON complete server
        status output if one or more of the web applications failed to start.
        (schultz)
      </fix>
      <add>
        Manager: Include web application state in the HTML and JSON complete
        server status output. (markt)
      </add>
      <add>
        Documentation: Expand the documentation to better explain when OCSP is
        supported and when it is not. (markt)
      </add>
    </changelog>
  </subsection>
  <subsection name="jdbc-pool">
    <changelog>
      <fix>
        <bug>64083</bug>: If the underlying connection has been closed, don't
        add it to the pool when it is returned. Pull request <pr>235</pr> by
        Alex Panchenko. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Other">
    <changelog>
      <add>
        Add test profile system for selective test execution. Profiles can be
        specified via <code>-Dtest.profile=&lt;name&gt;</code> to run specific
        test subsets without using patterns directly. Profile patterns are
        defined in <code>test-profiles.properties</code>. (csutherl)
      </add>
      <update>
        Update file extension to media type mappings to align with the current
        list used by the Apache Web Server (httpd). (markt)
      </update>
      <update>
        Update the packaged version of the Tomcat Migration Tool for Jakarta EE
        to 1.0.10. (markt)
      </update>
      <update>
        Update Commons Daemon to 1.5.0. (markt)
      </update>
      <update>
        Update Byte Buddy to 1.18.2. (markt)
      </update>
      <update>
        Update Checkstyle to 12.2.0. (markt)
      </update>
      <add>
        Improvements to Spanish translations provided by White Vogel. (markt)
      </add>
      <add>
        Improvements to French translations. (remm)
      </add>
      <add>
        Improvements to Japanese translations provided by tak7iji. (markt)
      </add>
    </changelog>
  </subsection>
</section>
<section name="Tomcat 10.1.49 (schultz)" rtext="2025-11-10">
  <subsection name="Catalina">
    <changelog>
      <fix>
        When generating the class path in the Loader, re-order the check on
        individual class path components to avoid a potential
        <code>NullPointerException</code>. Identified by Coverity Scan. (markt)
      </fix>
      <fix>
        Fix SSL socket factory configuration in the JNDI realm. Based on pull
        request <pr>915</pr> by Joshua Rogers. (remm)
      </fix>
      <update>
        Add an attribute, <code>digestInRfc3112Order</code>, to
        <code>MessageDigestCredentialHandler</code> to control the order in
        which the credential and salt are digested. By default, the current,
        non-RFC 3112 compliant, order of salt then credential will be used. This
        default will change in Tomcat 12 to the RFC 3112 compliant order of
        credential then salt. (markt)
      </update>
    </changelog>
  </subsection>
  <subsection name="Coyote">
    <changelog>
      <fix>
        Graceful failure for OCSP on BoringSSL in the FFM code. (remm)
      </fix>
      <fix>
        Fix use of <code>deferAccept</code> attribute in JMX, since it is
        normally only removed in Tomcat 11. (remm)
      </fix>
      <fix>
        <bug>69866</bug>: Fix a memory leak when using a trust store with the
        OpenSSL provider. Pull request <pr>912</pr> by aogburn. (markt)
      </fix>
      <fix>
        Fix potential crash on shutdown when a Connector depends on the Tomcat
        Native library. (markt)
      </fix>
      <fix>
        Fix AJP message length check. Pull request <pr>916</pr> by Joshua
        Rogers. (remm)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Jasper">
    <changelog>
      <fix>
        <bug>69862</bug>: Avoid NPE unwrapping Servlet exception which would
        hide some exception details. Patch submitted by Eric Blanquer. (remm)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Other">
    <changelog>
      <update>
        Update the internal fork of Apache Commons BCEL to 6.11.0. (markt)
      </update>
      <update>
        Update to Byte Buddy 1.17.8. (markt)
      </update>
      <update>
        Update to Checkstyle 12.1.1. (markt)
      </update>
      <update>
        Update to Jacoco 0.8.14. (markt)
      </update>
      <update>
        Update to SpotBugs 4.9.8. (markt)
      </update>
      <update>
        Update to JSign 7.4. (markt)
      </update>
      <update>
        Update Maven Resolver Ant Tasks to 1.6.0. (rjung)
      </update>
      <add>
        Improvements to French translations. (remm)
      </add>
      <add>
        Improvements to Japanese translations provided by tak7iji. (markt)
      </add>
    </changelog>
  </subsection>
</section>
<section name="Tomcat 10.1.48 (schultz)" rtext="2025-10-13">
  <subsection name="Catalina">
    <changelog>
      <fix>
        Log warnings when the SSO configuration does not comply with the
        documentation. (remm)
      </fix>
      <update>
        Deprecate the <code>RemoteAddrFilter</code> and
        <code>RemoteAddrValve</code> in favour of the
        <code>RemoteCIDRFilter</code> and <code>RemoteCIDRValve</code>. (markt)
      </update>
      <fix>
        <bug>69837</bug>: Fix corruption of the class path generated by the
        Loader when running on Windows. (markt)
      </fix>
      <fix>
        Reject requests that map to invalid Windows file names earlier. (markt)
      </fix>
      <fix>
        <bug>69839</bug>: Ensure that changes to session IDs (typically after
        authentication) are promulgated to the SSO Valve to ensure that SSO
        entries are fully clean-up on session expiration. Patch provided by Kim
        Johan Andersson. (markt)
      </fix>
      <fix>
        Fix a race condition in the creation of the storage location for the
        <code>FileStore</code>. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Coyote">
    <changelog>
      <fix>
        <bug>69848</bug>: Fix copy/paste errors in 10.1.47 that meant DELETE
        requests received via the AJP connector were processed as OPTIONS
        requests and PROPFIND requests were processed as TRACE. (markt)
      </fix>
      <fix>
        Various OCSP processing issues in the OpenSSL FFM code. (dsoumis)
      </fix>
    </changelog>
  </subsection>
  <subsection name="WebSocket">
    <changelog>
      <fix>
        <bug>69845</bug>: When using <code>permessage-deflate</code> with Java
        25 onwards, handle the underlying <code>Inflater</code> and/or
        <code>Deflater</code> throwing <code>IllegalStateException</code>
        when closed rather than <code>NullPointerException</code> as they do in
        Java 24 and earlier. (markt)
      </fix>
    </changelog>
  </subsection>
</section>
<section name="Tomcat 10.1.47 (schultz)" rtext="2025-10-07">
  <subsection name="Catalina">
    <changelog>
      <fix>
        HTTP methods are case-sensitive so always use case sensitive comparisons
        when comparing HTTP methods. (markt)
      </fix>
      <fix>
        <bug>69814</bug>: Ensure that <code>HttpSession.isNew()</code> returns
        <code>false</code> once the client has joined the session. (markt)
      </fix>
      <fix>
        Further performance improvements for ParameterMap. (jengebr/markt)
      </fix>
      <scode>
        Refactor access log time stamps to be based on the <code>Instant</code>
        request processing starts. (markt)
      </scode>
      <fix>
        Fix a case-sensitivity issue in the trailer header allow list. (markt)
      </fix>
      <fix>
        Be proactive in cleaning up temporary files after a failed multi-part
        upload rather than waiting for GC to do it. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Coyote">
    <changelog>
      <update>
        Add specific certificate selection code for TLS 1.3 supporting post
        quantum cryptography. Certificates defined with type
        <code>MLDSA</code> will be selected depending on the TLS client hello.
        (remm)
      </update>
      <update>
        Add <code>groups</code> attribute on <code>SSLHostConfig</code>
        allowing to restrict which groups can be enabled on the SSL engine.
        (remm)
      </update>
      <add>
        Optimize the conversion of HTTP method from byte form to String form.
        (markt)
      </add>
      <fix>
        Store HTTP request headers using the original case for the header name
        rather than forcing it to lower case. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Cluster">
    <changelog>
      <fix>
        Prevent the channel configuration (sender, receiver, membership service)
        from being changed unless the channel is fully stopped. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Web applications">
    <changelog>
      <fix>
        Documentation. Clarify the purpose of the <code>maxPostSize</code>
        attribute of the <code>Connector</code> element. (markt)
      </fix>
      <fix>
        Avoid NPE in manager webapp displaying certificate information. (remm)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Other">
    <changelog>
      <update>
        Update Byte Buddy to 1.17.7. (markt)
      </update>
      <update>
        Update Checkstyle to 11.1.0. (markt)
      </update>
      <update>
        Update SpotBugs to 4.9.6. (markt)
      </update>
      <update>
        Update Jsign to 7.2. (markt)
      </update>
      <add>
        Improvements to Russian translations provided by usmazat. (markt)
      </add>
      <add>
        Improvements to French translations. (remm)
      </add>
      <add>
        Improvements to Japanese translations provided by tak7iji. (markt)
      </add>
      <update>
        Minor refactoring in JULI loggers. Patch provided by minjund. (schultz)
      </update>
    </changelog>
  </subsection>
</section>
<section name="Tomcat 10.1.46 (schultz)" rtext="2025-09-12">
  <subsection name="Catalina">
    <changelog>
      <update>
        Change the digest used to calculate strong ETags (if enabled) for the
        default Servlet from SHA-1 to SHA-256 to align with the recommendation
        in RFC 9110 that hash functions used to generate strong ETags should be
        collision resistant. (markt)
      </update>
      <fix>
        Correct a regression in the fix for <bug>69781</bug> that broke
        <code>FileStore</code>. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Coyote">
    <changelog>
      <update>
        Add hybrid PQC support to OpenSSL, based on code from
        <code>mod_ssl</code>. Using this OpenSSL specific code path,
        additional PQC certificates defined with type <code>MLDSA</code> are
        added to contexts which use classic certificates. (jfclere/remm)
      </update>
    </changelog>
  </subsection>
</section>
<section name="Tomcat 10.1.45 (schultz)" rtext="2025-09-08">
  <subsection name="Catalina">
    <changelog>
      <scode>
        Remove a number of unnecessary packages from the catalina-deployer.jar.
        (markt)
      </scode>
      <fix>
        <bug>69781</bug>: Fix concurrent access issues in the session
        <code>FileStore</code> implementation that were causing lost sessions
        when the store was used with the <code>PersistentValve</code>. Based on
        pull request <pr>882</pr> by Aaron Ogburn. (markt)
      </fix>
      <fix>
        Fix handling of <code>QSA</code> and <code>QSD</code> flags in
        <code>RewriteValve</code>. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Coyote">
    <changelog>
      <fix>
        Ensure keys are handed out to OpenSSL even if <code>PEMFile</code>
        fails to process it, with appropriate logging. (remm)
      </fix>
      <fix>
        Add new <code>ML-DSA</code> key algorithm to <code>PEMFile</code>
        and improve reporting when reading a key fails. (remm)
      </fix>
      <fix>
        Fix possible early timeouts for network operations caused by a spurious
        wake-up of a waiting thread. Found by Coverity Scan. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Cluster">
    <changelog>
      <fix>
        Handle spurious wake-ups during leader election for
        <code>NonBlockingCoordinator</code>. (markt)
      </fix>
      <fix>
        Handle spurious wake-ups during sending of messages by
        <code>RpcChannel</code>. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name = "Other">
    <changelog>
      <scode>
        Review logging and include the full stack trace and exception message
        by default rather then just the exception message when logging an error
        or warning in response to an exception. (markt)
      </scode>
      <add>
        Add escaping to log formatters to align with JSON formatter. (markt)
      </add>
      <update>
        Update Checkstyle to 11.0.0. (markt)
      </update>
    </changelog>
  </subsection>
</section>
<section name="Tomcat 10.1.44 (schultz)" rtext="2025-08-07">
  <subsection name="Catalina">
    <changelog>
      <fix>
        Fix bloom filter population for archive indexing when using a packed
        WAR containing one or more JAR files. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Coyote">
    <changelog>
      <fix>
        <bug>69748</bug>: Add missing call to set keep-alive timeout when using
        HTTP/1.1 following an async request, which was present for AJP.
        (remm/markt)
      </fix>
      <fix>
        <bug>69762</bug>: Fix possible overflow during HPACK decoding of
        integers. Note that the maximum permitted value of an HPACK decoded
        integer is <code>Integer.MAX_VALUE</code>. (markt)
      </fix>
      <fix>
        Update the HTTP/2 overhead documentation - particularly the code
        comments - to reflect the deprecation of the <code>PRIORITY</code> frame
        and clarify that a stream reset always triggers an overhead increase.
        (markt)
      </fix>
      <fix>
        <bug>69762</bug>: Additional overflow fix for HPACK decoding of
        integers. Pull request <pr>880</pr> by Chenjp. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Cluster">
    <changelog>
      <update>
        Add <code>enableStatistics</code> configuration attribute for the
        <code>DeltaManager</code>, defaulting to <code>true</code>. (remm)
      </update>
    </changelog>
  </subsection>
  <subsection name="WebSocket">
    <changelog>
      <fix>
        Align the WebSocket extension handling for WebSocket client connections
        with WebSocket server connections. The WebSocket client now only
        includes an extension requested by an endpoint in the opening handshake
        if the WebSocket client supports that extension. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Web applications">
    <changelog>
      <fix>
        Manager and Host Manager. Provide the Manager and Host Manager web
        applications with a dedicated favicon file rather than using the one
        from the ROOT web application which might not be present or may
        represent something entirely different. Pull requests <pr>876</pr>
        and <pr>878</pr> by Simon Arame.
      </fix>
    </changelog>
  </subsection>
  <subsection name="Other">
    <changelog>
      <update>
        Update Checkstyle to 10.26.1. (markt)
      </update>
      <add>
        Improvements to French translations. (remm)
      </add>
      <add>
        Improvements to Japanese translations by tak7iji. (markt)
      </add>
    </changelog>
  </subsection>
</section>
<section name="Tomcat 10.1.43 (schultz)" rtext="2025-07-04">
  <subsection name="Catalina">
    <changelog>
      <fix>
        Ensure application configured welcome files override the defaults when
        configuring an embedded web application programmatically. (markt)
      </fix>
      <fix>
        Allow the default servlet to set the content length when the content
        length is known, no content has been written and a <code>Writer</code>
        is being used. (markt)
      </fix>
      <fix>
        <bug>69717</bug>: Correct a regression in the fix for CVE-2025-49125
        that prevented access to PreResources and PostResources when mounted
        below the web application root with a path that was terminated with a
        file separator. (remm/markt)
      </fix>
      <fix>
        <bug>69731</bug>: Fix an issue that meant that the value of
        <code>maxParameterCount</code> applied was smaller than intended for
        multipart uploads with non-file parts when the parts were processed
        before query string parameters. (markt)
      </fix>
      <fix>
        Align size tracking for multipart requests with FileUpload's use of
        <code>long</code>. (schultz)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Coyote">
    <changelog>
      <fix>
        <bug>69710</bug>: Increase the default for <code>maxPartCount</code>
        from <code>10</code> to <code>50</code>. Update the documentation to
        provide more details on the memory requirements to support multi-part
        uploads while avoiding a denial of service risk. (markt)
      </fix>
      <fix>
        <bug>69713</bug>: Correctly handle an HTTP/2 data frame that includes
        padding when the headers include a content-length. (remm/markt)
      </fix>
      <fix>
        Correctly collect statistics for HTTP/2 requests and avoid counting one
        request multiple times. Based on pull request <pr>868</pr> by
        qingdaoheze. (markt)
      </fix>
      <fix>
        Fix JMX value for <code>keepAliveCount</code> on the endpoint. Also add
        the value of <code>useVirtualThreads</code> in JMX. (remm)
      </fix>
      <fix>
        <bug>69728</bug>: Remove incorrect warning when HTTP/2 is used with
        optional certificate verification and improve the warnings when a web
        application tries to use CLIENT-CERT with either HTTP/2 or a JSSE
        implementation of TLS 1.3. (markt)
      </fix>
      <fix>
        When setting the initial HTTP/2 connection limit, apply those limits
        earlier. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Jasper">
    <changelog>
      <scode>
        Remove <code>IMPL_OBJ_START</code> from EL grammar for
        <code>IDENTIFIER</code>. (markt)
      </scode>
      <scode>
        Remove the <code>INSTANCEOF</code> and <code>FUNCTIONSUFFIX</code>
        definitions from the EL grammar as both are unused. (markt)
      </scode>
    </changelog>
  </subsection>
  <subsection name="Web applications">
    <changelog>
      <add>
        Documentation. Provide more explicit guidance regarding the security
        considerations for enabling write access to the web application via
        WebDAV, HTTP PUT requests or similar. (markt)
      </add>
      <add>
        Documentation. Add a section on reverse proxies to the security
        considerations page. (markt)
      </add>
    </changelog>
  </subsection>
  <subsection name="Other">
    <changelog>
      <update>
        Update UnboundID to 7.0.3. (markt)
      </update>
      <update>
        Update Checkstyle to 10.25.1. (markt)
      </update>
      <update>
        Improvements to French translations. (remm)
      </update>
      <update>
        Improvements to Japanese translations provided by tak7iji. (markt)
      </update>
    </changelog>
  </subsection>
</section>
<section name="Tomcat 10.1.42 (schultz)" rtext="2025-06-09">
  <subsection name="Catalina">
    <changelog>
      <fix>
        Add support for the <code>java:module</code> namespace which mirrors
        the <code>java:comp</code> namespace. (markt)
      </fix>
      <fix>
        Support parsing of multiple path parameters separated by <code>;</code>
        in a single URL segment. Based on pull request <pr>860</pr> by Chenjp.
        (markt)
      </fix>
      <add>
        Added support for limiting the number of parameters in HTTP requests through
        the new <code>ParameterLimitValve</code>. The valve allows configurable
        URL-specific limits on the number of parameters. (dsoumis)
      </add>
      <fix>
        <bug>69699</bug>: Encode redirect URL used by the rewrite valve with
        the session id if appropriate, and handle cross context with different
        session configuration when using rewrite. (remm)
      </fix>
      <add>
        <pr>863</pr>: Add support for comments at the end of lines in text
        rewrite map files to align behaviour with Apache httpd. Pull request
        provided by Chenjp. (markt)
      </add>
      <fix>
        <bug>69706</bug>: Fix saved request serialization issue in FORM
        introduced when allowing infinite session timeouts. (remm)
      </fix>
      <fix>
        Expand the path checks for Pre-Resources and Post-Resources mounted at a
        path within the web application. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Coyote">
    <changelog>
      <scode>
        <pr>861</pr>: Refactor <code>TaskQueue</code> to use the new interface
        <code>RetryableQueue</code> which enables better integration of custom
        <code>Executor</code>s which provide their own
        <code>BlockingQueue</code> implementation. Pull request provided by
        Paulo Almeida. (markt)
      </scode>
      <add>
        Provide finer grained control of multi-part request processing via two
        new attributes on the <code>Connector</code> element.
        <code>maxPartCount</code> limits the total number of parts in a
        multi-part request and <code>maxPartHeaderSize</code> limits the size of
        the headers provided with each part. Add support for these new
        attributes to the <code>ParameterLimitValve</code>. (markt)
      </add>
    </changelog>
  </subsection>
  <subsection name="Jasper">
    <changelog>
      <fix>
        <bug>69696</bug>: Mark the JSP wrapper for reload after a failed
        compilation. (remm)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Web applications">
    <changelog>
      <fix>
        <bug>69694</bug>: Improve error reporting of deployment tasks done
        using the manager webapp when a copy operation fails. (remm)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Other">
    <changelog>
      <fix>
        Add thread name to webappClassLoader.stackTraceRequestThread message.
        Patch provided by Felix Zhang. (schultz)
      </fix>
      <update>
        Update Tomcat Native to 2.0.9. (markt)
      </update>
      <update>
        Update the internal fork of Apache Commons FileUpload to 1.6.0
        (2025-06-05). (markt)
      </update>
      <update>
        Update EasyMock to 5.6.0. (markt)
      </update>
      <update>
        Update Checkstyle to 10.25.0. (markt)
      </update>
      <fix>
        Use the full path when the installer for Windows sets calls
        <code>icacls.exe</code> to set file permissions. (markt)
      </fix>
      <update>
        Improvements to Japanese translations provided by tak7iji. (markt)
      </update>
    </changelog>
  </subsection>
</section>
<section name="Tomcat 10.1.41 (schultz)" rtext="2025-05-12">
  <subsection name="Catalina">
    <changelog>
      <fix>
        Fix use of <code>SSS</code> in <code>SimpleDateFormat</code>
        pattern for <code>AccessLogValve</code>. (rjung)
      </fix>
      <fix>
        Process possible path parameters rewrite production in the rewrite
        valve. (remm)
      </fix>
      <add>
        <bug>69588</bug>: Enable <code>allowLinking</code> to be set on
        <code>PreResources</code>, <code>JarResources</code> and
        <code>PostResources</code>. If not set explicitly, the setting will be
        inherited from the <code>Resources</code>. (markt)
      </add>
      <fix>
        <bug>69633</bug>: Add support for Filters using context root mappings.
        (markt)
      </fix>
      <fix>
        <bug>69643</bug>: Optimize directory listing for large amount of files.
        Patch submitted by  Loic de l'Eprevier. (remm)
      </fix>
      <fix>
        <pr>843</pr>: Fix off by one validation logic for partial PUT ranges
        and associated test case. Submitted by Chenjp. (remm)
      </fix>
      <scode>
        Replace the unused buffer in
        <code>org.apache.catalina.connector.InputBuffer</code> with a static,
        zero length buffer. (markt)
      </scode>
      <scode>
        Refactor GCI servlet to access resources via the
        <code>WebResource</code> API. (markt)
      </scode>
      <fix>
        <bug>69662</bug>: Report name in exception message when a naming lookup
        failure occurs. Based on code submitted by Donald Smith. (remm)
      </fix>
      <fix>
        Ensure that the FORM authentication attribute
        <code>authenticationSessionTimeout</code> works correctly when sessions
        have an infinite timeout when authentication starts. (markt)
      </fix>
      <add>
        Provide a content type based on file extension when web application
        resources are accessed via a URL. (markt)
      </add>
    </changelog>
  </subsection>
  <subsection name="Coyote">
    <changelog>
      <scode>
        Refactor the <code>SavedRequestInputFilter</code> so the buffered data
        is used directly rather than copied. (markt)
      </scode>
    </changelog>
  </subsection>
  <subsection name="Jasper">
    <changelog>
      <fix>
        <bug>69635</bug>: Add support to <code>jakarta.el.ImportHandler</code>
        for resolving inner classes. (markt)
      </fix>
      <add>
        <pr>842</pr>Add support for optimized execution of c:set and c:remove tags, when
        activated via JSP servlet param useNonstandardTagOptimizations.
        (jengebr)
      </add>
      <fix>
        Fix an edge case compilation bug for JSP and tag files on case
        insensitive file systems that was exposed by the test case for
        <bug>69635</bug>. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Web applications">
    <changelog>
      <fix>
        <bug>68876</bug>: Documentation. Update the UML diagrams for server
        start-up, request processing and authentication using PlantUML and
        include the source files for each diagram. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Other">
    <changelog>
      <fix>
        Set <code>sun.io.useCanonCaches</code> in <code>service.bat</code>
        Based on pull request <pr>841</pr> by Paul Lodge. (remm)
      </fix>
      <update>
        Update Jacoco to 0.8.13. (remm)
      </update>
      <add>
        Explicitly set the locale to be used for Javadoc. For official releases,
        this locale will be English (US) to support reproducible builds. (schultz)
      </add>
      <update>
        Update Byte Buddy to 1.17.5. (markt)
      </update>
      <update>
        Update Checkstyle to 10.23.1. (markt)
      </update>
      <update>
        Update file extension to media type mappings to align with the current
        list used by the Apache Web Server (httpd). (markt)
      </update>
      <update>
        Improvements to French translations. (remm)
      </update>
      <update>
        Improvements to Japanese translations provided by tak7iji. (markt)
      </update>
    </changelog>
  </subsection>
</section>
<section name="Tomcat 10.1.40 (schultz)" rtext="2025-04-08">
  <subsection name="Catalina">
    <changelog>
      <fix>
        Return 400 if the amount of content sent for a partial PUT is
        inconsistent with the range that was specified. (remm)
      </fix>
      <add>
        Add a new <code>RateLimiter</code> implementation,
        <code>org.apache.catalina.util.ExactRateLimiter</code>, that can be used
        with <code>org.apache.catalina.filters.RateLimitFilter</code> to provide
        rate limit based on the exact values configured. Based on pull request
        <pr>794</pr> by Chenjp. (markt)
      </add>
      <fix>
        Fix parsing of the <code>time-taken</code> token in the
        <code>ExtendedAccessLogValve</code>. (remm)
      </fix>
      <fix>
        Fix invocation of the FFM OpenSSL code for setting a SSL engine and
        FIPS mode. (remm)
      </fix>
      <fix>
        <bug>69600</bug>: Add IPv6 local addresses (RFC 4193 and RFC 4291) to
        the default internal proxies for the RemoteIpFilter and RemoteIpValve.
        (markt)
      </fix>
      <fix>
        <bug>69615</bug>: Improve integration with the not found class resources
        cache for users who are using a custom web application class loader
        and/or using reflection to dynamically add external repositories to the
        web application class loader. (markt)
      </fix>
      <add>
        Add a new initialisation parameter to the Default servlet -
        <code>allowPostAsGet</code> - which controls whether a direct request
        (i.e. not a forward or an include) for a static resource using the POST
        method will be processed as if the GET method had been used. If not
        allowed, the request will be rejected. The default behaviour of
        processing the request as if the GET method had been used is unchanged.
        (markt)
      </add>
      <fix>
        <bug>69623</bug>: Correct a long standing regression that meant that
        calls to <code>ClassLoader.getResource().getContent()</code> failed when
        made from within a web application with resource caching enabled.
        (markt)
      </fix>
      <fix>
        <bug>69634</bug>: Avoid NPE on <code>JsonErrorReportValve</code>.
        (remm)
      </fix>
      <fix>
        Add missing <code>throwable</code> stack trace to
        <code>JsonErrorReportValve</code> equivalent to the one from
        <code>ErrorReportValve</code>. (remm)
      </fix>
      <fix>
        Improve the handling of <code>%nn</code> URL encoding in the
        RewriteValve and document how <code>%nn</code> URL encoding may be used
        with rewrite rules. (markt)
      </fix>
      <fix>
        Fix a potential exception when calling
        <code>WebappClassLoaderBase.getResource("")</code>. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Coyote">
    <changelog>
      <fix>
        <bug>69607</bug>: Allow failed initialization of MD5. Based on code
        submitted by Shivam Verma. (remm)
      </fix>
      <fix>
        <bug>69614</bug>: HTTP/2 priority frames with an invalid priority field
        value should be ignored. (markt)
      </fix>
      <fix>
        Improve handling of unexpected errors during HTTP/2 processing. (markt)
      </fix>
      <fix>
        Add missing code to process an OpenSSL profile, such as
        <code>PROFILE=SYSTEM</code>, using FFM. (remm)
      </fix>
      <add>
        Simplify the process of using a custom SSLContext for an HTTPS enabled
        connector. Based on pull request <pr>805</pr> by Hakky54. (markt)
      </add>
    </changelog>
  </subsection>
  <subsection name="Jasper">
    <changelog>
      <scode>
        Replace custom URL encoding provided by the JSP runtime library with
        calls to <code>java.net.URLEncoder.encode()</code>. (markt)
      </scode>
      <add>
        Add compiler using the <code>Java Compiler</code> API, supporting
        exploded web applications. The <code>compilerClassName</code> to use is
        <code>org.apache.jasper.compiler.JavaCompiler</code>. (remm)
      </add>
      <add>
        Add support for specifying Java 25 (with the value <code>25</code>) as
        the compiler source and/or compiler target for JSP compilation. If used
        with an Eclipse JDT compiler version that does not support these values,
        a warning will be logged and the default will be used.
        (markt)
      </add>
    </changelog>
  </subsection>
  <subsection name="Cluster">
    <changelog>
      <fix>
        Fix resetting cross context sessions in the
        <code>ReplicationValve</code>. (remm)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Web applications">
    <changelog>
      <add>
        Documentation. Add a link to the Log4j documentation that describes how
        to use Log4j rather than JULI for Tomcat's internal logging. (markt)
      </add>
      <add>
        Documentation. Document the runtime attributes available to web
        applications via the Request or the ServletContext. Based on pull
        request <pr>832</pr> by usmazat. (markt)
      </add>
    </changelog>
  </subsection>
  <subsection name="Other">
    <changelog>
      <update>
        Revert JSign to 6.0 to avoid a file locking issue. (markt)
      </update>
      <update>
        Update to NSIS 3.11. (markt)
      </update>
      <update>
        Update to ByteBuddy 1.17.4. (markt)
      </update>
      <update>
        Update to Checkstyle 10.21.4. (markt)
      </update>
      <update>
        Update to SpotBugs to 4.9.3. (markt)
      </update>
      <update>
        Improvements to French translations. (remm)
      </update>
      <update>
        Improvements to Japanese translations provided by tak7iji. (markt)
      </update>
    </changelog>
  </subsection>
</section>
<section name="Tomcat 10.1.39 (schultz)" rtext="2025-03-07">
</section>
<section name="Tomcat 10.1.38 (schultz)" rtext="not released">
  <subsection name="Catalina">
    <changelog>
      <fix>
        <bug>69602</bug>: Fix regression in releases from 12-2024 that were too
        strict and rejected weak etags in the <code>If-Range</code> header with
        a 400 response. Instead will consider it as a failed match since strong
        etags are required for <code>If-Range</code>. (remm)
      </fix>
    </changelog>
  </subsection>
</section>
<section name="Tomcat 10.1.37 (schultz)" rtext="not released">
  <subsection name="Catalina">
    <changelog>
      <fix>
        When looking up class loader resources by resource name, the resource
        name should not start with '/'. If the resource name does start with
        '/', Tomcat is lenient and looks it up as if the '/' was not present.
        When the web application class loader was configured with external
        repositories and names starting with '/' were used for lookups, it was
        possible that cached 'not found' results could effectively hide lookup
        results using the correct resource name. (markt)
      </fix>
      <fix>
        Enable the JNDIRealm to validate credentials provided to
        <code>HttpServletRequest.login(String username, String password)</code>
        when the realm is configured to use GSSAPI authentication. (markt)
      </fix>
      <fix>
        Fix a bug in the JRE compatibility detection that incorrectly identified
        Java 19 and Java 20 as supporting Java 21 features. (markt)
      </fix>
      <fix>
        Improve the checks for exposure to and protection against CVE-2024-56337
        so that reflection is not used unless required. The checks for whether
        the file system is case sensitive or not have been removed. (markt)
      </fix>
      <add>
        Add support for logging the connection ID (as returned by
        <code>ServletRequest.getServletConnection().getConnectionId()</code>)
        with the <code>AccessLogValve</code> and
        <code>ExtendedAccessLogValve</code>. Based on pull request <pr>814</pr>
        by Dmole. (markt)
      </add>
      <fix>
        Avoid scenarios where temporary files used for partial PUT would not
        be deleted. (remm)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Coyote">
    <changelog>
      <fix>
        <bug>69575</bug>: Avoid using compression if a response is already
        compressed using <code>compress</code>, <code>deflate</code> or
        <code>zstd</code>. (remm)
      </fix>
      <update>
        Use <code>Transfer-Encoding</code> for compression rather than
        <code>Content-Encoding</code> if the client submits a <code>TE</code>
        header containing <code>gzip</code>. (remm)
      </update>
      <fix>
        Fix a race condition in the handling of HTTP/2 stream reset that could
        cause unexpected 500 responses. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Cluster">
    <changelog>
      <add>
        <bug>69598</bug>: Add detection of service account token changes to the
        <code>KubernetesMembershipProvider</code> implementation and reload the
        token if it changes. Based on a patch by Miroslav Jezbera. (markt)
      </add>
    </changelog>
  </subsection>
  <subsection name="Other">
    <changelog>
      <add>
        Add <code>makensis</code> as an option for building the Installer for
        Windows on non-Windows platforms. (rjung/markt)
      </add>
      <update>
        Update Byte Buddy to 1.17.1. (markt)
      </update>
      <update>
        Update Checkstyle to 10.21.3. (markt)
      </update>
      <update>
        Update SpotBugs to 4.9.1. (markt)
      </update>
      <update>
        Update JSign to 7.1. (markt)
      </update>
      <add>
        Improvements to French translations. (remm)
      </add>
      <add>
        Improvements to Japanese translations by tak7iji. (markt)
      </add>
    </changelog>
  </subsection>
</section>
<section name="Tomcat 10.1.36 (schultz)" rtext="2025-02-18">
  <subsection name="Catalina">
    <changelog>
      <fix>
        <bug>69576</bug>: Avoid possible failure initializing
        <code>JreCompat</code> due to uncaught exception introduced for the
        check for CVE-2024-56337. (remm)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Other">
    <changelog>
      <add>
        Add <code>org.apache.juli.JsonFormatter</code> to format log as one
        line JSON documents. (remm)
      </add>
    </changelog>
  </subsection>
</section>
<section name="Tomcat 10.1.35 (schultz)" rtext="2025-02-10">
  <subsection name="Catalina">
    <changelog>
      <update>
        Add <code>tableName</code> configuration on the
        <code>DataSourcePropertyStore</code> that may be used by the WebDAV
        Servlet. (remm)
      </update>
      <update>
        Improve HTTP If headers processing according to RFC 9110. Based on pull
        request <pr>796</pr> by Chenjp. (remm/markt)
      </update>
      <update>
        Allow <code>readOnly</code> attribute configuration on the
        <code>Resources</code> element and allow configure the
        <code>readOnly</code> attribute value of the main resources. The
        attribute value will also be used by the default and WebDAV Servlets.
        (remm)
      </update>
      <fix>
        <bug>69285</bug>: Optimise the creation of the parameter map for
        included requests. Based on sample code and test cases provided by John
        Engebretson. (markt)
      </fix>
      <fix>
        <bug>69527</bug>: Avoid rare cases where a cached resource could be set
        with 0 content length, or could be evicted immediately. (remm)
      </fix>
      <fix>
        Fix possible edge cases (such as HTTP/1.0) with trying to detect
        requests without body for WebDAV LOCK and PROPFIND. (remm)
      </fix>
      <fix>
        <bug>69528</bug>: Add multi-release JAR support for the
        <code>bloom</code> <code>archiveIndexStrategy</code> of the
        <code>Resources</code>. (remm)
      </fix>
      <fix>
        Improve checks for <code>WEB-INF</code> and <code>META-INF</code> in
        the WebDAV servlet. Based on a patch submitted by Chenjp. (remm)
      </fix>
      <fix>
        Remove unused session to client map from
        <code>CrawlerSessionManagerValve</code>. Submitted by Brian Matzon.
        (remm)
      </fix>
      <add>
        Add a check to ensure that, if one or more web applications are
        potentially vulnerable to CVE-2024-56337, the JVM has been configured to
        protect against the vulnerability and to configure the JVM correctly if
        not. Where one or more web applications are potentially vulnerable to
        CVE-2004-56337 and the JVM cannot be correctly configured or it cannot
        be confirmed that the JVM has been correctly configured, prevent the
        impacted web applications from starting. (markt)
      </add>
      <fix>
        When using the WebDAV servlet with <code>serveSubpathOnly</code> set to
        <code>true</code>, ensure that the destination for any requested WebDAV
        operation is also restricted to the sub-path. (markt)
      </fix>
      <fix>
        Generate an appropriate <code>Allow</code> HTTP header when the Default
        servlet returns a 405 (method not allowed) response in response to a
        <code>DELETE</code> request because the target resource cannot be
        deleted. Pull request <pr>802</pr> provided by Chenjp. (markt)
      </fix>
      <scode>
        Refactor creation of <code>RequestDispatcher</code> instances so that
        the processing of the provided path is consistent with normal request
        processing. (markt)
      </scode>
      <add>
        Add <code>encodedReverseSolidusHandling</code> and
        <code>encodedSolidusHandling</code> attributes to Context to provide
        control over the handling of the path used to created a
        <code>RequestDispatcher</code>. (markt)
      </add>
      <fix>
        Handle a potential <code>NullPointerException</code> after an
        <code>IOException</code> occurs on a non-container thread during
        asynchronous processing. (markt)
      </fix>
      <fix>
        Enhance lifecycle of temporary files used by partial PUT. (remm)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Coyote">
    <changelog>
      <fix>
        Don't log warnings for registered HTTP/2 settings that Tomcat does not
        support. These settings are now silently ignored. (markt)
      </fix>
      <fix>
        Avoid a rare <code>NullPointerException</code> when recycling the
        <code>Http11InputBuffer</code>. (markt)
      </fix>
      <fix>
        Lower the log level to debug for logging an invalid socket channel when
        processing poller events for the NIO Connector as this may occur in
        normal usage. (markt)
      </fix>
      <scode>
        Clean-up references to the HTTP/2 stream once request processing has
        completed to aid GC and reduce the size of the HTTP/2 recycled request
        and response cache. (markt)
      </scode>
      <add>
        Add a new Connector configuration attribute,
        <code>encodedReverseSolidusHandling</code>, to control how
        <code>%5c</code> sequences in URLs are handled. The default behaviour is
        unchanged (decode) keeping in mind that the
        <strong>allowBackslash</strong> attribute determines how the decoded
        URI is processed. (markt)
      </add>
      <fix>
        <bug>69545</bug>: Improve CRLF skipping for the <code>available</code>
        method of the <code>ChunkedInputFilter</code>. (remm)
      </fix>
      <fix>
        Improve the performance of repeated calls to <code>getHeader()</code>.
        Pull request <pr>813</pr> provided by Adwait Kumar Singh. (markt)
      </fix>
      <fix>
        <bug>69559</bug>: Ensure that the Java 24 warning regarding the use of
        <code> sun.misc.Unsafe::invokeCleaner</code> is only reported by the JRE
        when the code will be used. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Jasper">
    <changelog>
      <fix>
        <bug>69508</bug>: Correct a regression in the fix for <bug>69382</bug>
        that broke JSP include actions if both the page attribute and the body
        contained parameters. Pull request <pr>803</pr> provided by Chenjp.
        (markt)
      </fix>
      <fix>
        Update the identifier validation in the Expression Language parser to
        reflect that, as of Java 9, <code>_</code> is also a Java keyword and
        may not be used as an identifier. (markt)
      </fix>
      <fix>
        <bug>69521</bug>: Update the EL Parser to allow the full range of valid
        characters in an EL identifier as defined by the Java Language
        Specification. (markt)
      </fix>
      <fix>
        <bug>69532</bug>: Optimise the creation of
        <code>ExpressionFactory</code> instances. Patch provided by John
        Engebretson. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Web applications">
    <changelog>
      <add>
        Documentation. Expand the description of the security implications of
        setting <code>mapperContextRootRedirectEnabled</code> and/or
        <code>mapperDirectoryRedirectEnabled</code> to <code>true</code>.
        (markt)
      </add>
      <fix>
        Documentation. Better document the default for the
        <code>truststoreProvider</code> attribute of a
        <code>SSLHostConfig</code> element. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Other">
    <changelog>
      <update>
        Update to Commons Daemon 1.4.1. (markt)
      </update>
      <update>
        Update the packaged version of the Tomcat Migration Tool for Jakarta EE
        to 1.0.9. (markt)
      </update>
      <update>
        Update the internal fork of Commons Pool to 2.12.1. (markt)
      </update>
      <update>
        Update Byte Buddy to 1.16.1. (markt)
      </update>
      <update>
        Update UnboundID to 7.0.2. (markt)
      </update>
      <update>
        Update Checkstyle to 10.21.2. (markt)
      </update>
      <update>
        Update SpotBugs to 4.9.0. (markt)
      </update>
      <add>
        Improvements to French translations. (remm)
      </add>
      <add>
        Improvements to Chinese translations by leeyazhou. (markt)
      </add>
      <add>
        Improvements to Japanese translations by tak7iji. (markt)
      </add>
    </changelog>
  </subsection>
</section>
<section name="Tomcat 10.1.34 (schultz)" rtext="2024-12-09">
  <subsection name="Catalina">
    <changelog>
      <add>
        Add option to serve resources from subpath only with WebDAV Servlet like
        with DefaultServlet. (michaelo)
      </add>
      <fix>
        Add special handling for the <code>protocols</code> attribute of
        <code>SSLHostConfig</code> in storeconfig. (remm)
      </fix>
      <fix>
        <bug>69442</bug>: Fix case sensitive check on <code>content-type</code>
        when parsing request parameters. (remm)
      </fix>
      <scode>
        Refactor duplicate code for extracting media type and subtype from
        <code>content-type</code> into a single method. (markt)
      </scode>
      <fix>
        Compatibility of generated embedded code with components where
        constructors or property related methods throw a checked exception.
        (remm)
      </fix>
      <fix>
        The previous fix for inconsistent resource metadata during concurrent
        reads and writes was incomplete. (markt)
      </fix>
      <fix>
        <pr>780</pr>: Fix <code>content-range</code> header length. Submitted
        by Chenjp. (remm)
      </fix>
      <fix>
        <bug>69444</bug>: Ensure that the
        <code>jakarta.servlet.error.message</code> request attribute is set when
        an application defined error page is called. (markt)
      </fix>
      <fix>
        Avoid quotes for numeric values in the JSON generated by the status
        servlet. (remm)
      </fix>
      <add>
        Add strong ETag support for the WebDAV and default servlet, which can
        be enabled by using the <code>useStrongETags</code> init parameter with
        a value set to <code>true</code>. The ETag generated will be a SHA-1
        checksum of the resource content. (remm)
      </add>
      <fix>
        Use client locale for directory listings. (remm)
      </fix>
      <fix>
        <bug>69439</bug>: Improve the handling of multiple
        <code>Cache-Control</code> headers in the <code>ExpiresFilter</code>.
        Based on pull request <pr>777</pr> by Chenjp. (markt)
      </fix>
      <fix>
        <bug>69447</bug>: Update the support for caching classes the web
        application class loader cannot find to take account of classes loaded
        from external repositories. Prior to this fix, these classes could be
        incorrectly marked as not found. (markt)
      </fix>
      <fix>
        <bug>69466</bug>: Rework handling of HEAD requests. Headers explicitly
        set by users will not be removed and any header present in a HEAD
        request will also be present in the equivalent GET request. There may be
        some headers, as per RFC 9110, section 9.3.2, that are present in a GET
        request that are not present in the equivalent HEAD request. (markt)
      </fix>
      <fix>
        <bug>69471</bug>: Log instances of <code>CloseNowException</code> caught
        by <code>ApplicationDispatcher.invoke()</code> at debug level rather
        than error level as they are very likely to have been caused by a client
        disconnection or similar I/O issue. (markt)
      </fix>
      <add>
        Add a test case for the fix for <bug>69442</bug>. Also refactor
        references to <code>application/x-www-form-urlencoded</code>. Based on
        pull request <pr>779</pr> by Chenjp. (markt)
      </add>
      <fix>
        <bug>69476</bug>: Catch possible ISE when trying to report PUT failure
        in the <code>DefaultServlet</code>. (remm)
      </fix>
      <add>
        Add support for <a
        href="https://datatracker.ietf.org/doc/draft-ietf-httpapi-ratelimit-headers">RateLimit
        header fields for HTTP (draft)</a> in the <code>RateLimitFilter</code>.
        Based on pull request <pr>775</pr> provided by Chenjp. (markt)
      </add>
      <add>
        <pr>787</pr>: Add regression tests for <bug>69478</bug>. Pull request
        provided by Thomas Krisch. (markt)
      </add>
      <fix>
        The default servlet now rejects HTTP range requests when two or more of
        the requested ranges overlap. Based on pull request <pr>782</pr>
        provided by Chenjp. (markt)
      </fix>
      <fix>
        Enhance Content-Range verification for partial PUT requests handled by
        the default servlet. Provided by Chenjp in pull request <pr>778</pr>.
        (markt)
      </fix>
      <fix>
        Harmonize <code>DataSourceStore</code> lookup in the global resources
        to optionally avoid the <code>comp/env</code> prefix which is usually
        not used there. (remm)
      </fix>
      <fix>
        As required by RFC 9110, the HTTP <code>Range</code> header will now
        only be processed for <code>GET</code> requests. Based on pull request
        <pr>790</pr> provided by Chenjp. (markt)
      </fix>
      <fix>
        Deprecate the <code>useAcceptRanges</code> initialisation parameter for
        the default servlet. It will be removed in Tomcat 12 onwards where it
        will effectively be hard coded to <code>true</code>. (markt)
      </fix>
      <add>
        Add <code>DataSource</code> based property storage for the
        <code>WebdavServlet</code>. (remm)
      </add>
    </changelog>
  </subsection>
  <subsection name="Coyote">
    <changelog>
      <fix>
        Align <code>encodedSolidusHandling</code> with the Servlet
        specification. If the pass-through mode is used, any
        <code>%25</code> sequences will now also be passed through to avoid
        errors and/or corruption when the application decodes the path. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Jasper">
    <changelog>
      <fix>
        Follow-up to the fix for <bug>69381</bug>. Apply the optimisation for
        method lookup performance in expression language to an additional
        location. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Web applications">
    <changelog>
      <fix>
        Documentation. Remove references to the <code>ResourceParams</code>
        element. Support for <code>ResourceParams</code> was removed in Tomcat
        5.5.x. (markt)
      </fix>
      <fix>
        Documentation. <bug>69477</bug>: Correct name of attribute for
        <code>RemoteIPFilter</code>. The attribute is
        <code>internalProxies</code> rather than
        <code>allowedInternalProxies</code>. Pull request <pr>786</pr> provided
        by Jorge Díaz. (markt)
      </fix>
      <fix>
        Examples. Fix broken links when Servlet Request Info example is called
        via a URL that includes a pathInfo component. (markt)
      </fix>
      <fix>
        Examples. Expand the obfuscation of session cookie values in the request
        header example to JSON responses. (markt)
      </fix>
      <add>
        Examples. Add the ability to delete session attributes in the servlet
        session example. (markt)
      </add>
      <add>
        Examples. Add a hard coded limit of 10 attributes per session for the
        servlet session example. (markt)
      </add>
      <add>
        Examples. Add the ability to delete session attributes and add a hard
        coded limit of 10 attributes per session for the JSP form authentication
        example. (markt)
      </add>
      <add>
        Examples. Limit the shopping cart example to only allow adding the
        pre-defined items to the cart. (markt)
      </add>
      <fix>
        Examples. Remove JSP calendar example. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name = "Other">
    <changelog>
      <fix>
        <bug>69465</bug>: Fix warnings during native image compilation using the
        Tomcat embedded JARs. (markt)
      </fix>
      <update>
        Update Tomcat's fork of Commons DBCP to 2.13.0. (markt)
      </update>
      <update>
        Update EasyMock to 5.5.0. (markt)
      </update>
      <update>
        Update Checkstyle to 10.20.2. (markt)
      </update>
      <update>
        Update BND to 7.1.0. (markt)
      </update>
      <add>
        Improvements to French translations. (remm)
      </add>
      <add>
        Improvements to Korean translations. (markt)
      </add>
      <add>
        Improvements to Chinese translations. (markt)
      </add>
      <add>
        Improvements to Japanese translations by tak7iji. (markt)
      </add>
    </changelog>
  </subsection>
</section>
<section name="Tomcat 10.1.33 (schultz)" rtext="2024-11-11">
  <subsection name="Other">
    <changelog>
      <fix>Fix release build issue.</fix>
    </changelog>
  </subsection>
</section>
<section name="Tomcat 10.1.32 (schultz)" rtext="not released">
  <subsection name="Catalina">
    <changelog>
      <add>
        Add support for the new Servlet API method
        <code>HttpServletResponse.sendEarlyHints()</code>. (markt)
      </add>
      <add>
        <fix>55470</fix>: Add debug logging that reports the class path when a
        <code>ClassNotFoundException</code> occurs in the digester or the web
        application class loader. Based on a patch by Ralf Hauser. (markt)
      </add>
      <update>
        <bug>69374</bug>: Properly separate between table header and body
        in <code>DefaultServlet</code>'s listing. (michaelo)
      </update>
      <update>
        <bug>69373</bug>: Make <code>DefaultServlet</code>'s HTML listing
        file last modified rendering better (flexible). (michaelo)
      </update>
      <update>
        Improve HTML output of <code>DefaultServlet</code>. (michaelo)
      </update>
      <scode>
        Refactor <code>RateLimitFilter</code> to use <code>FilterBase</code> as
        the base class. The primary advantage for doing this is less code to
        process <code>init-param</code> values. (markt)
      </scode>
      <update>
        <bug>69370</bug>: <code>DefaultServlet</code>'s HTML listing
        uses incorrect labels. (michaelo)
      </update>
      <fix>
        Avoid NPE in <code>CrawlerSessionManagerValve</code> for partially
        mapped requests. (remm)
      </fix>
      <fix>
        Add missing WebDAV <code>Lock-Token</code> header in the response when
        locking a folder. (remm)
      </fix>
      <fix>
        Invalid WebDAV lock requests should be rejected with 400. (remm)
      </fix>
      <fix>
        Fix regression in WebDAV when attempting to unlock a collection. (remm)
      </fix>
      <fix>
        Verify that destination is not locked for a WebDAV copy operation.
        (remm)
      </fix>
      <fix>
        Send 415 response to WebDAV <code>MKCOL</code> operations that include
        a request body since this is optional and unsupported. (remm)
      </fix>
      <fix>
        Enforce <code>DAV:</code> namespace on WebDAV XML elements. (remm)
      </fix>
      <fix>
        Do not allow a new WebDAV lock on a child resource if a parent
        collection is locked (RFC 4918 section 6.1). (remm)
      </fix>
      <fix>
        WebDAV <code>DELETE</code> should remove any existing lock on
        successfully deleted resources. (remm)
      </fix>
      <update>
        Remove WebDAV lock null support in accordance with RFC 4918 section 7.3
        and annex D. Instead a lock on a non existing resource will create an
        empty file locked with a regular lock. (remm)
      </update>
      <update>
        Rewrite implementation of WebDAV shared locks to comply with RFC 4918.
        (remm)
      </update>
      <update>
        Implement WebDAV <code>If</code> header using code from the Apache
        Jackrabbit project. (remm)
      </update>
      <add>
        Add <code>PropertyStore</code> interface in the WebDAV Servlet,
        to allow implementation of dead properties storage. The store used
        can be configured using the <code>propertyStore</code> init parameter
        of the WebDAV servlet by specifying the class name of the store. A
        simple non persistent implementation is used if no custom store is
        configured. (remm)
      </add>
      <update>
        Implement WebDAV <code>PROPPATCH</code> method using the newly added
        <code>PropertyStore</code>, and update <code>PROPFIND</code> to support
        it. (remm)
      </update>
      <fix>
        Cache not found results when searching for web application class loader
        resources. This addresses performance problems caused by components such
        as <code>java.sql.DriverManager</code> which, in some circumstances,
        will search for the same class repeatedly. In a large web application
        this can cause performance problems. The size of the cache can be
        controlled via the new <code>notFoundClassResourceCacheSize</code> on
        the StandardContext. (markt)
      </fix>
      <fix>
        Stop after <code>INITIALIZED</code> state should be a noop since it is
        possible for subcomponents to be in <code>FAILED</code> after init.
        (remm)
      </fix>
      <fix>
        Fix incorrect web resource cache size calculations when there are
        concurrent <code>PUT</code> and <code>DELETE</code> requests for the
        same resource. (markt)
      </fix>
      <add>
        Add debug logging for the web resource cache so the current size can be
        tracked as resources are added and removed. (markt)
      </add>
      <update>
        Replace legacy WebDAV <code>opaquelocktoken:</code> scheme for lock
        tokens with <code>urn:uuid:</code> as recommended by RFC 4918, and
        remove <code>secret</code> init parameter. (remm)
      </update>
      <fix>
        Concurrent reads and writes (e.g. <code>GET</code> and <code>PUT</code>
        / <code>DELETE</code>) for the same path caused corruption of the
        <code>FileResource</code> where some of the fields were set as if the
        file exists and some were set as if it does not. This resulted in
        inconsistent metadata. (markt)
      </fix>
      <fix>
        <bug>69415</bug>: Ensure that the <code>ExpiresFilter</code> only sets
        cache headers on <code>GET</code> and <code>HEAD</code> requests. Also
        skip requests where the application has set <code>Cache-Control:
        no-store</code>. (markt)
      </fix>
      <fix>
        <bug>69419</bug>: Improve the performance of
        <code>ServletRequest.getAttribute()</code> when there are multiple
        levels of nested includes. Based on a patch provided by John
        Engebretson. (markt)
      </fix>
      <add>
        All applications to send an early hints informational response by
        calling <code>HttpServletResponse.sendError()</code> with a status code
        of 103. (schultz)
      </add>
    </changelog>
  </subsection>
  <subsection name="Coyote">
    <changelog>
      <fix>
        Return null SSL session id on zero length byte array returned from the
        SSL implementation. (remm)
      </fix>
      <fix>
        Skip OpenSSLConf with BoringSSL since it is unsupported. (remm)
      </fix>
      <fix>
        Create the <code>HttpParser</code> in <code>Http11Processor</code>
        if it is not present on the <code>AbstractHttp11Protocol</code>
        to provide better lifecycle robustness for regular HTTP/1.1. The new
        behavior was introduced on a previous refactoring to improve HTTP/2
        performance. (remm)
      </fix>
      <fix>
        <code>OpenSSLContext</code> will now throw a
        <code>KeyManagementException</code> if something is known to have gone
        wrong in the <code>init</code> method, which is the behavior
        documented by <code>javax.net.ssl.SSLContext.init</code>. This makes
        error handling more consistent. (remm)
      </fix>
      <fix>
        <bug>69379</bug>: The default HEAD response no longer includes the
        payload HTTP header fields as per section 9.3.2 of RFC 9110. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Jasper">
    <changelog>
      <fix>
        Add back tag release method as deprecated in the runtime for compat
        with old generated code. (remm)
      </fix>
      <fix>
        <bug>69399</bug>: Fix regression caused by the improvement
        <bug>69333</bug> which caused the tag <code>release</code> to be called
        when using tag pooling, and to be skipped when not using it.
        Patch submitted by Michal Sobkiewicz. (remm)
      </fix>
      <fix>
        <bug>69381</bug>: Improve method lookup performance in expression
        language. When the required method has no arguments there is no need to
        consider casting or coercion and the method lookup process can be
        simplified. Based on pull request <pr>770</pr> by John Engebretson.
        (markt)
      </fix>
      <fix>
        <bug>69382</bug>: Improve the performance of the JSP include action by
        re-using results of relatively expensive method calls in the generated
        code rather than repeating them. Patch provided by John Engebretson.
        (markt)
      </fix>
      <fix>
        <bug>69398</bug>: Avoid unnecessary object allocation in
        <code>PageContextImpl</code>. Based on a suggestion by John Engebretson.
        (markt)
      </fix>
      <fix>
        <bug>69406</bug>: When using <code>StringInterpreterEnum</code>, do not
        throw an <code>IllegalArgumentException</code> when an invalid
        <code>Enum</code> is encountered. Instead, resolve the value at runtime.
        Patch provided by John Engebretson. (markt)
      </fix>
      <fix>
        <bug>69429</bug>: Optimise EL evaluation of method parameters for
        methods that do not accept any parameters. Patch provided by John
        Engebretson. (markt)
      </fix>
      <fix>
        Further optimise EL evaluation of method parameters. Patch provided by
        Paolo B. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Other">
    <changelog>
      <update>
        Switch from DigiCert ONE to ssl.com eSigner for code signing. (markt)
      </update>
      <update>
        Update Byte Buddy to 1.15.10. (markt)
      </update>
      <update>
        Update CheckStyle to 10.20.0. (markt)
      </update>
      <add>
        Improvements to German translations. (remm)
      </add>
    </changelog>
  </subsection>
</section>
<section name="Tomcat 10.1.31 (schultz)" rtext="2024-10-09">
  <subsection name="Catalina">
    <changelog>
      <fix>
        Ensure that <code>ServerAuthModule.initialize()</code> is called when
        a Jakarta Authentication module is configured via
        <code>registerServerAuthModule()</code>. (markt)
      </fix>
      <fix>
        Ensure that the Jakarta Authentication <code>CallbackHandler</code> only
        creates one <code>GenericPrincipal</code> in the <code>Subject</code>.
        (markt)
      </fix>
      <fix>
        If the Jakarta Authentication process fails with an Exception,
        explicitly set the HTTP response status to 500 as the
        <code>ServerAuthContext</code> may not have set it. (markt)
      </fix>
      <fix>
        When persisting the Jakarta Authentication provider configuration,
        create any necessary parent directories that don't already exist.
        (markt)
      </fix>
      <fix>
        Correct the logic used to detect errors when deleting temporary files
        associated with persisting the Jakarta Authentication provider
        configuration. (markt)
      </fix>
      <fix>
        When processing Jakarta Authentication callbacks, don't overwrite a
        Principal obtained from the <code>PasswordValidationCallback</code> with
        <code>null</code> if the <code>CallerPrincipalCallback</code> does not
        provide a Principal. (markt)
      </fix>
      <fix>
        Avoid store config backup loss when storing one configuration more than
        once per second. (remm)
      </fix>
      <fix>
        <bug>69359</bug>: <code>WebdavServlet</code> duplicates
        <code>getRelativePath()</code> method from super class with
        incorrect Javadoc. (michaelo)
      </fix>
      <fix>
        <bug>69360</bug>: Inconsistent <code>DELETE</code> behavior between
        <code>WebdavServlet</code> and <code>DefaultServlet</code>.
        (michaelo)
      </fix>
      <fix>
        Make <code>WebdavServlet</code> properly return the <code>Allow</code>
        header when deletion of a resource is not allowed. (michaelo)
      </fix>
      <fix>
        Add log warning if non wildcard mappings are used with the
        <code>WebdavServlet</code>. (remm)
      </fix>
      <fix>
        <bug>69361</bug>: Ensure that the order of entires in a multi-status
        response to a WebDAV is consistent with the order in which resources
        were processed. (markt)
      </fix>
      <fix>
        <bug>69362</bug>: Provide a better multi-status response when deleting a
        collection via WebDAV fails. Empty directories that cannot be deleted
        will now be included in the response. (markt)
      </fix>
      <fix>
        <bug>69363</bug>: Use <code>getPathPrefix()</code> consistently in the
        WebDAV servlet to ensure that the correct path is used when the WebDAV
        servlet is mounted at a sub-path within the web application. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Coyote">
    <changelog>
      <fix>
        <bug>69316</bug>: Ensure that
        <code>FastHttpDateFormat#getCurrentDate()</code> (used to generate Date
        headers for HTTP responses) generates the correct string for the given
        input. Prior to this change, the output may have wrong by one second in
        some cases. Pull request <pr>751</pr> provided by Chenjp. (markt)
      </fix>
      <fix>
        Request start time may not have been accurately recorded for HTTP/1.1
        requests preceded by a large number of blank lines. (markt)
      </fix>
      <add>
        Add <code>server</code> and <code>serverRemoveAppProvidedValues</code>
        to the list of attributes the HTTP/2 protocol will inherit from the
        HTTP/1.1 connector it is nested within. (markt)
      </add>
      <fix>
        Avoid possible crashes when using Apache Tomcat Native, caused by
        destroying SSLContext objects through GC after APR has been terminated.
        (remm)
      </fix>
      <fix>
        Improve HTTP/2 handling of trailer fields for requests. Trailer fields
        no longer need to be recieved before the headers of the subsequent
        stream nor are trailer fields for an in progress stream swallowed if the
        Connector is paused before the trailer fields are received. (markt)
      </fix>
      <fix>
        Ensure the request and response are not recycled too soon for an HTTP/2
        stream when a stream level error is detected during the processing of
        incoming HTTP/2 frames. This could lead to incorrect processing times
        appearing in the access log. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Jasper">
    <changelog>
      <fix>
        <bug>69333</bug>: Remove unnecessary code from generated JSPs. (markt)
      </fix>
      <fix>
        <bug>69338</bug>: Improve the performance of processing expressions that
        include AND or OR operations with more than two operands and expressions
        that use <code>not empty</code>. (markt)
      </fix>
      <fix>
        <bug>69348</bug>: Reduce memory consumption in <code>ELContext</code> by
        using lazy initialization for the data structure used to track lambda
        arguments. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Web applications">
    <changelog>
      <fix>
        The manager webapp will now be able to access certificates again when
        OpenSSL is used. (remm)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Other">
    <changelog>
      <update>
        Update Byte Buddy to 1.15.3. (markt)
      </update>
      <update>
        Update CheckStyle to 10.18.2. (markt)
      </update>
      <add>
        Improvements to French translations. (remm)
      </add>
      <add>
        Improvements to Japanese translations by tak7iji. (markt)
      </add>
      <add>
        Improvements to Chinese translations by Ch_jp. (markt)
      </add>
    </changelog>
  </subsection>
</section>
<section name="Tomcat 10.1.30 (schultz)" rtext="2024-09-17">
  <subsection name="Coyote">
    <changelog>
      <fix>
        Fix <bug>69320</bug>, a regression in the fix for <bug>69302</bug> that
        meant the HTTP/2 processing was likely to be broken for all clients once
        any client sent an HTTP/2 reset frame. (markt)
      </fix>
    </changelog>
  </subsection>
</section>
<section name="Tomcat 10.1.29 (schultz)" rtext="2024-09-10">
  <subsection name="Catalina">
    <changelog>
      <fix>
        Improve performance of
        <code>ApplicationHttpRequest.parseParameters()</code>. Based on sample
        code and test cases provided by John Engebretson. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Coyote">
    <changelog>
      <fix>
        Correct a regression in the fix for non-blocking reads of chunked
        request bodies that caused <code>InputStream.available()</code> to
        return a non-zero value when there was no data to read. In some
        circumstances this could cause a blocking read to block waiting for more
        data rather than return the data it had already received. (markt)
      </fix>
      <add>
        Add a new attribute <code>cookiesWithoutEquals</code> to the
        <code>Rfc6265CookieProcessor</code>. The default behaviour is unchanged.
        (markt)
      </add>
      <fix>
        Ensure that Tomcat sends a TLS close_notify message after receiving one
        from the client when using the <code>OpenSSLImplementation</code>.
        (markt)
      </fix>
      <fix>
        <bug>69301</bug>: Fix trailer headers replacing non-trailer headers when
        writing response headers to the access log. Based on a patch and test
        case provided by hypnoce. (markt)
      </fix>
      <fix>
        <bug>69302</bug>: If an HTTP/2 client resets a stream before the request
        body is fully written, ensure that any <code>ReadListener</code> is
        notified via a call to <code>ReadListener.onErrror()</code>. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Jasper">
    <changelog>
      <fix>
        Switch the <code>TldScanner</code> back to logging detailed scan
        results at debug level rather than trace level. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="WebSocket">
    <changelog>
      <fix>
        If a blocking message write exceeds the timeout, don't attempt the write
        again before throwing the exception. (markt)
      </fix>
      <fix>
        An EncodeException being thrown during a message write should not
        automatically cause the connection to close. The application should
        handle the exception and make the decision whether or not to close the
        connection. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Web applications">
    <changelog>
      <fix>
        Documentation. Align the logging configuration documentation with the
        current defaults. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="jdbc-pool">
    <changelog>
      <fix>
        <bug>69255</bug>: Correct a regression in the fix for <bug>69206</bug>
        that meant exceptions executing statements were wrapped in an
        <code>java.lang.reflect.UndeclaredThrowableException</code> rather than
        the application seeing the original <code>SQLException</code>. Fixed
        by pull request <pr>744</pr> provided by Michael Clarke. (markt)
      </fix>
      <fix>
        <bug>69279</bug>: Correct a regression in the fix for <bug>69206</bug>
        that meant that methods that previously returned a <code>null</code>
        <code>ResultSet</code> were returning a proxy with a null delegate.
        Fixed by pull request <pr>745</pr> provided by Huub de Beer. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Other">
    <changelog>
      <add>
        Exclude the <code>tomcat-coyote-ffm.jar</code> from JAR scanning by
        default. (markt)
      </add>
      <fix>
        Change the default log handler level to <code>ALL</code> so log messages
        are not dropped by default if a logger is configured to use trace
        (<code>FINEST</code>) level logging. (markt)
      </fix>
      <update>
        Update Hamcrest to 3.0. (markt)
      </update>
      <update>
        Update EasyMock to 5.4.0. (markt)
      </update>
      <update>
        Update Byte Buddy to 1.15.0. (markt)
      </update>
      <update>
        Update CheckStyle to 10.18.0. (markt)
      </update>
      <update>
        Update the internal fork of Apache Commons BCEL to 6.10.0. (markt)
      </update>
      <add>
        Improvements to Spanish translations by Fernando. (markt)
      </add>
      <add>
        Improvements to French translations. (remm)
      </add>
      <add>
        Improvements to Japanese translations by tak7iji. (markt)
      </add>
    </changelog>
  </subsection>
</section>
<section name="Tomcat 10.1.28 (schultz)" rtext="2024-08-06">
  <subsection name="Coyote">
    <changelog>
      <fix>
        Correct regressions in the refactoring that added recycling of the
        coyote request and response to the HTTP/2 processing. (markt)
      </fix>
    </changelog>
  </subsection>
</section>
<section name="Tomcat 10.1.27 (schultz)" rtext="not released">
  <subsection name="Catalina">
    <changelog>
      <add>
        Add support for RFC 8297 (Early Hints). Applications can use this
        feature by casting the <code>HttpServletResponse</code> to
        <code>org.apache.catalina.connector.Reponse</code> and then calling the
        method <code>void sendEarlyHints()</code>. This method will be added to
        the Servlet API (removing the need for the cast) in Servlet 6.2 onwards.
        (markt)
      </add>
      <fix>
        <bug>69214</bug>: Do not reject a CORS request that uses POST but does
        not include a <code>content-type</code> header. Tomcat now correctly
        processes this as a simple CORS request. Based on a patch suggested by
        thebluemountain. (markt)
      </fix>
      <fix>
        Refactor <code>SpnegoAuthenticator</code> so it uses
        <code>Subject.callAs()</code> rather than <code>Subject.doAs()</code>
        when the available. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Coyote">
    <changelog>
      <fix>
        Ensure that HTTP/2 stream input buffers are only created when there is a
        request body to be read. (markt)
      </fix>
      <scode>
        Refactor creation of HttpParser instances from the Processor level to
        the Protocol level since the parser configuration depends on the
        protocol and the parser is, otherwise, stateless. (markt)
      </scode>
      <add>
        Align HTTP/2 with HTTP/1.1 and recycle the container internal request
        and response processing objects by default. This behaviour can be
        controlled via the new <code>discardRequestsAndResponses</code>
        attribute on the HTTP/2 upgrade protocol. (markt)
      </add>
    </changelog>
  </subsection>
  <subsection name="jdbc-pool">
    <changelog>
      <fix>
        <bug>69206</bug>: Ensure statements returned from <code>Statement</code>
        methods <code>executeQuery()</code>, <code>getResultSet()</code> and
        <code>getGeneratedKeys()</code> are correctly wrapped before being
        returned to the caller. Based on pull request <pr>742</pr> provided by
        Michael Clarke.
      </fix>
    </changelog>
  </subsection>
  <subsection name="Other">
    <changelog>
      <fix>
        Fix packaging regression with missing osgi information following
        addition of the <code>test-only</code> build target. (remm)
      </fix>
      <update>
        Update Tomcat Native to 2.0.8. (markt)
      </update>
      <update>
        Update Byte Buddy to 1.14.18. (markt)
      </update>
      <add>
        Improvements to French translations. (remm)
      </add>
      <add>
        Improvements to Japanese translations by tak7iji. (markt)
      </add>
    </changelog>
  </subsection>
</section>
<section name="Tomcat 10.1.26 (schultz)" rtext="2024-07-12">
  <subsection name="Catalina">
    <changelog>
      <fix>
        Allow <code>JAASRealm</code> to use the configuration source to load a
        configured <code>configFile</code>, for easier use with testing. (remm)
      </fix>
      <fix>
        Add missing algorithm callback to the <code>JAASCallbackHandler</code>.
        (remm)
      </fix>
      <fix>
        Add the OpenSSL version number on the APR and OpenSSL status classes.
        (remm)
      </fix>
      <fix>
        <bug>69131</bug>: Expand the implementation of the <code>filter</code>
        value of the Authenticator attribute <code>allowCorsPreflight</code>, so
        that it applies to all requests that match the configured URL patterns
        for the CORS filter, rather than only applying if the CORS filter is
        mapped to <code>/*</code>. (markt)
      </fix>
      <fix>
        Using the <code>OpenSSLListener</code> will now cause the connector to
        use OpenSSL if available. (remm)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Coyote">
    <changelog>
      <fix>
        Clean and log OpenSSL errors before processing of OpenSSL conf commands
        in the FFM code. (remm)
      </fix>
      <fix>
        <bug>69121</bug>: Ensure that the <code>onComplete()</code> event is
        triggered if <code>AsyncListener.onError()</code> dispatches to a target
        that throws an exception. (markt)
      </fix>
      <fix>
        Following the trailer header field refactoring, <code>-1</code> is no
        longer an allowed value for <code>maxTrailerSize</code>. Adjust
        documentation accordingly. (remm)
      </fix>
      <update>
        Move OpenSSL support using FFM to a separate JAR named
        <code>tomcat-coyote-ffm.jar</code> that advertises Java 22 in its
        manifest. (remm)
      </update>
      <fix>
        Fix search for OpenSSL library for FFM on Mac OS so that
        <code>java.library.path</code> is searched. (markt)
      </fix>
      <update>
        Add FFM compatibility methods for LibreSSL support. Renegotiation is
        not supported at the moment. (remm)
      </update>
      <update>
        Add <code>org.apache.tomcat.util.openssl.LIBRARY_NAME</code> (specifies
        the name of the library to load) and
        <code>org.apache.tomcat.util.openssl.USE_SYSTEM_LOAD_LIBRARY</code>
        (set to <code>true</code> to use <code>System.loadLibrary</code> rather
        than the FFM library loading code) to configure the OpenSSL library
        loading using FFM. (remm)
      </update>
      <update>
        Add FFM compatibility methods for BoringSSL support. Renegotiation is
        not supported in many cases. (remm)
      </update>
    </changelog>
  </subsection>
  <subsection name="Jasper">
    <changelog>
      <fix>
        Update the optimisation in <code>jakarta.el.ImportHandler</code> so it
        is aware of new classes added to the <code>java.lang</code> package in
        Java 23. (markt)
      </fix>
      <fix>
        Ensure that an exception in <code>toString()</code> still results in an
        <code>ELException</code> when an object is coerced to a String using
        <code>ExpressionFactory.coerceToType()</code>. (markt)
      </fix>
      <add>
        Add support for specifying Java 24 (with the value <code>24</code>) as
        the compiler source and/or compiler target for JSP compilation. If used
        with an Eclipse JDT compiler version that does not support these values,
        a warning will be logged and the default will used.
        (markt)
      </add>
      <fix>
        <bug>69135</bug>: When using include directives in a tag file packaged
        in a JAR file, ensure that context relative includes are processed
        correctly. (markt)
      </fix>
      <fix>
        <bug>69135</bug>: When using include directives in a tag file packaged
        in a JAR file, ensure that file relative includes are processed
        correctly. (markt)
      </fix>
      <fix>
        <bug>69135</bug>: When using include directives in a tag file packaged
        in a JAR file, ensure that file relative includes are are not permitted
        to access files outside of the <code>/META_INF/tags/</code> directory
        nor outside of the JAR file. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Web applications">
    <changelog>
      <fix>
        Fix status servlet detailed view of the connectors when using automatic
        port. (remm)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Other">
    <changelog>
      <update>
        Add <code>test-only</code> build target to allow running only the
        testsuite, supporting Java versions down to the minimum supported
        to run Tomcat. (rjung)
      </update>
      <update>
        Update UnboundID to 7.0.1. (markt)
      </update>
      <update>
        Update to SpotBugs 4.8.6. (markt)
      </update>
      <update>
        Remove cglib dependency as it is not required by the version of EasyMock
        used by the unit tests. (markt)
      </update>
      <update>
        Update EasyMock to 5.3.0. This adds a test dependency on Byte-Buddy
        1.14.17. (markt)
      </update>
      <add>
        Improvements to Czech translations by Vladimír Chlup. (markt)
      </add>
      <add>
        Improvements to French translations. (remm)
      </add>
      <add>
        Improvements to Japanese translations by tak7iji. (markt)
      </add>
      <add>
        Improvements to Chinese translations by fangzheng. (markt)
      </add>
    </changelog>
  </subsection>
</section>
<section name="Tomcat 10.1.25 (schultz)" rtext="2024-06-19">
  <subsection name="Catalina">
    <changelog>
      <add>
        Add support for shallow copies when using WebDAV. (markt)
      </add>
      <scode>
        Deprecate the <code>WebdavFixFilter</code> as it is no longer required.
        (markt)
      </scode>
      <fix>
        <bug>69066</bug>: Fix regression in SPNEGO authenticator when
        processing Base64. Submitted by Daniel Lyko. (remm)
      </fix>
      <add>
        Add <code>RealmBase.getPrincipal(GSSName, GSSCredential, GSSContext)</code>
        for retrieving extended/additional information from an established
        GSS context. (michaelo)
      </add>
      <fix>
        Correct a regression in the fix for <bug>68721</bug> that caused some
        instances of <code>LinkageError</code> to be reported as
        <code>ClassNotFoundException</code>. (markt)
      </fix>
      <fix>
        Ensure that static resources deployed via a JAR file remain accessible
        when the context is configured to use a bloom filter. Based on pull
        request <pr>730</pr> provided by bergander. (markt)
      </fix>
      <add>
        Introduce reference counting so the <code>AprLifecycleListener</code>
        is more robust. This particularly targets more complex embedded
        configurations with multiple server instances with independent
        lifecycles where more than one server instance requires the
        <code>AprLifecycleListener</code>. (markt)
      </add>
    </changelog>
  </subsection>
  <subsection name="Coyote">
    <changelog>
      <fix>
        Fix OpenSSL FFM use of ERR_error_string with a 128 byte buffer,
        and use ERR_error_string_n instead. (remm)
      </fix>
      <fix>
        Fix a crash on Windows setting CA certificate on null path.
        (remm)
      </fix>
      <fix>
        <bug>69068</bug>: Ensure read timouts are triggered for asynchronous,
        non-blocking reads when using HTTP/2. (markt)
      </fix>
      <update>
        <bug>69133</bug>: Add task queue size configuration on the
        <code>Connector</code> element, similar to the <code>Executor</code>
        element, for consistency. (remm)
      </update>
      <fix>
        Make counting of active HTTP/2 streams per connection more robust.
        (markt)
      </fix>
      <add>
        Add support for TLS 1.3 client initiated re-keying. (markt)
      </add>
      <fix>
        Improve the algorithm used to identify the IP address to use to unlock
        the acceptor thread when a Connector is listening on all local
        addresses. Interfaces that are configured for point to point connections
        or are not currently up are now skipped. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Jasper">
    <changelog>
      <fix>
        <bug>68546</bug>: Small additional optimisation for initial loading of
        Servlet code generated for JSPs. Based on a suggestion by Dan Armstrong.
        (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Web applications">
    <changelog>
      <add>
        Add the ability to set a sub-title for the Manager web application main
        page. This is intended to allow users with lots of instances to easily
        distinguish them. Based on pull request <pr>724</pr> by Simon Arame.
        (markt)
      </add>
    </changelog>
  </subsection>
  <subsection name="Other">
    <changelog>
      <update>
        Revert Derby to 10.16.1.1 as that is the latest version of Derby that
        runs on Java 17. (markt)
      </update>
      <update>
        Update to Commons Daemon 1.4.0. (markt)
      </update>
      <update>
        Update to Objenesis 3.4. (markt)
      </update>
      <update>
        Update to Checkstyle 10.17.0. (markt)
      </update>
      <update>
        Update to SpotBugs 4.8.5. (markt)
      </update>
      <add>
        Improvements to French translations. (remm)
      </add>
      <add>
        Improvements to Japanese translations by tak7iji. (markt)
      </add>
    </changelog>
  </subsection>
</section>
<section name="Tomcat 10.1.24 (schultz)" rtext="2024-05-13">
  <subsection name="Catalina">
    <changelog>
      <add>
        Small performance optimization when logging cookies with no values.
        (schultz)
      </add>
      <fix>
        Correct error handling for asynchronous requests. If the application
        performs an dispatch during <code>AsyncListener.onError()</code> the
        dispatch is now performed rather than completing the request using the
        error page mechanism. (markt)
      </fix>
      <add>
        Re-factor ElapsedTimeElement in AbstractAccessLogValve to use a customizable
        style. (schultz)
      </add>
      <add>
        Add more timescale options to AccessLogValve and ExtendedAccessLogValve.
        Allow timescales to apply to "time-taken" token in ExtendedAccessLogValve.
        (schultz)
      </add>
      <fix>
        Fix WebDAV lock null (locks for non existing resources) thread safety
        and removal. (remm)
      </fix>
      <fix>
        Add periodic checking for WebDAV locks expiration. (remm)
      </fix>
      <fix>
        Extend <code>Asn1Parser</code> to parse <code>UTF8String</code>s. (michaelo)
      </fix>
      <fix>
        Remove MBean metadata for attibutes that have been removed. Based on
        pull request <pr>719</pr> by Shawn Q. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Coyote">
    <changelog>
      <fix>
        Align non-secure and secure writes with NIO and skip the write attempt
        when there are no bytes to be written. (markt)
      </fix>
      <fix>
        Allow any positive value for <code>socket.unlockTimeout</code>. If a
        negative or zero value is configured, the default of <code>250ms</code>
        will be used. (mark)
      </fix>
      <fix>
        Reduce the time spent waiting for the connector to unlock. The previous
        default of 10s was noticeably too long for cases where the unlock has
        failed. The wait time is now 100ms plus twice
        <code>socket.unlockTimeout</code>. (markt)
      </fix>
      <fix>
        Ensure that the <code>onAllDataRead()</code> event is triggered when the
        request body uses chunked encoding and is read using non-blocking IO.
        (markt)
      </fix>
      <fix>
        <bug>68934</bug>: Add debug logging in the latch object when exceeding
        <code>maxConnections</code>. (remm)
      </fix>
      <fix>
        Refactor trailer field handling to use a <code>MimeHeaders</code>
        instance to store trailer fields. (markt)
      </fix>
      <fix>
        Ensure that multiple instances of the same trailer field are handled
        correctly. (markt)
      </fix>
      <fix>
        Fix non-blocking reads of chunked request bodies. (markt)
      </fix>
      <fix>
        When an invalid HTTP response header was dropped, an off-by-one error
        meant that the first header in the response was also dropped. Fix based
        on pull request <pr>710</pr> by foremans. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Jasper">
    <changelog>
      <add>
        Add support for specifying Java 23 (with the value <code>23</code>) as
        the compiler source and/or compiler target for JSP compilation. If used
        with an Eclipse JDT compiler version that does not support these values,
        a warning will be logged and the default will used.
        (markt)
      </add>
    </changelog>
  </subsection>
  <subsection name="WebSocket">
    <changelog>
      <fix>
        <bug>69844</bug>: Close the connection with a protocol error if the
        server sends masked frames. (markt)
      </fix>
      <fix>
        <bug>68884</bug>: Reduce the write timeout when writing WebSocket close
        messages for abnormal closes. The timeout defaults to 50 milliseconds
        and may be controlled using the
        <code>org.apache.tomcat.websocket.ABNORMAL_SESSION_CLOSE_SEND_TIMEOUT</code>
        property in the user properties collection associated with the WebSocket
        session. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Web applications">
    <changelog>
      <fix>
        Examples: Improve performance of WebSocket chat application when
        multiple clients disconnect at the same time. (markt)
      </fix>
      <update>
        Examples: Increase the number of previous messages displayed when using
        the WebSocket chat application. (markt)
      </update>
      <fix>
        Examples: Improve performance of WebSocket snake application when
        multiple clients disconnect at the same time. (markt)
      </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. The internal fork of
        Commons Codec has been deprecated and will be removed in Tomcat 11.
        (markt)
      </update>
      <update>
        Update NSIS to 3.10. (mark0t)
      </update>
      <update>
        Update UnboundID to 7.0.0. (markt)
      </update>
      <update>
        Update Checkstyle to 10.16.0. (markt)
      </update>
      <update>
        Update JaCoCo to 0.8.12. (markt)
      </update>
      <update>
        Update SpotBugs to 4.8.4. (markt)
      </update>
      <update>
        Update the internal fork of Apache Commons BCEL to 6.9.0. (markt)
      </update>
      <update>
        Update the internal fork of Apache Commons DBCP to 2.12.0. (markt)
      </update>
      <add>
        Improvements to French translations. (remm)
      </add>
      <add>
        Improvements to Japanese translations by tak7iji. (markt)
      </add>
    </changelog>
  </subsection>
</section>
<section name="Tomcat 10.1.23 (schultz)" rtext="2024-04-23">
  <subsection name="Catalina">
    <changelog>
      <update>
        Deprecate and remove <code>sessionCounter</code> (replaced by the
        addition of the active session count and the expired session count,
        as a reasonable approximation) and <code>duplicates</code> (which
        does not represent a possible event in current implementations)
        statistics from the session manager. (remm)
      </update>
      <fix>
        <bug>68890</bug> Align output encoding of JSPs in the Manager webapp
        with the XML declarations in those same files. (schultz)
      </fix>
      <fix>
        Update Basic authentication to implement the requirements of RFC 7617
        including the changing of the <code>trimCredentials</code> setting which
        is now defaults to <code>false</code>. Note that the
        <code>trimCredentials</code> setting will be removed in Tomcat 11.
        (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Coyote">
    <changelog>
      <fix>
        Fix bnd jar descriptor to include the OpenSSL FFM support. (remm)
      </fix>
      <fix>
        Add OpenSSL FFM classes to <code>tomcat-embed-core.jar</code>. (remm)
      </fix>
    </changelog>
  </subsection>
</section>
<section name="Tomcat 10.1.22 (schultz)" rtext="not released">
  <subsection name="Other">
    <changelog>
      <fix>
        Release re-built using correct JDK version.
      </fix>
    </changelog>
  </subsection>
</section>
<section name="Tomcat 10.1.21 (schultz)" rtext="not released">
  <subsection name="Catalina">
    <changelog>
      <fix>
        Change the thread-safety mechanism for protecting StandardServer.services
        from a simple synchronized lock to a ReentrantReadWriteLock to allow
        multiple readers to operate simultaneously. Based upon a suggestion by
        Markus Wolfe. (schultz)
      </fix>
      <fix>
        Improve Service connectors, Container children and Service executors
        access sync using a ReentrantReadWriteLock. (remm)
      </fix>
      <fix>
        Improve handling of integer overflow if an attempt is made to upload a
        file via the Servlet API and the file is larger than
        <code>Integer.MAX_VALUE</code>. (markt)
      </fix>
      <fix>
        <bug>68862</bug>: Handle possible response commit when processing read
        errors. (remm)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Coyote">
    <changelog>
      <add>
        Add OpenSSL integration using the FFM API rather than Tomcat Native.
        OpenSSL support may be enabled by adding the
        <code>org.apache.catalina.core.OpenSSLLifecycleListener</code>
        listener on the <code>Server</code> element when using Java 22
        or later. (remm)
      </add>
    </changelog>
  </subsection>
  <subsection name="Other">
    <changelog>
      <update>
        Update the internal fork of Apache Commons BCEL to 6.8.2. (markt)
      </update>
      <update>
        Update the internal fork of Apache Commons Codec to 1.16.1. (markt)
      </update>
      <add>
        Improvements to French translations. (remm)
      </add>
      <add>
        Improvements to Japanese translations by tak7iji. (remm)
      </add>
      <add>
        Improvements to Chinese translations by leeyazhou. (remm)
      </add>
    </changelog>
  </subsection>
</section>
<section name="Tomcat 10.1.20 (schultz)" rtext="2024-03-25">
  <subsection name="Catalina">
    <changelog>
      <fix>
        Minor performance improvement for building filter chains. Based on
        ideas from pull request <pr>702</pr> by Luke Miao. (remm)
      </fix>
      <fix>
        Align error handling for <code>Writer</code> and
        <code>OutputStream</code>. Ensure use of either once the response has
        been recycled triggers a <code>NullPointerException</code> provided that
        <code>discardFacades</code> is configured with the default value of
        <code>true</code>. (markt)
      </fix>
      <fix>
        <bug>68692</bug>: The standard thread pool implementations that are
        configured using the <code>Executor</code> element now implement
        <code>ExecutorService</code> for better support NIO2. (remm)
      </fix>
      <fix>
        <bug>68495</bug>: When restoring a saved POST request after a successful
        FORM authentication, ensure that neither the URI, the query string nor
        the protocol are corrupted when restoring the request body. (markt)
      </fix>
      <fix>
        After forwarding a request, attempt to unwrap the response in order to
        suspend it, instead of simply closing it if it was wrapped. Add a new
        <code>suspendWrappedResponseAfterForward</code> boolean attribute on
        <code>Context</code> to control the bahavior, defaulting to
        <code>false</code>. (remm)
      </fix>
      <fix>
        <bug>68721</bug>: Workaround a possible cause of duplicate class
        definitions when using <code>ClassFileTransformer</code>s and the
        transformation of a class also triggers the loading of the same class.
        (markt)
      </fix>
      <fix>
        The rewrite valve should not do a rewrite if the output is identical
        to the input. (remm)
      </fix>
      <update>
        Add a new <code>valveSkip</code> (or <code>VS</code>) rule flag to the
        rewrite valve to allow skipping over the next valve in the Catalina
        pipeline. (remm)
      </update>
      <update>
        Add <code>highConcurrencyStatus</code> attribute to the
        <code>SemaphoreValve</code> to optionally allow the valve to return an
        error status code to the client when a permit cannot be acquired from
        the semaphore. (remm)
      </update>
      <add>
        Add checking of the "age" of the running Tomcat instance since its
        build-date to the SecurityListener, and log a warning if the server
        is old. (schultz)
      </add>
      <fix>
        When using the <code>AsyncContext</code>, throw an
        <code>IllegalStateException</code>, rather than allowing an
        <code>NullPointerException</code>, if an attempt is made to use the
        <code>AsyncContext</code> after it has been recycled. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Coyote">
    <changelog>
      <fix>
        Improve the HTTP/2 stream prioritisation process. If a stream uses all
        of the connection windows and still has content to write, it will now be
        added to the backlog immediately rather than waiting until the write
        attempt for the remaining content. (markt)
      </fix>
      <fix>
        Add <code>threadsMaxIdleTime</code> attribute to the endpoint,
        to allow configuring the amount of time before an internal executor
        will scale back to the configured <code>minSpareThreads</code> size.
        (remm)
      </fix>
      <fix>
        Correct a regression in the support for user provided
        <code>SSLContext</code> instances that broke the
        <code>org.apache.catalina.security.TLSCertificateReloadListener</code>.
        (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Jasper">
    <changelog>
      <add>
        Add support for specifying Java 22 (with the value <code>22</code>) as
        the compiler source and/or compiler target for JSP compilation. If used
        with an Eclipse JDT compiler version that does not support these values,
        a warning will be logged and the default will used.
        (markt)
      </add>
      <fix>
        Handle the case where the JSP engine forwards a request/response to a
        Servlet that uses an <code>OutputStream</code> rather than a
        <code>Writer</code>. This was triggering an
        <code>IllegalStateException</code> on code paths where there was a
        subsequent attempt to obtain a <code>Writer</code>. (markt)
      </fix>
      <fix>
        Correctly handle the case where a tag library is packaged in a JAR file
        and the web application is deployed as a WAR file rather than an
        unpacked directory. (markt)
      </fix>
      <fix>
        Prevent the web application's ClassLoader from being pinned by the JSP
        compiler if an application uses a custom XMLInputFactory. Based upon a
        suggestion from Simon Niederberger. (schultz)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Cluster">
    <changelog>
      <fix>
        Avoid updating request count stats on async. (remm)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Other">
    <changelog>
      <add>
        Improvements to French translations. (remm)
      </add>
      <add>
        Improvements to Japanese translations by tak7iji. (markt)
      </add>
      <fix>
        <bug>57130</bug>: Allow digest.(sh|bat) to accept password from a file
        or stdin. (csutherl/schultz)
      </fix>
      <update>
        Update Checkstyle to 10.14.1. (markt)
      </update>
    </changelog>
  </subsection>
</section>
<section name="Tomcat 10.1.19 (schultz)" rtext="2024-02-19">
  <subsection name="Catalina">
    <changelog>
      <fix>
        Correct JPMS and OSGi meta-data for <code>tomcat-embed-core.jar</code>
        by removing reference to <code>org.apache.catalina.ssi</code> package
        that is no longer included in the JAR. Based on pull request
        <pr>684</pr> by Jendrik Johannes. (markt)
      </fix>
      <fix>
        Fix ServiceBindingPropertySource so that trailing <code>\r\n</code>
        sequences are correctly removed from files containing property values
        when configured to do so. Bug identified by Coverity Scan. (markt)
      </fix>
      <add>
        Add improvements to the CSRF prevention filter including the ability
        to skip adding nonces for resource name and subtree URL patterns. (schultz)
      </add>
      <fix>
        Review usage of debug logging and downgrade trace or data dumping
        operations from debug level to trace. (remm)
      </fix>
      <fix>
        <bug>68089</bug>: Further improve the performance of request attribute
        access for <code>ApplicationHttpRequest</code> and
        <code>ApplicationRequest</code>. (markt)
      </fix>
      <fix>
        <bug>68559</bug>: Allow asynchronous error handling to write to the
        response after an error during asynchronous processing. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Coyote">
    <changelog>
      <fix>
        Setting a <code>null</code> value for a cookie attribute should remove
        the attribute. (markt)
      </fix>
      <fix>
        Make asynchronous error handling more robust. Ensure that once a
        connection is marked to be closed, further asynchronous processing
        cannot change that. (markt)
      </fix>
      <fix>
        Make asynchronous error handling more robust. Ensure that once the call
        to <code>AsyncListener.onError()</code> has returned to the container,
        only container threads can access the <code>AsyncContext</code>. This
        protects against various race conditions that would otherwise occur if
        application threads continued to access the <code>AsyncContext</code>.
      </fix>
      <fix>
        Review usage of debug logging and downgrade trace or data dumping
        operations from debug level to trace. In particular, most of the
        HTTP/2 debug logging has been changed to trace level. (remm)
      </fix>
      <fix>
        Add support for user provided <code>SSLContext</code> instances
        configured on <code>SSLHostConfigCertificate</code> instances. Based on
        pull request <pr>673</pr> provided by Hakan Altındağ. (markt)
      </fix>
      <fix>
        Partial fix for <bug>68558</bug>: Cache the result of converting to
        <code>String</code> for request URI, HTTP header names and the request
        <code>Content-Type</code> value to improve performance by reducing
        repeated <code>byte[]</code> to <code>String</code> conversions. (markt)
      </fix>
      <fix>
        Improve error reporting to HTTP/2 clients for header processing errors
        by reporting problems at the end of the frame where the error was
        detected rather than at the end of the headers. (markt)
      </fix>
      <fix>
       Remove the remaining reference to a stream once the stream has been
       recycled. This makes the stream eligible for garbage collection earlier
       and thereby improves scalability. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Jasper">
    <changelog>
      <fix>
        <bug>68546</bug>: Generate optimal size and types for JSP imports maps,
        as suggested by John Engebretson. (remm)
      </fix>
      <fix>
        Review usage of debug logging and downgrade trace or data dumping
        operations from debug level to trace. (remm)
      </fix>
    </changelog>
  </subsection>
  <subsection name="WebSocket">
    <changelog>
      <fix>
        Correct a regression in the fix for <bug>66508</bug> that could cause an
        <code>UpgradeProcessor</code> leak in some circumstances. (markt)
      </fix>
      <fix>
        Review usage of debug logging and downgrade trace or data dumping
        operations from debug level to trace. (remm)
      </fix>
      <fix>
        Ensure that WebSocket connection closure completes if the connection is
        closed when the server side has used the proprietary suspend/resume
        feature to suspend the connection. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Web applications">
    <changelog>
      <add>
        Add support for responses in JSON format from the examples application
        RequestHeaderExample. (schultz)
      </add>
    </changelog>
  </subsection>
  <subsection name="Other">
    <changelog>
      <fix>
        Correct the remaining OSGi contract references in the manifest files to
        refer to the Jakarta EE contract names rather than the Java EE contract
        names. Based on pull request <pr>685</pr> provided by Paul A. Nicolucci.
        (markt)
      </fix>
      <update>
        Update Checkstyle to 10.13.0. (markt)
      </update>
      <update>
        Update JSign to 6.0. (markt)
      </update>
      <update>
        Update the packaged version of the Tomcat Migration Tool for Jakarta EE
        to 1.0.7. (markt)
      </update>
      <update>
        Update Tomcat Native to 2.0.7. (markt)
      </update>
      <update>
        Add strings for debug level messages. (remm)
      </update>
      <add>
        Improvements to French translations. (remm)
      </add>
      <add>
        Improvements to Japanese translations by tak7iji. (markt)
      </add>
    </changelog>
  </subsection>
</section>
<section name="Tomcat 10.1.18 (schultz)" rtext="2024-01-09">
  <subsection name="Catalina">
    <changelog>
      <update>
        <bug>68378</bug>: Align extension to MIME type mappings in the global
        web.xml with those in httpd by adding
        <code>application/vnd.geogebra.slides</code> for <code>ggs</code>,
        <code>text/javascript</code> for <code>mjs</code> and
        <code>audio/ogg</code> for opus. (markt)
      </update>
    </changelog>
  </subsection>
  <subsection name="Coyote">
    <changelog>
      <fix>
        Refactor the <code>VirtualThreadExecutor</code> so that it can be used
        by the NIO2 connector which was using platform threads even when
        configured to use virtual threads. (markt)
      </fix>
      <fix>
        Correct a regression in the fix for <bug>67675</bug> that broke TLS key
        file parsing for PKCS#8 format keys that do not specify an explicit
        pseudo-random function and rely on the default. This typically affects
        keys generated by OpenSSL 1.0.2. (markt)
      </fix>
      <fix>
        Allow multiple operations with the same name on introspected mbeans,
        fixing a regression caused by the introduction of a second
        <code>addSslHostConfig</code> method. (remm)
      </fix>
      <fix>
        Relax the check that the HTTP Host header is consistent with the host
        used in the request line, if any, to make the check case insensitive
        since host names are case insensitive. (markt)
      </fix>
      <add>
        <bug>68348</bug>: Add support for the partitioned attribute for cookies
        including session cookies. (markt)
      </add>
    </changelog>
  </subsection>
  <subsection name="Web Applications">
    <changelog>
      <fix>
        <bug>68035</bug>: Additional fix to the Manager application to enable
        the deployment of a web application located in a Host's
        <code>appBase</code> where the web application is specified by a bare
        (no path) WAR or directory name as shown in the documentation. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Other">
    <changelog>
      <update>
        Update Checkstyle to 10.12.7. (markt)
      </update>
      <update>
        Update SpotBugs to 4.8.3. (markt)
      </update>
      <add>
        Improvements to French translations. (remm)
      </add>
      <add>
        Improvements to Japanese translations by tak7iji. (markt)
      </add>
    </changelog>
  </subsection>
</section>
<section name="Tomcat 10.1.17 (schultz)" rtext="2023-12-12">
  <subsection name="Catalina">
    <changelog>
      <fix>
        Background processes should not be run concurrently with lifecycle
        operations of a container. (remm)
      </fix>
      <fix>
        Correct unintended escaping of XML in some WebDAV responses. The XML
        list of support locks when provided in response to a PROPFIND request
        was incorrectly XML escaped. (markt)
      </fix>
      <fix>
        <bug>68227</bug>: Ensure that <code>AsyncListener.onComplete()</code> is
        called if <code>AsyncListener.onError()</code> calls
        <code>AsyncContext.dispatch()</code>. (markt)
      </fix>
      <fix>
        <bug>68228</bug>: Use a 408 status code if a read timeout occurs during
        HTTP request processing. Includes a test case based on code provided by
        adwsingh. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Jasper">
    <changelog>
      <scode>
        <bug>68119</bug>: Refactor the <code>CompositeELResolver</code> to
        improve performance during type conversion operations. (markt)
      </scode>
    </changelog>
  </subsection>
  <subsection name="Web Applications">
    <changelog>
      <fix>
        Examples. Improve the error handling so snakes associated with a user
        that drops from the network are removed from the game. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Other">
    <changelog>
      <fix>
        <bug>68124</bug>: Migrate sample.war from javax to jakarta. (lihan)
      </fix>
      <update>
        Update UnboundID to 6.0.11. (markt)
      </update>
      <update>
        Update Checkstyle to 10.12.5. (markt)
      </update>
      <update>
        Update SpotBugs to 4.8.2. (markt)
      </update>
      <update>
        Update Derby to 10.17.1. (markt)
      </update>
      <add>
        Improvements to French translations. (remm)
      </add>
      <add>
        Improvements to Japanese translations by tak7iji. (markt)
      </add>
      <add>
        Improvements to Brazilian Portuguese translations by John William
        Vicente. (markt)
      </add>
      <add>
        Improvements to Russian translations by usmazat and remm. (markt)
      </add>
    </changelog>
  </subsection>
</section>
<section name="Tomcat 10.1.16 (schultz)" rtext="2023-11-14">
  <subsection name="Catalina">
    <changelog>
      <fix>
        <bug>67667</bug>: <code>TLSCertificateReloadListener</code> prints
        unreadable rendering of <code>X509Certificate#getNotAfter()</code>.
        (michaelo)
      </fix>
      <update>
        The status servlet included in the manager webapp can now output
        statistics as JSON, using the <code>JSON=true</code> URL parameter.
        (remm)
      </update>
      <update>
        Optionally allow ServiceBindingPropertySource to trim a trailing newline
        from a file containing a property-value. (schultz)
      </update>
      <fix>
        <bug>67793</bug>: Ensure the original session timeout is restored after
        FORM authentication if the user refreshes a page during the FORM
        authentication process. Based on a suggestion by Mircea Butmalai.
        (markt)
      </fix>
      <update>
        <bug>67926</bug>: <code>PEMFile</code> prints unidentifiable string
        representation of ASN.1 OIDs. (michaelo)
      </update>
      <fix>
        <bug>66875</bug>: Ensure that setting the request attribute
        <code>jakarta.servlet.error.exception</code> is not sufficient to
        trigger error handling for the current request and response. (markt)
      </fix>
      <fix>
        <bug>68054</bug>: Avoid some file canonicalization calls introduced
        by the fix for <bug>65433</bug>. (remm)
      </fix>
      <fix>
        <bug>68089</bug>: Improve performance of request attribute access for
        <code>ApplicationHttpRequest</code> and <code>ApplicationRequest</code>.
        (markt)
      </fix>
      <fix>
        Use a 400 status code to report an error due to a bad request (e.g. an
        invalid trailer header) rather than a 500 status code. (markt)
      </fix>
      <fix>
        Ensure that an <code>IOException</code> during the reading of the
        request triggers always error handling, regardless of whether the
        application swallows the exception. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Coyote">
    <changelog>
      <add>
        <bug>66670</bug>: Add
        <code>SSLHostConfig#certificateKeyPasswordFile</code> and
        <code>SSLHostConfig#certificateKeystorePasswordFile</code>. (michaelo)
      </add>
      <add>
        When calling
        <code>SSLHostConfigCertificate.setCertificateKeystore(ks)</code>,
        automatically call
        <code>setCertificateKeystoreType(ks.getType())</code>. (markt)
      </add>
      <fix>
        <bug>67628</bug>: Clarify how the <code>ciphers</code> attribute of the
        <code>SSLHostConfig</code> is used. (markt)
      </fix>
      <fix>
        <bug>67666</bug>: Ensure TLS connectors using PEM files either work with
        the <code>TLSCertificateReloadListener</code> or, in the rare case that
        they do not, log a warning on Connector start. (markt)
      </fix>
      <fix>
        <bug>67675</bug>: Support a wider range of KDF and ciphers for PEM files
        than the combinations supported by the JVM by default. Specifically,
        support the OpenSSL default of HmacSHA256 and DES-EDE3-CBC. (markt)
      </fix>
      <fix>
        <bug>67927</bug>: Reloading TLS configuration can cause the Connector to
        refuse new connections or the JVM to crash. (markt)
      </fix>
      <fix>
        <bug>67938</bug>: Correct handling of large TLS client hello messages
        that were causing the TLS handshake to fail. (markt)
      </fix>
      <fix>
        <bug>68026</bug>: Convert selected <code>MessageByte</code> values to
        String when first accessed to speed up subsequent accesses and reduce
        garbage collection. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Jasper">
    <changelog>
      <fix>
        <bug>68068</bug>: Performance improvement for EL. Based on a suggestion
        by John Engebretson. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="WebSocket">
    <changelog>
      <fix>
        Correct missing metadata in the MANIFEST of the for WebSocket client API
        JAR file. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Web applications">
    <changelog>
      <fix>
        <bug>68035</bug>: Correct a regression in the fix for <bug>56248</bug>
        that prevented deployment via the Manager of a WAR or directory that was
        already present in the <code>appBase</code> or a context file that was
        already present in the <code>xmlBase</code>. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Other">
    <changelog>
      <add>
        <bug>67538</bug>: Make use of Ant's <code>&lt;javaversion /&gt;</code> task
        to enfore the mininum Java build version. (michaelo)
      </add>
      <update>
        Update Checkstyle to 10.12.4. (markt)
      </update>
      <update>
        Update JaCoCo to 0.8.11. (markt)
      </update>
      <update>
        Update SpotBugs to 4.8.0. (markt)
      </update>
      <update>
        Update BND to 7.0.0. (markt)
      </update>
      <update>
        The minimum Java version required to build Tomcat has been raised to
        Java 17. (markt)
      </update>
      <update>
        Update the OWB module to Apache OpenWebBeans 4.0.0. (remm)
      </update>
    </changelog>
  </subsection>
</section>
<section name="Tomcat 10.1.15 (schultz)" rtext="2023-10-16">
  <subsection name="Coyote">
    <changelog>
      <fix>
        <bug>67670</bug>: Fix regression with HTTP compression after code
        refactoring. (remm)
      </fix>
    </changelog>
  </subsection>
  <subsection name="jdbc-pool">
    <changelog>
      <fix>
        <bug>67664</bug>: Correct a regression in the clean-up of unnecessary
        use of fully qualified class names in 10.1.14 that broke the jdbc-pool.
        (markt)
      </fix>
    </changelog>
  </subsection>
</section>
<section name="Tomcat 10.1.14 (schultz)" rtext="2023-10-10">
  <subsection name="Catalina">
    <changelog>
      <add>
        <bug>65770</bug>: Provide a lifecycle listener that will automatically
        reload TLS configurations a set time before the certificate is due to
        expire. This is intended to be used with third-party tools that
        regularly renew TLS certificates. (markt)
      </add>
      <fix>
        Fix handling of an error reading a context descriptor on deployment.
        (remm)
      </fix>
      <fix>
        Fix rewrite rule qsd (query string discard) being ignored if qsa was
        also use, while it should instead take precedence. (remm)
      </fix>
      <fix>
        <bug>67472</bug>: Send fewer CORS-related headers when CORS is not
        actually being engaged. (schultz)
      </fix>
      <add>
        Improve handling of failures within <code>recycle()</code> methods.
        (markt)
      </add>
    </changelog>
  </subsection>
  <subsection name="Coyote">
    <changelog>
      <fix>
        <bug>67198</bug>: Ensure that the AJP connector attribute
        <code>tomcatAuthorization</code> takes precedence over the
        <code>tomcatAuthentication</code> attribute when processing an
        <code>auth_type</code> attribute received from a proxy server. (markt)
      </fix>
      <fix>
        <bug>67235</bug>: Fix a <code>NullPointerException</code> when an
        <code>AsyncListener</code> handles an error with a dispatch rather than
        a complete. (markt)
      </fix>
      <fix>
        When an error occurs during asynchronous processing, ensure that the
        error handling process is only triggered once per asynchronous cycle.
        (markt)
      </fix>
      <fix>
        Fix logic issue trying to match no argument method in IntropectionUtil.
        (remm)
      </fix>
      <fix>
        Improve thread safety around readNotify and writeNotify in the NIO2
        endpoint. (remm)
      </fix>
      <fix>
        Avoid rare thread safety issue accessing message digest map. (remm)
      </fix>
      <fix>
        Improve statistics collection for upgraded connections under load.
        (remm)
      </fix>
      <fix>
        Align validation of HTTP trailer fields with standard fields. (markt)
      </fix>
      <fix>
        Improvements to HTTP/2 overhead protection. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Jasper">
    <changelog>
      <fix>
        <bug>67080</bug>: Improve performance of EL expressions in JSPs that use
        implicit objects. Based on suggestions by John Engebretson, Anurag Dubey
        and Christopher Schultz. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Other">
    <changelog>
      <update>
        Update the internal fork of Apache Commons FileUpload to 7a8c324
        (2023-09-16, 1.x-SNAPSHOT). Due to significant refactoring in the 2.x
        branch requiring additional Commons IO dependencies, Tomcat has switched
        to tracking the 1.x branch. (markt)
      </update>
      <add>
        Add the <code>Bundle-License</code> header to the JAR manifest for all
        Tomcat JARs. (markt)
      </add>
      <update>
        Update UnboundID to 6.0.10. (markt)
      </update>
      <update>
        Update Checkstyle to 10.12.3. (markt)
      </update>
      <update>
        Update Tomcat Native to 2.0.6. (markt)
      </update>
      <update>
        Update Commons Pool to 2.12.0. (markt)
      </update>
      <fix>
        <bug>67611</bug>: Correct the download link in BUILDING.txt. (lihan)
      </fix>
      <add>
        Improvements to French translations. (remm)
      </add>
      <add>
        Improvements to Japanese translations by tak7iji. (markt)
      </add>
      <add>
        Improvements to Russian translations by usmazat. (markt)
      </add>
    </changelog>
  </subsection>
</section>
<section name="Tomcat 10.1.13 (markt)" rtext="2023-08-25">
  <subsection name="Catalina">
    <changelog>
      <fix>
        If an application or library sets both a non-500 error code and the
        <code>jakarta.servlet.error.exception</code> request attribute, use the
        provided error code during error page processing rather than assuming an
        error code of 500. (markt)
      </fix>
      <fix>
        Update code comments and Tomcat output to use MiB for 1024 * 1024 bytes
        and KiB for 1024 bytes rather than MB and kB. (martk)
      </fix>
      <fix>
        Avoid protocol relative redirects in FORM authentication. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Web applications">
    <changelog>
      <fix>
        Documentation. Update documentation to use MiB for 1024 * 1024 bytes and
        KiB for 1024 bytes rather than MB and kB. (martk)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Other">
    <changelog>
      <add>
        Improvements to Chinese translations. (lihan)
      </add>
      <add>
        Improvements to French translations. (remm)
      </add>
      <add>
        Improvements to Japanese translations by tak7iji. (markt)
      </add>
    </changelog>
  </subsection>
</section>
<section name="Tomcat 10.1.12 (markt)" rtext="2023-08-14">
  <subsection name="Catalina">
    <changelog>
      <fix>
        <bug>66680</bug>: When serializing a session during the session
        presistence process, do not log a warning that null Principals are not
        serializable. Pull request <pr>638</pr> provided by tsryo. (markt)
      </fix>
      <fix>
        Catch <code>NamingException</code> in <code>JNDIRealm#getPrincipal</code>.
        It is used in Java up to 17 to signal closed connections. (fschumacher)
      </fix>
      <fix>
        <bug>66822</bug>: Use the same naming format in log messages for
        Connector instances as the associated ProtocolHandler instance. (markt)
      </fix>
      <fix>
        The parts count should also lower the actual
        <code>maxParameterCount</code> used for parsing parameters if parts are
        parsed first. (remm)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Coyote">
    <changelog>
      <fix>
        Correct a regression introduced in 10.1.11 and use the correct
        constant when constructing the default value for the
        <code>certificateKeystoreFile</code> attribute of an
        <code>SSLHostConfigCertificate</code> instance. (markt)
      </fix>
      <scode>
        Refactor HTTP/2 implementation to reduce pinning when using virtual
        threads. (markt)
      </scode>
      <fix>
        Pass through ciphers referring to an OpenSSL profile, such as
        <code>PROFILE=SYSTEM</code> instead of producing an error trying to
        parse it. (remm)
      </fix>
      <fix>
        <bug>66841</bug>: Ensure that <code>AsyncListener.onError()</code> is
        called after an error during asynchronous processing with HTTP/2.
        (markt)
      </fix>
      <fix>
        <bug>66842</bug>: When using asynchronous I/O (the default), include
        DATA frames when calculating the HTTP/2 overhead count to ensure that
        connections are not prematurely terminated. (markt)
      </fix>
      <fix>
        Correct a race condition that could cause spurious RST messages to be
        sent after the response had been written to an HTTP/2 stream. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="WebSocket">
    <changelog>
      <fix>
        <bug>66681</bug>: Fix a <code>NullPointerException</code> when flushing
        batched messages with compression enabled using
        <code>permessage-deflate</code>. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="jdbc-pool">
    <changelog>
      <fix>
        Fix the <code>releaseIdleCounter</code> does not increment when testAllIdle
        releases them. Pull request <pr>241</pr> provided by Arun Chaitanya Miriappalli
        (lihan)
      </fix>
      <fix>
        Fix the <code>ConnectionState</code> state will be inconsistent with actual
        state on the connection when an exception occurs while writing. Pull request
        <pr>643</pr> provided by Wenjun Xiao. (lihan)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Other">
    <changelog>
      <update>
        Update NSIS to 3.09. (markt)
      </update>
      <update>
        Update Checkstyle to 10.12.2. (markt)
      </update>
      <add>
        Improvements to French translations. (remm)
      </add>
      <add>
        Improvements to Japanese translations. Contributed by tak7iji and
        Shirayuking. (markt)
      </add>
      <fix>
        <bug>66829</bug>: Fix quoting so users can use the <code>_RUNJAVA</code>
        environment variable as intended on Windows when the path to the Java
        executable contains spaces. (markt)
      </fix>
      <fix>
        <bug>66834</bug>: Correct the OSGi contract references in the manifest
        files to refer to the Jakarta EE contract names rather than the Java EE
        contract names. (markt)
      </fix>
      <update>
        Update Tomcat Native to 2.0.5. (markt)
      </update>
    </changelog>
  </subsection>
</section>
<section name="Tomcat 10.1.11 (schultz)" rtext="2023-07-10">
  <subsection name="Catalina">
    <changelog>
      <add>
        <bug>59232</bug>: Add
        <code>org.apache.catalina.core.ContextNamingInfoListener</code>,
        a listener which creates context naming information environment entries.
        (michaelo)
      </add>
      <add>
        <bug>66665</bug>: Add
        <code>org.apache.catalina.core.PropertiesRoleMappingListener</code>,
        a listener which populates the context's role mapping from a properties
        file. (michaelo)
      </add>
      <fix>
        Fix an edge case where intra-web application symlinks would be followed
        if the web applications were deliberately crafted to allow it even when
        <code>allowLinking</code> was set to <code>false</code>. (markt)
      </fix>
      <update>
        Add utlity config file resource lookup on <code>Context</code> to allow
        looking up resources from the webapp (prefixed with
        <code>webapp:</code>) and make the resource lookup API more visible.
        (remm)
      </update>
      <fix>
        Fix potential database connection leaks in
        <code>DataSourceUserDatabase</code> identified by Coverity Scan. (markt)
      </fix>
      <fix>
        Make parsing of <code>ExtendedAccessLogValve</code> patterns more
        robust. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Coyote">
    <changelog>
      <fix>
        <bug>66627</bug>: Restore the documented behaviour of
        <code>MessageBytes.getType()</code> that it returns the type of the
        original content rather than reflecting the most recent conversion.
        (markt)
      </fix>
      <fix>
        <bug>66635</bug>: Correct certificate logging on start-up so it
        differentiates between keystore based keys/certificates and PEM file
        based keys/certificates and logs the relevant information for each.
        (markt)
      </fix>
      <fix>
        Refactor blocking reads and writes for the NIO connector to remove
        code paths that could allow a notification from the Poller to be missed
        resuting in a timeout rather than the expected read or write. (markt)
      </fix>
      <fix>
        Refactor waiting for an HTTP/2 stream or connection window update to
        handle spurious wake-ups during the wait. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="WebSocket">
    <changelog>
      <fix>
        Improve handling of error conditions for the WebSocket server,
        particularly during Tomcat shutdown. (markt)
      </fix>
      <fix>
        Correct a regression in the fix for <bug>66574</bug> that meant the
        WebSocket session could return false for <code>onOpen()</code> before
        the <code>onClose()</code> event had been completed. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Web applications">
    <changelog>
      <add>
        Documentation. Expand the security guidance to cover the embedded use
        case and add notes on the uses made of the <code>java.io.tmpdir</code>
        system property. (markt)
      </add>
      <fix>
        <bug>66662</bug>: Documentation. Fix a typo in the name of the
        <strong>algorithms</strong> attribute in the configuration section for
        the Digest authentication valve. Pull request <pr>629</pr> provided by
        gohilmca. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Other">
    <changelog>
      <add>
        Include the Windows specific binary distributions in the files uploaded
        to Maven Central. (markt)
      </add>
      <add>
        Improvements to French translations. (remm)
      </add>
      <add>
        Improvements to Japanese translations. Contributed by tak7iji. (markt)
      </add>
      <update>
        Update UnboundID to 6.0.9. (markt)
      </update>
      <update>
        Update Checkstyle to 10.12.1. (markt)
      </update>
      <update>
        Update BND to 6.4.1. (markt)
      </update>
      <update>
        Update JSign to 5.0. (markt/rjung)
      </update>
      <fix>
        Align documentation for maxParameterCount to match hard-coded defaults.
        Contributed by Michal Sobkiewicz. (schultz)
      </fix>
    </changelog>
  </subsection>
</section>
<section name="Tomcat 10.1.10 (schultz)" rtext="2023-06-12">
  <subsection name="Catalina">
    <changelog>
      <scode>
        Move the management of the utility executor from the
        <code>init()</code>/<code>destroy()</code> methods of components to the
        <code>start()</code>/<code>stop()</code> methods. (markt)
      </scode>
      <add>
        Add <code>org.apache.catalina.core.StandardVirtualThreadExecutor</code>,
        a virtual thread based executor that may be used with one or more
        Connectors to process requests received by those Connectors using
        virtual threads. This Executor requires a minimum Java version of Java
        21. (markt)
      </add>
      <fix>
        <bug>66513</bug>: Add a per session Semaphore to the
        <code>PersistentValve</code> that ensures that, within a single Tomcat
        instance, there is no more than one concurrent request per session. Also
        expand the debug logging to include whether a request bypasses the Valve
        and the reason if a request fails to obtain the per session Semaphore.
        (markt)
      </fix>
      <fix>
        <bug>66609</bug>: Ensure that the default servlet correctly escapes
        file names in directory listings when using XML output. Based on pull
        request <pr>621</pr> by Alex Kachanov. (markt)
      </fix>
      <add>
       <bug>66618</bug>: Add a numeric last modified field to the XML directory
       listings produced by the default servlet to enable sorting in the XSLT.
       Pull request <pr>622</pr> by Alex Kachanov. (markt)
      </add>
      <fix>
        <bug>66621</bug>: Attempts to lock a collection with WebDAV may
        incorrectly fail if a child collection has an expired lock. (markt)
      </fix>
      <fix>
        <bug>66622</bug>: Deprecate the <code>xssProtectionEnabled</code>
        setting from the <code>HttpHeaderSecurityFilter</code> and change the
        default value to <code>false</code> as support for the associated HTTP
        header has been removed from all major browsers. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Coyote">
    <changelog>
      <update>
        Update the HTTP/2 implementation to use the prioritization scheme
        defined in RFC 9218 rather than the one defined in RFC 7540.
        (markt)
      </update>
      <fix>
        <bug>66602</bug>: not sending WINDOW_UPDATE when dataLength is ZERO
        on call SwallowedDataFramePayload. Pull request #619 by
        ledefe. (lihan)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Other">
    <changelog>
      <update>
        Update to Commons Daemon 1.3.4. (markt)
      </update>
      <add>
        Improvements to French translations. (remm)
      </add>
      <update>
        Update Checkstyle to 10.12.0. (markt)
      </update>
      <update>
        Update the packaged version of the Apache Tomcat Native Library to 2.0.4
        to pick up the Windows binaries built with with OpenSSL 3.0.9. (markt)
      </update>
    </changelog>
  </subsection>
</section>
<section name="Tomcat 10.1.9 (schultz)" rtext="2023-05-19">
  <subsection name="Catalina">
    <changelog>
      <fix>
        <bug>66567</bug>: Fix missing <code>IllegalArgumentException</code>
        after the Tomcat code was converted to using URI instead of URL. (remm)
      </fix>
      <fix>
        Escape timestamp output in <code>AccessLogValve</code> if a
        <code>SimpleDateFormat</code> is used which contains verbatim
        characters that need escaping. (rjung)
      </fix>
      <update>
        Change output of vertical tab in <code>AccessLogValve</code> from
        <code>\v</code> to <code>\u000b</code>. (rjung)
      </update>
      <update>
        Improve performance of escaping in <code>AccessLogValve</code>
        roughly by a factor of two. (rjung)
      </update>
      <update>
        Improve <code>JsonAccessLogValve</code>: support more patterns
        like for headers and attributes. Those will be logged as sub objects.
        (rjung)
      </update>
      <fix>
        <pr>613</pr>: Fix possible partial corrupted file copies when using
        file locking protection or the manager servlet. Submitted
        by Jack Shirazi. (remm)
      </fix>
      <add>
        Add RateLimitFilter which can be used to mitigate DoS and Brute Force
        attacks. (isapir)
      </add>
    </changelog>
  </subsection>
  <subsection name="Coyote">
    <changelog>
      <add>
        Add support for a new character set, <code>gb18030-2022</code> -
        introduced in Java 21, to the character set caching mechanism. (markt)
      </add>
      <fix>
        Fix an edge case in HTTP header parsing and ensure that HTTP headers
        without names are treated as invalid. (markt)
      </fix>
      <update>
        Deprecate the HTTP Connector settings <code>rejectIllegalHeader</code>
        and <code>allowHostHeaderMismatch</code> as they have been removed in
        Tomcat 11 onwards. (markt)
      </update>
      <fix>
        <bug>66591</bug>: Fix a regression introduced in the fix for
        <bug>66512</bug> that meant that an AJP Send Headers was not sent for
        responses where no HTTP headers were set. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Jasper">
    <changelog>
      <fix>
        <bug>66582</bug>: Account for EL having stricter requirements for static
        imports than JSPs when adding JSP static imports to the EL context.
        (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="WebSocket">
    <changelog>
      <fix>
        <bug>66574</bug>: Refactor WebSocket session close to remove the lock on
        the <code>SocketWrapper</code> which was a potential cause of deadlocks
        if the application code used simulated blocking. (markt)
      </fix>
      <fix>
        <bug>66575</bug>: Avoid unchecked use of the backing array of a
        buffer provided by the user in the compression transformation. (remm)
      </fix>
      <fix>
        Improve exception handling when flushing batched messages during
        WebSocket session close. (markt)
      </fix>
      <fix>
        <bug>66581</bug>: Update <code>AsyncChannelGroupUtil</code> to align it
        with the current defaults for AsynchronousChannelGroup. Pull request
        <pr>612</pr> by Matthew Painter. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Other">
    <changelog>
      <add>
        Improvements to French translations. (remm)
      </add>
      <add>
        Improvements to Chinese translations. (lihan)
      </add>
      <update>
        Update Checkstyle to 10.10.0. (markt)
      </update>
      <update>
        Update Jacoco to 0.8.10. (markt)
      </update>
      <update>
        Update the packaged version of the Tomcat Migration Tool for Jakarta EE
        to 1.0.7. (markt)
      </update>
    </changelog>
  </subsection>
</section>
<section name="Tomcat 10.1.8 (schultz)" rtext="2023-04-19">
  <subsection name="Catalina">
    <changelog>
      <fix>
        <bug>65995</bug>: Implement RFC 9239 and use
        <code>text/javascript</code> as the media type for JavaScript rather
        than <code>application/javascript</code>. (markt)
      </fix>
      <add>
        Add an access log valve that uses a json format. Based on pull request
        <pr>539</pr> provided by Thomas Meyer. (remm)
      </add>
      <add>
        Harden the FORM authentication process against DoS attacks by using a
        reduced session timeout if the FORM authentication process creates a
        session. The duration of this timeout is configured by the
        <code>authenticationSessionTimeout</code> attribute of the FORM
        authenticator. (markt)
      </add>
      <fix>
        <bug>66527</bug>: Correct the Javadoc for the
        <code>Tomcat.addWebapp()</code> methods that incorrectly stated that the
        <code>docBase</code> parameter could be a relative path. (markt)
      </fix>
      <fix>
        <bug>66524</bug> Correct eviction ordering in WebResource cache to
        be LRU as intended. (schultz)
      </fix>
      <update>
        Use server.xml to reduce the default value of
        <code>maxParameterCount</code> from 10,000 to 1,000. If not configured
        in server.xml, the default remains 10,000. (markt)
      </update>
      <add>
        Update Digest authentication support to align with RFC 7616. This adds a
        new configuration attribute, <code>algorithms</code>, to the
        <code>DigestAuthenticator</code> with a default of
        <code>SHA-256,MD5</code>. (markt)
      </add>
      <update>
        Add support code for custom user attributes in <code>RealmBase</code>.
        Based on code from <pr>473</pr> by Carsten Klein. (remm)
      </update>
      <fix>
        Expand the set of HTTP request headers considered sensitive that should
        be skipped when generating a response to a <code>TRACE</code> request.
        This aligns with 11.0.x. (markt)
      </fix>
      <fix>
        <bug>66541</bug>: Improve handling for cached resources for resources
        that use custom URL schemes. The scheme specific <code>equals()</code>
        and <code>hashCode()</code> algorithms, if present, will now be used for
        URLs for these resources. This addresses a potential performance issue
        with some OSGi custom URL schemes that can trigger potentially slow DNS
        lookups in some configurations. Based on a patch provided by Tom
        Whitmore. (markt)
      </fix>
      <fix>
        When using a custom session manager deployed as part of the web
        application, avoid <code>ClassNotFoundException</code>s when validating
        session IDs extracted from requests. (markt)
      </fix>
      <fix>
        <bug>66543</bug>: Give <code>StandardContext#fireRequestDestroyEvent</code>
         its own log message. (fschumacher)
      </fix>
      <fix>
        <bug>66554</bug>: Initialize Random during server initialization to
        avoid possible JVM thread creation in the webapp context on some
        platforms. (remm)
      </fix>
      <update>
        Make the server utility executor available to webapps using a Servlet
        context attribute named
        <code>org.apache.tomcat.util.threads.ScheduledThreadPoolExecutor</code>. (remm)
      </update>
    </changelog>
  </subsection>
  <subsection name="Coyote">
    <changelog>
      <fix>
        JSON filter should support specific escaping for common special
        characters as defined in RFC 8259. Based on code submitted by
        Thomas Meyer. (remm)
      </fix>
      <fix>
        <bug>66511</bug>: Fix <code>GzipOutputFilter</code> (used for compressed
        HTTP responses) when used with direct buffers. Patch suggested by Arjen
        Poutsma. (markt)
      </fix>
      <fix>
        <bug>66512</bug>: Align AJP handling of invalid HTTP response headers
        (they are now removed from the response) with HTTP. (markt)
      </fix>
      <fix>
        <bug>66530</bug>: Correct a regression in the fix for bug
        <bug>66442</bug> that meant that streams without a response body did not
        decrement the active stream count when completing leading to
        <code>ERR_HTTP2_SERVER_REFUSED_STREAM</code> for some connections.
        (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Jasper">
    <changelog>
      <fix>
        Fix bug that meant some instances of coercing a
        <code>LambdaExpression</code> to a functional interface invocation
        failed. (markt)
      </fix>
      <fix>
        <bug>66536</bug>: Fix parsing of tag files that meant that tag
        directives could be ignored for some tag files. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Cluster">
    <changelog>
      <fix>
        <bug>66535</bug>: Redefine the <code>maxValidTime</code> attribute of
        <code>FarmWarDeployer</code> to be the maximum time allowed between
        receiving parts of a transferred file before the transfer is cancelled
        and the associated resources cleaned-up. A new warning message will be
        logged if the file transfer is cancelled. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="WebSocket">
    <changelog>
      <fix>
        <bug>66508</bug>: When using WebSocket with NIO2, avoid waiting for
        a timeout before sending the close frame if an I/O error occurs during a
        write. (markt)
      </fix>
      <fix>
        <bug>66548</bug>: Expand the validation of the value of the
        <code>Sec-Websocket-Key</code> header in the HTTP upgrade request that
        initiates a WebSocket connection. The value is not decoded but it is
        checked for the correct length and that only valid characters from the
        base64 alphabet are used. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Web applications">
    <changelog>
      <fix>
        <bug>66542</bug>: Documentation. Update the JNDI documentation to
        replace references to JavaMail with references to Jakarta Mail. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Other">
    <changelog>
      <add>
        Improvements to French translations. (remm)
      </add>
      <add>
        Improvements to Japanese translations. Contributed by Shirayuking and
        tak7iji. (markt)
      </add>
      <add>
        Improvements to Chinese translations. Contributed by totoo. (markt)
      </add>
      <scode>
        Refactor code using <code>MD5Encoder</code> to use
        <code>HexUtils.toHexString()</code>. (markt)
      </scode>
      <fix>
        <bug>66507</bug>: Fix a bug that <code>$JAVA_OPTS</code> is not passed
        to the jvm in <code>catalina.sh</code> when calling <code>version</code>.
        Patch suggested by Eric Hamilton. (lihan)
      </fix>
      <update>
        Update the internal fork of Commons DBCP to f131286 (2023-03-08,
        2.10.0-SNAPSHOT). This corrects a regression introduced in 10.1.5.
        (markt)
      </update>
      <fix>
        Improve the error messages if <code>JRE_HOME</code> or
        <code>JAVA_HOME</code> are not set correctly. On windows, align the
        handling of <code>JRE_HOME</code> and <code>JAVA_HOME</code> for the
        start-up scripts and the service install script. (markt)
      </fix>
      <update>
        Update to the Eclipse JDT compiler 4.27. (markt)
      </update>
      <update>
        Update UnboundID to 6.0.8. (markt)
      </update>
      <update>
        Update Checkstyle to 10.9.3. (markt)
      </update>
      <update>
        Update Jacoco to 0.8.9. (markt)
      </update>
      <fix>
        Enhance PEMFile to load from an InputStream. Patch provided by
        Romain Manni-Bucau. (schultz)
      </fix>
    </changelog>
  </subsection>
</section>
<section name="Tomcat 10.1.7 (schultz)" rtext="2023-03-03">
  <subsection name="General">
    <changelog>
      <fix>
        Fix a bug that memory allocation is larger than limit in
        <code>SynchronizedStack</code> to reduce memory footprint. (lihan)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Catalina">
    <changelog>
      <add>
        Add support for <code>txt:</code> and <code>rnd:</code> rewrite map
        types from mod_rewrite. Based on a pull request <pr>591</pr>
        provided by Dimitrios Soumis. (remm)
      </add>
      <update>
        Provide a more appropriate response (501 rather than 400) when rejecting
        an HTTP request using the CONNECT method. (markt)
      </update>
      <fix>
        <bug>66488</bug>: Correct a regression introduced in the fix for bug
        <bug>66196</bug> that meant that the HTTP headers and/or request line
        could get corrupted (one part overwriting another part) within a single
        request. (markt)
      </fix>
      <fix>
        <bug>66491</bug>: Revert the switch to using the ServiceLoader mechanism
        to load the custom URL protocol handlers that Tomcat uses. The original
        system property based approach has been restored. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Coyote">
    <changelog>
      <add>
        Add a check for the validity of the scheme pseudo-header in HTTP/2.
        (markt)
      </add>
      <fix>
        <bug>66482</bug>: Restore inline state after async operation in NIO2,
        to account the fact that unexpected exceptions are sometimes thrown
        by the implementation. Patch submitted by zhougang. (remm)
      </fix>
    </changelog>
  </subsection>
</section>
<section name="Tomcat 10.1.6 (schultz)" rtext="2023-02-24">
  <subsection name="Catalina">
    <changelog>
      <fix>
        Allow a Valve to access cookies from a request that cannot be mapped to
        a Context. (markt)
      </fix>
      <fix>
        <bug>66438</bug>: Correct names of Jakarta modules in JPMS metadata.
        (markt)
      </fix>
      <update>
        Switch to using the ServiceLoader mechanism to load the custom URL
        protocol handlers that Tomcat uses. (markt)
      </update>
      <fix>
        Avoid possible ISE when scanning from bad JAR URLs, to restore the
        previous behavior following the removal of Java 9+ reflection code which
        caught the ISE. (remm)
      </fix>
      <fix>
        Refactor uses of <code>String.replaceAll()</code> to use
        <code>String.replace()</code> where regular expressions where not being
        used. Pull request <pr>581</pr> provided by Andrei Briukhov. (markt)
      </fix>
      <add>
        Add error report valve that allows redirecting to of proxying from an
        external web server. Based on code and ideas from pull request
        <pr>506</pr> provided by Max Fortun. (remm)
      </add>
      <add>
        <bug>66470</bug>: Add the Shared Address Space defined by RFC 6598
        (100.64.0.0/10) to the regular expression used to identify internal
        proxies for the <code>RemoteIpFilter</code> and
        <code>RemoteIpValve</code>. (markt)
      </add>
      <fix>
        <bug>66471</bug>: Fix JSessionId secure attribute missing When
        <code>RemoteIpFilter</code> determines that this request was submitted
        via a secure channel. (lihan)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Coyote">
    <changelog>
      <add>
        Log basic information for each configured TLS certificate when Tomcat
        starts. (markt)
      </add>
      <fix>
        <bug>66442</bug>: When an HTTP/2 response must not include a body,
        ensure that the end of stream flag is set on the headers frame and that
        no data frame is sent. (markt)
      </fix>
      <fix>
        <bug>66455</bug>: Fix the cause of a potential
        <code>ClassCastException</code> when processing a
        <code>WINDOW_UPDATE</code> frame on an HTTP/2 connection where the flow
        control window for the overall connection has been exhausted. (markt)
      </fix>
      <fix>
        Fix a regression introduced in 10.1.0-M17 that prevented HTTP/2
        connections from timing out when using a Connector configured with
        <code>useAsyncIO=true</code> (the default). (markt)
      </fix>
      <add>
        Provided dedicated loggers
        (<code>org.apache.tomcat.util.net.NioEndpoint.certificate</code> /
        <code>org.apache.tomcat.util.net.Nio2Endpoint.certificate</code>) for
        logging of configured TLS certificates. (markt)
      </add>
    </changelog>
  </subsection>
  <subsection name="Jasper">
    <changelog>
      <fix>
        <bug>66419</bug>: Fix calls from expression language to a method that
        accepts varargs when only one argument was passed. (markt)
      </fix>
      <fix>
        <bug>66441</bug>: Make imports of static fields in JSPs visible to any
        EL expressions used on the page. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Web applications">
    <changelog>
      <fix>
        <bug>66429</bug>: Documentation. Limit access to the documentation web
        application to localhost by default. (markt)
      </fix>
      <fix>
        <bug>66429</bug>: Examples. Limit access to the examples web application
        to localhost by default. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Other">
    <changelog>
      <update>
        Update BND to 6.4.0. (markt)
      </update>
      <add>
        Improvements to Korean translations. (woonsan)
      </add>
      <update>
        Update the packaged version of the Apache Tomcat Native Library to 2.0.3
        to pick up the Windows binaries built with with OpenSSL 3.0.8. (markt)
      </update>
    </changelog>
  </subsection>
</section>
<section name="Tomcat 10.1.5 (markt)" rtext="2023-01-13">
  <subsection name="Catalina">
    <changelog>
      <fix>
        <bug>66388</bug>: Correct a regression in the refactoring that replaced
        the use of the <code>URL</code> constructors. The regression broke
        lookups for resources that contained one or more characters in their
        name that required escaping when used in a URI path. (markt)
      </fix>
      <fix>
        <bug>66392</bug>: Change the default value of <code>AccessLogValve</code>'s
        file encoding to UTF-8 and update documentation. (lihan)
      </fix>
      <fix>
        <bug>66393</bug>: Align <code>ExtendedAccessLogValve</code>'s x-P(XXX) with the
        documentation. (lihan)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Coyote">
    <changelog>
      <fix>
        When resetting an HTTP/2 stream because the final response has been
        generated before the request has been fully read, use the HTTP/2 error
        code <code>NO_ERROR</code> so that client does not discard the response.
        Based on a suggestion by Lorenzo Dalla Vecchia. (markt)
      </fix>
      <fix>
        <bug>66385</bug>: Correct a bug in HTTP/2 where a non-blocking read for
        a new frame with the NIO2 connector was incorrectly made using the read
        timeout leading to unexpected stream closure. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Jasper">
    <changelog>
      <fix>
        <bug>66370</bug>: Change the default of the
        <code>org.apache.el.GET_CLASSLOADER_USE_PRIVILEGED</code> system
        property to <code>true</code> unless the EL library is running on Tomcat
        in which case the default remains <code>false</code> as the EL library
        is already called from within a privileged block and skipping the
        unnecessary privileged block improves performance. (markt)
      </fix>
      <add>
        Add support for specifying Java 21 (with the value <code>21</code>) as
        the compiler source and/or compiler target for JSP compilation. If used
        with an Eclipse JDT compiler version that does not support these values,
        a warning will be logged and the default will used.
        (markt)
      </add>
    </changelog>
  </subsection>
  <subsection name="Other">
    <changelog>
      <update>
        Update the internal fork of Apache Commons BCEL to 2ee2bff (2023-01-03,
        6.7.1-SNAPSHOT). (markt)
      </update>
      <update>
        Update the internal fork of Apache Commons Codec to 3eafd6c (2023-01-03,
        1.16-SNAPSHOT). (markt)
      </update>
      <update>
        Update the internal fork of Apache Commons FileUpload to 34eb241
        (2023-01-03, 2.0-SNAPSHOT). (markt)
      </update>
      <update>
        Update the internal fork of Apache Commons DBCP to f131286 (2023-01-03,
        2.10.0-SNAPSHOT). (markt)
      </update>
      <add>
        Improvements to Japanese translations. Contributed by Shirayuking.
        (markt)
      </add>
      <add>
        Improvements to Portuguese translations. Contributed by Guilherme
        Custódio. (markt)
      </add>
      <update>
        Update to the Eclipse JDT compiler 4.26. (markt)
      </update>
      <update>
        Update Checkstyle to 10.6.0. (markt)
      </update>
      <update>
        Update Unboundid to 6.0.7. (markt)
      </update>
      <update>
        Update SpotBugs to 4.7.3. (markt)
      </update>
    </changelog>
  </subsection>
</section>
<section name="Tomcat 10.1.4 (markt)" rtext="2022-12-09">
  <subsection name="Other">
    <changelog>
      <update>
        Update the packaged version of the Apache Tomcat Migration Tool for
        Jakarta EE to 1.0.6. (markt)
      </update>
    </changelog>
  </subsection>
</section>
<section name="Tomcat 10.1.3 (markt)" rtext="not released">
  <subsection name="Catalina">
    <changelog>
      <fix>
        Correct the default implementation of
        <code>HttpServletRequest.isTrailerFieldsReady()</code> to return
        <code>true</code> so it is consistent with the default implementation of
        <code>HttpServletRequest.getTrailerFields()</code> and with the Servlet
        API provided by the Jakarta EE project. (markt)
      </fix>
      <fix>
        Refactor <code>WebappLoader</code> so it only has a runtime dependency
        on the migration tool for Jakarta EE if configured to use the converter
        as classes are loaded. (markt)
      </fix>
      <fix>
        Improve the behavior of the credential handler attribute that is set in
        the Servlet context so that it actually reflects what is used during
        authentication. (remm)
      </fix>
      <fix>
        <bug>66359</bug>: Update javadoc for RemoteIpValve and RemoteIpFilter with
        correct <code>protocolHeader</code> default value of "X-Forwarded-Proto".
        (lihan)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Coyote">
    <changelog>
      <fix>
        When an HTTP/2 stream was reset, the current active stream count was not
        reduced. If enough resets occurred on a connection, the current active
        stream count limit was reached and no new streams could be created on
        that connection. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Web applications">
    <changelog>
      <fix>
        <bug>66348</bug>: Update the JARs listed in the class loader
        documentation and note which ones are optional. (markt)
      </fix>
      <fix>
        Documentation. Replace references in the application developer's guide
        to CVS with more general references to a source code control system.
        (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Other">
    <changelog>
      <scode>
        Refactor code base to replace use of URL constructors. While they are
        deprecated in Java 20 onwards, the reasons for deprecation are valid for
        all versions so move away from them now. (markt)
      </scode>
      <scode>
        Refine the Tomcat native image metadata to avoid including unintended
        non-Tomcat resources. Pull request <pr>569</pr> provided by Sébastien
        Deleuze. (markt)
      </scode>
      <update>
        Update the internal fork of Apache Commons BCEL to b015e90 (2022-11-28,
        6.7.0-RC1). (markt)
      </update>
      <update>
        Update the internal fork of Apache Commons Codec to ae32a3f (2022-11-29,
        1.16-SNAPSHOT). (markt)
      </update>
      <update>
        Update to Commons Daemon 1.3.3. (markt)
      </update>
      <update>
        Update the internal fork of Apache Commons FileUpload to aa8eff6
        (2022-11-29, 2.0-SNAPSHOT). (markt)
      </update>
      <add>
        Improvements to Japanese translations. Contributed by Shirayuking and
        tak7iji. (markt)
      </add>
    </changelog>
  </subsection>
</section>
<section name="Tomcat 10.1.2 (markt)" rtext="2022-11-14">
  <subsection name="Catalina">
    <changelog>
      <add>
        <bug>66209</bug>: Add a configuration option to allow bloom filters used
        to index JAR files to be retained for the lifetime of the web
        application. Prior to this addition, the indexes were always flushed by
        the periodic calls to <code>WebResourceRoot.gc()</code>. As part of this
        addition, configuration of archive indexing moves from
        <code>Context</code> to <code>WebResourceRoot</code>. Based on a patch
        provided by Rahul Jaisimha. (markt)
      </add>
      <fix>
        <bug>66330</bug>: Correct a regression introduced when fixing
        <bug>62897</bug> that meant any value configured for
        <code>skipMemoryLeakChecksOnJvmShutdown</code> on the
        <code>Context</code> was ignored and the default was always used.
        (markt)
      </fix>
      <fix>
        <bug>66331</bug>: Fix a regression in refactoring for <code>Stack</code>
        on the <code>SystemLogHandler</code> which caught incorrect exception.
        (lihan)
      </fix>
      <fix>
        <bug>66338</bug>: Fix a regression that caused a nuance in refactoring
        for <code>ErrorReportValve</code>. (lihan)
      </fix>
      <fix>
        Escape values used to construct output for the
        <code>JsonErrorReportValve</code> to ensure that it always outputs valid
        JSON. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Coyote">
    <changelog>
      <fix>
        Correct the date format used with the expires attribute of HTTP cookies.
        A single space rather than a single dash should be used to separate the
        day, month and year components to be compliant with RFC 6265. (markt)
      </fix>
      <add>
        Include the name of the current stream state in the error message when a
        stream is cancelled due to an attempt to write to the stream when it is
        in a state that does not permit writes. (markt)
      </add>
      <scode>
        NIO writes never return -1 so refactor <code>CLOSED_NIO_CHANNEL</code>
        not to do so and remove checks for this return value. Based on
        <pr>562</pr> by tianshuang. (markt)
      </scode>
      <scode>
        Remove unnecessary code that exposed the <code>asyncTimeout</code> to
        components that never used it. (markt)
      </scode>
    </changelog>
  </subsection>
  <subsection name="Jasper">
    <changelog>
      <fix>
        <bug>66294</bug>: Make the use of a privileged block to obtain the
        thread context class loader added to address <bug>62080</bug> optional
        and disabled by default. This is now controlled by the
        <code>org.apache.el.GET_CLASSLOADER_USE_PRIVILEGED</code> system
        property. (markt)
      </fix>
      <fix>
        <bug>66317</bug>: Fix for Lambda coercion security manager missing
        privileges. Based on pull request #557 by Isaac Rivera Rivas (lihan)
      </fix>
      <fix>
        <bug>66325</bug>: Fix concurrency issue in evaluation of expression
        language containing lambda expressions. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="jdbc-pool">
    <changelog>
      <fix>
        <bug>66346</bug>: Ensure all JDBC pool JARs are reproducible. Pull
        request <pr>566</pr> provided by John Neffenger. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Other">
    <changelog>
      <update>
        Update to Commons Daemon 1.3.2. (markt)
      </update>
      <fix>
        <bug>66323</bug>: Move module start up parameters from
        <code>JDK_JAVA_OPTIONS</code> to <code>JAVA_OPTS</code> now that the
        minimum Java version is 11 and these options are always required. (markt)
      </fix>
      <add>
        Improvements to Chinese translations. Contributed by DigitalCat and
        lihan. (markt)
      </add>
      <add>
        Improvements to French translations. Contributed by Mathieu Bouchard.
        (markt)
      </add>
      <add>
        Improvements to Japanese translations. Contributed by Shirayuking.
        (markt)
      </add>
      <fix>
        Correct a regression in the removal of the APR connector that broke
        Graal native image support. Pull request <pr>564</pr> provided by
        Sébastien Deleuze. (markt)
      </fix>
      <update>
        Update the packaged version of the Apache Tomcat Native Library to 2.0.2
        to pick up the Windows binaries built with with OpenSSL 3.0.7. (markt)
      </update>
      <update>
        Update the packaged version of the Apache Tomcat Migration Tool for
        Jakarta EE to 1.0.5. (markt)
      </update>
    </changelog>
  </subsection>
</section>
<section name="Tomcat 10.1.1 (markt)" rtext="2022-10-11">
  <subsection name="Catalina">
    <changelog>
      <fix>
        Update the <code>RewriteValve</code> to perform pattern matching using
        dotall mode to avoid unexpected behaviour if the URL includes encoded
        line terminators. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Coyote">
    <changelog>
      <fix>
        <bug>66276</bug>: Fix incorrect class cast when adding
        a descendant of HTTP/2 streams. (lihan)
      </fix>
      <fix>
        <bug>66281</bug>: Fix unexpected timeouts that may appear as client
        disconnections when using HTTP/2 and NIO2. (markt)
      </fix>
      <fix>
        Enforce the requirement of RFC 7230 onwards that a request with a
        malformed <code>content-length</code> header should always be rejected
        with a 400 response. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Jasper">
    <changelog>
      <fix>
        <bug>66277</bug>: Fix regressions in refactoring from <code>Stack</code>
        <code>ArrayDeque</code>.
      </fix>
      <add>
        Add support for specifying Java 20 (with the value <code>20</code>) as
        the compiler source and/or compiler target for JSP compilation. If used
        with an Eclipse JDT compiler version that does not support these values,
        a warning will be logged and the default will used.
        (markt)
      </add>
    </changelog>
  </subsection>
  <subsection name="Web applications">
    <changelog>
      <fix>
        Documentation. Document the <code>nonceRequestParameterName</code>
        attribute for the <code>CsrfPreventionFilter</code>. Based on
        <pr>553</pr> by Mert Ülkgün. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Other">
    <changelog>
      <update>
        Update to the Eclipse JDT compiler 4.23. (markt)
      </update>
      <update>
        Update Objenesis to 3.2. (markt)
      </update>
      <update>
        Update UnboundID to 6.0.6. (markt)
      </update>
      <update>
        Update Checkstyle to 10.3.4. (markt)
      </update>
      <update>
        Update JaCoCo to 0.8.8. (markt)
      </update>
      <update>
        Update SpotBugs to 4.7.2. (markt)
      </update>
      <update>
        Update JSign to 4.2. (markt)
      </update>
      <update>
        Update Derby to 10.16.1.1. (markt)
      </update>
      <add>
        Improvements to Chinese translations. (markt)
      </add>
      <add>
        Improvements to Czech translations. (markt)
      </add>
      <add>
        Improvements to French translations. (remm)
      </add>
      <add>
        Improvements to Japanese translations. Contributed by tak7iji and
        Shirayuking. (markt)
      </add>
      <add>
        Improvements to Korean translations. (markt)
      </add>
      <add>
        Improvements to Spanish translations. (markt)
      </add>
    </changelog>
  </subsection>
</section>
<section name="Tomcat 10.1.0 (markt)" rtext="2022-09-26">
  <subsection name="Coyote">
    <changelog>
      <update>
        Update Panama OpenSSL code for the extensive Java 20 changes. (remm)
      </update>
      <fix>
        Fix a regression in refactoring for Hashtables which caused mbeans to
        lose many of their attributes. (remm)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Jasper">
    <changelog>
      <add>
        <bug>66203</bug>: Log an error message when the JSP compiler is unable
        to create the output directory for the generated code. (markt)
      </add>
    </changelog>
  </subsection>
  <subsection name="Other">
    <changelog>
      <add>
        Further automation to the build process to reduce the number of manual
        steps that release managers must perform. (markt)
      </add>
    </changelog>
  </subsection>
</section>
<section name="Tomcat 10.1.0-M20 (markt)" rtext="not released">
  <subsection name="Coyote">
    <changelog>
      <fix>
        Prepare OpenSSL Panama module for Java 20 API changes. (remm)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Other">
    <changelog>
      <update>
        Update the Apache Tomcat migration tool for Jakarta EE library to 1.0.4.
        (markt)
      </update>
    </changelog>
  </subsection>
</section>
<section name="Tomcat 10.1.0-M19 (markt)" rtext="not released">
  <subsection name="Coyote">
    <changelog>
      <fix>
        Correct a regression in the previous fix for <bug>66236</bug>. (markt)
      </fix>
    </changelog>
  </subsection>
</section>
<section name="Tomcat 10.1.0-M18 (markt)" rtext="not released">
  <subsection name="Catalina">
    <changelog>
      <fix>
        Correct handling of HTTP TRACE requests where there are multiple
        instances of an HTTP header with the same name. (markt)
      </fix>
      <fix>
        Implement the requirements of RFC 7231 and do not include sensitive
        headers in responses to HTTP TRACE requests. (markt)
      </fix>
      <fix>
        Implement the clarification in RFC 9110 that the units in HTTP range
        specifiers are case insensitive. (markt)
      </fix>
      <fix>
        Properly-escape role and group information when writing
        MemoryUserDatabase to an XML file. (schultz)
      </fix>
      <fix>
        Move control of XML-export logic from individual support classes into
        MemoryUserDatabase.save(). Deprecate and discontinue use of MemoryUser,
        MemoryRole, and MemoryGroup classes. (schultz)
      </fix>
      <fix>
        <bug>66183</bug>: When logging cookie values in an access log valve and
        there are multiple cookies with the same name, log all cookie values
        rather than just the first. Based on pull request <pr>541</pr> by Han
        Li. (markt)
      </fix>
      <fix>
        <bug>66184</bug>: Ensure that JULI root loggers have a default level of
        <code>INFO</code>. Pull request <pr>533</pr> provided by Piotr P.
        Karwasz. (markt)
      </fix>
      <fix>
        Improve handling of stack overflow errors when parsing SSI expressions.
        (markt)
      </fix>
      <fix>
        <bug>66120</bug>: Enable FORM authentication to work correctly if
        session persistence and restoration occurs during the authentication
        process. (markt)
      </fix>
      <fix>
        <bug>66233</bug>: Include an error message when sending a 400 response
        because a request has too many cookies. (markt)
      </fix>
      <fix>
        When web application deployment fails due to JARs with duplicate
        fragment names, improve the error message by listing the JARs that
        contain the duplicates. Based on pull request <pr>535</pr> by Mads
        Rolsdorph. (markt)
      </fix>
      <fix>
        Replace logging thread for JULI's <code>AsyncFileHandler</code> with an
        executor to protect against failure of the logging thread. Based on pull
        request <pr>545</pr> by Piotr P. Karwasz. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Coyote">
    <changelog>
      <fix>
        Avoid potential NPE by skipping duplicate accept check when using a Unix
        Domain Socket. Based on <pr>532</pr> by Han Li. (markt)
      </fix>
      <fix>
        Address an edge case in HTTP header parsing that allowed CRCRLF to be
        used as a valid line terminator. (markt)
      </fix>
      <fix>
        Ensure HTTP/2 requests that include connection specific headers are
        rejected. (markt)
      </fix>
      <fix>
        When processing HTTP/2 requests, allow a <code>host</code> header to be
        used in place of an <code>:authority</code> header. (markt)
      </fix>
      <fix>
        When processing HTTP/2 requests, allow a <code>host</code> header and an
        <code>:authority</code> header to  be present providing they are
        consistent. (markt)
      </fix>
      <fix>
        When processing HTTP/2 requests, reject requests containing multiple
        <code>host</code> headers. (markt)
      </fix>
      <fix>
        Make parsing of invalid filename directives in
        <code>Content-Disposition</code> headers more robust. Invalid filename
        directives will now be ignored rather than triggering a 500 response.
        (markt)
      </fix>
      <fix>
        <bug>66194</bug>: Log HTTP/2 stream closures (usually caused by client
        errors) via a <code>UserDataHelper</code> to broadly align it with the
        behaviour of HTTP/1.1 for parsing issues and exceeding limits. (markt)
      </fix>
      <fix>
        <bug>66196</bug>: Align HTTP/1.1 with HTTP/2 and throw an exception when
        attempting to commit a response with an header value that includes one
        or more characters with a code point above 255. (markt)
      </fix>
      <fix>
        <bug>66236</bug>: Implement support for the special values zero and
        minus one when configuring <code>maxSavePostSize</code> for a Connector
        when used in conjunction with TLS renegotiation. (markt)
      </fix>
      <fix>
        <bug>66240</bug>: Avoid int overflow when parsing octets by limiting
        the maximum value to 255. Based on a PR <pr>548</pr> by Stefan Mayr.
        (lihan)
      </fix>
      <fix>
        <pr>550</pr>: Correctly handle case where a Servlet responds to a
        request with an expectation with a 2xx response without reading the
        request body. Pull request provided by Malay Shah. (markt)
      </fix>
      <fix>
        <pr>551</pr>: Avoid potential IndexOutOfBoundsException by fixing
        incorrect check when matching HTTP/2 preface. Submitted by 刘文章.
        (lihan)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Jasper">
    <changelog>
      <fix>
        Improve handling of stack overflow errors when parsing EL expressions.
        (markt)
      </fix>
      <fix>
        Correct parsing of integer and floating point literals in EL expressions
        so that larger values are correctly parsed to <code>BigInteger</code>
        and <code>BigDecimal</code> respectively. (markt)
      </fix>
      <fix>
        <bug>66235</bug>: Fix various issues with the bean resolver used for
        Graal. (remm)
      </fix>
      <fix>
        Improve the performance of the <code>ImportHandler</code> in the
        Expression Language implementation. This removes a previous optimisation
        that is now detrimental rather than helpful. Pull request <pr>547</pr>
        provided by rmannibucau. (markt)
      </fix>
      <fix>
        Improve handling of EL error messages so instances of Number are not
        formatted in unexpected ways. (markt/kkolinko)
      </fix>
      <fix>
        Switch to using ELException rather than IllegalArgumentException when a
        type conversion fails during an EL arithmetic operation. This is an EL
        error so ELException seems more appropriate. (markt)
      </fix>
      <fix>
        Fix a bug in <code>MethodExpression</code> handling that triggered an
        error when invoking a static method on an instance of the class rather
        than directly on the class. (markt)
      </fix>
      <fix>
        Use <code>BigInteger.remainder()</code> rather than
        <code>BigInteger.mod()</code> when performing the modulus operation for
        instances of <code>BigInteger</code> as part of an EL expression.
        (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Cluster">
    <changelog>
      <fix>
        To aid future additions of new functionality, rather than throw an
        <code>IllegalArgumentException</code> if a <code>DeltaRequest</code> is
        passed an unrecognised action type, a warning message will now be
        logged. (markt)
      </fix>
      <fix>
        <bug>66120</bug>: Enable FORM authentication to work correctly if
        session failover occurs during the authentication process. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="WebSocket">
    <changelog>
      <add>
        <bug>62312</bug>: Add support for authenticating WebSocket clients with
        an HTTP forward proxy when establishing a connection to a WebSocket
        endpoint via a forward proxy that requires authentication. Based on a
        patch provided by Joe Mokos. (markt)
      </add>
    </changelog>
  </subsection>
  <subsection name="Other">
    <changelog>
      <fix>
        Ensure that zip archives use UTC for file modification times to ensure
        repeatable builds across time zones. (markt)
      </fix>
      <add>
        Improvements to Chinese translations. (lihan)
      </add>
      <add>
        Improvements to Czech translations. (markt)
      </add>
      <add>
        Improvements to French translations. (remm)
      </add>
      <add>
        Improvements to German translations. (markt)
      </add>
      <add>
        Improvements to Japanese translations. Contributed by tak7iji and
        Shirayuking. (markt)
      </add>
      <add>
        Improvements to Korean translations. Contributed by 수현. (markt)
      </add>
      <add>
        Improvements to Brazilian Portuguese translations. (markt)
      </add>
      <add>
        Improvements to Russian translations. (markt)
      </add>
      <add>
        Improvements to Spanish translations. (markt)
      </add>
      <update>
        Update the Apache Tomcat migration tool for Jakarta EE library to 1.0.3.
        (markt)
      </update>
    </changelog>
  </subsection>
</section>
<section name="Tomcat 10.1.0-M17 (markt)" rtext="2022-07-20">
  <subsection name="Catalina">
    <changelog>
      <fix>
        <bug>66104</bug>: Avoid error message by not trying to clean up old
        files from the logging directory before the directory has been created.
        Based on <pr>521</pr> by HanLi. (markt)
      </fix>
      <update>
        Update the Jakarta Common Annotations API to 2.1.1. This deprecates the
        <code>ManagedBean</code> annotation which will be removed in a future
        release. (markt)
      </update>
    </changelog>
  </subsection>
  <subsection name="Coyote">
    <changelog>
      <add>
        Provide dedicated loggers
        (<code>org.apache.tomcat.util.net.NioEndpoint.handshake</code> /
        <code>org.apache.tomcat.util.net.Nio2Endpoint.handshake</code>) for TLS
        handshake failures. (markt)
      </add>
      <add>
        Enable the use of the FIPS provider for TLS enabled Connectors when
        using Tomcat Native 1.2.34 onwards built with OpenSSL 3.0.x onwards.
        (markt)
      </add>
      <scode>
        Remove the <code>jvmRoute</code> system property used to configure a
        default value for the <code>jvmRoute</code> attribute of an Engine.
        (markt)
      </scode>
      <update>
        Update experimental Panama modules with support for OpenSSL 3.0+.
        OpenSSL 1.1 remains supported. (remm)
      </update>
      <fix>
        Correct a regression in the refactoring to support experimentation with
        project Loom that broke HTTP/2 support if async IO was disabled. (markt)
      </fix>
      <fix>
        Fix duplicate Poller registration with HTTP/2, NIO and async IO that
        could cause HTTP/2 connections to unexpectedly fail. (markt)
      </fix>
      <update>
        Refactor Panama module to better take advantage of the Panama preview
        API updates and fixes. Improves memory session usage and avoids some
        allocations. Review from Maurizio Cimadamore. (remm)
      </update>
      <update>
        Update the minimum recommended version of the Tomcat Native Library to
        2.0.1. (markt)
      </update>
    </changelog>
  </subsection>
  <subsection name="Jasper">
    <changelog>
      <add>
        Add support for specifying Java 19 (with the value <code>19</code>) as
        the compiler source and/or compiler target for JSP compilation. If used
        with an Eclipse JDT compiler version that does not support these values,
        a warning will be logged and the default will used.
        (markt)
      </add>
    </changelog>
  </subsection>
  <subsection name="WebSocket">
    <changelog>
      <update>
        Remove configuration settings related to the restriction on WebSocket
        endpoint deployment that was removed in version 2.1 of the
        specification. (markt)
      </update>
    </changelog>
  </subsection>
  <subsection name="Web applications">
    <changelog>
      <fix>
        Documentation. <bug>62245</bug>: Include <code>contextXsltFile</code>
        when discussing options for configuring directory listings. (markt)
      </fix>
      <fix>
        Examples. Fix CVE-2022-34305, a low severity XSS vulnerability in the
        Form authentication example. (markt)
      </fix>
      <fix>
        Documentation. Expand the description of the <code>useSendfile</code>
        attribute for HTTP/2 and reference the possibility of file locking when
        using this feature on Windows operating systems. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Other">
    <changelog>
      <update>
        Update to bnd 6.3.1. (markt)
      </update>
      <update>
        The minimum Ant version required to build Tomcat 10.1.x is now 1.10.2.
        (markt)
      </update>
      <add>
        Add additional automation to the build process to reduce the number of
        manual steps that release managers must perform. (schultz)
      </add>
      <add>
        Implement support for reproducible builds. Reproducible builds are
        independent of operating system but require the same Ant version and
        same JDK (vendor and version) to be used as associated version
        information is embedded in a number of build outputs such as JAR file
        manifests. (markt)
      </add>
      <update>
        Update the minimum supported version of Tomcat Native to 1.2.34 to allow
        the removal of the deprecated Java API associated with features that
        will be removed in Tomcat Native 2.0.x. (markt)
      </update>
      <fix>
        Remove and/or update references to the removed
        <code>org.apache.tomcat.util.threads.res</code> package. The
        <code>LocalStrings*.properties</code> files in that package were moved
        to <code>org.apache.tomcat.util.threads</code> package for consistency
        with the rest of the Tomcat code base. (markt)
      </fix>
      <fix>
        <bug>66134</bug>: The NSIS based Tomcat installer for Windows now
        correctly handles the combination of <code>TomcatAdminRoles</code>
        defined in a configuration file and selecting the Manager and/or
        Host Manager web applications in the installer's GUI. (markt)
      </fix>
      <update>
        Update the OWB module to Apache OpenWebBeans 2.0.27. (remm)
      </update>
      <update>
        Update the CXF module to Apache CXF 3.5.3. (remm)
      </update>
      <update>
        Update the Apache Tomcat migration tool for Jakarta EE library to 1.0.1.
        (markt)
      </update>
      <update>
        Update the packaged version of the Tomcat Native Library to 2.0.1 to
        pick up the Windows binaries built with with OpenSSL 3.0.5. (markt)
      </update>
      <add>
        Improvements to French translations. (remm)
      </add>
      <add>
        Improvements to Japanese translations contributed tak7iji. (markt)
      </add>
    </changelog>
  </subsection>
</section>
<section name="Tomcat 10.1.0-M16 (markt)" rtext="2022-06-09">
  <subsection name="Catalina">
    <changelog>
      <fix>
        Update the memory leak protection code to support stopping application
        created executor threads when running on Java 19 and later. (markt)
      </fix>
      <fix>
        Improve the error message if a required <code>--add-opens</code> option
        is missing. (markt)
      </fix>
      <fix>
        Disable the memory leak correction code enabled by the Context attribute
        <code>clearReferencesObjectStreamClassCaches</code> when running on a
        JRE that includes a fix for the underlying memory leak. (markt)
      </fix>
      <fix>
        <pr>515</pr>: Avoid deadlock on startup with some utility executor
        configurations. Submitted by Han Li. (remm)
      </fix>
      <fix>
        <bug>66068</bug>: Ensure that the changes made to a request by the
        <code>RemoteIPValve</code> persist after the request is put into
        asynchronous mode. (markt)
      </fix>
      <add>
        Include the major version in the recommended version used for Tomcat
        Native with the <code>AprLifecycleListener</code>. (markt)
      </add>
      <scode>
        Remove the reporting of the unused APR feature flags. (markt)
      </scode>
    </changelog>
  </subsection>
  <subsection name="Coyote">
    <changelog>
      <fix>
        Additional fix for <bug>65118</bug>. Fix a potential
        <code>NullPointerException</code> when pruning closed HTTP/2 streams
        from the connection. (markt)
      </fix>
      <scode>
        Refactor synchronization blocks locking on <code>SocketWrapper</code> to
        use <code>ReentrantLock</code> to support users wishing to experiment
        with project Loom. (markt)
      </scode>
      <fix>
        <bug>66076</bug>: When using TLS with non-blocking writes and the NIO
        connector, ensure that flushing the buffers attempts to empty all of the
        output buffers. (markt)
      </fix>
      <fix>
        <bug>66084</bug>: Correctly calculate bytes written to a response. Pull
        request <pr>516</pr> provided by aooohan HanLi. (markt)
      </fix>
      <add>
        Correct a regression in the support added for encrypted PKCS#1 formatted
        private keys in the previous release that broke support for unencrypted
        PKCS#1 formatted private keys. (jfclere/markt)
      </add>
      <update>
        Remove support for NPN when using the Tomcat Native Connector as NPN was
        never standardised and browser support for NPN was removed several years
        ago. (markt)
      </update>
    </changelog>
  </subsection>
  <subsection name="Jasper">
    <changelog>
      <fix>
        Update XML schema used for generated web fragments to use the Servlet
        6.0 web fragment schema. (markt)
      </fix>
      <fix>
        Update the XML schema used by the web fragment defined for the Jasper EL
        JAR to use the Servlet 6.0 web fragment schema. (markt)
      </fix>
      <fix>
        Update <code>ImportHandler</code> optimisation for new classes
        introduced in Java 19. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Web Socket">
    <changelog>
      <fix>
        Update the XML schema used by the web fragment defined for the WebSocket
        JAR to use the Servlet 6.0 web fragment schema. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Web applications">
    <changelog>
      <fix>
        <bug>66064</bug>: Update the building page in the documentation web
        application to reflect changes in required Java version and source
        repository. (markt)
      </fix>
      <fix>
        Documentation. Make the description of the HTTP/1.1 configuration
        attributes that control the maximum allowed HTTP header size more
        specific. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Tribes">
    <changelog>
      <fix>
        Increase the default buffer size for replication messages from 43800 to
        65536 bytes. This is expected to improve performance for large messages
        when running on Linux based systems. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Other">
    <changelog>
      <add>
        Improvements to French translations. (remm)
      </add>
      <add>
        Improvements to Japanese translations contributed by Shirayuking and
        tak7iji. (markt)
      </add>
      <add>
        Improvements to Chinese translations contributed by Dingzi2012. (markt)
      </add>
    </changelog>
  </subsection>
</section>
<section name="Tomcat 10.1.0-M15 (markt)" rtext="2022-05-16">
  <subsection name="Catalina">
    <changelog>
      <scode>
        <bug>65853</bug>: Refactor the <code>CsrfPreventionFilter</code> to make
        it easier for sub-classes to modify the nonce generation and storage.
        Based on suggestions by Marvin Fröhlich. (markt)
      </scode>
      <fix>
        <bug>65991</bug>: Avoid NPE with <code>SSLAuthenticator</code> when
        <code>boundOnInit</code> is used on a connector, during the check
        for client certificate authentication availability. (remm)
      </fix>
      <fix>
        <bug>66009</bug>: Use <code>getSubjectX500Principal().toString()</code>
        rather than <code>getSubjectX500Principal().getName(...)</code> to
        retrieve a certificate DN, to match the output of the deprecated
        <code>getSubjectDN().getName()</code> that was used previously. (remm)
      </fix>
      <add>
        Revert the change in 10.1.0-M11 that added a mapping of
        <code>Shift_JIS</code> for the <code>ja</code> locale to the default
        mappings used by <code>ServletResponse.setLocale()</code> as it
        caused regressions for applications using UTF-8. (markt)
      </add>
      <add>
        Provide a property source that sources values from Kubernetes service
        bindings. Pull request <pr>512</pr> provided by Sumit Kulhadia and
        Gareth Evans. (markt)
      </add>
    </changelog>
  </subsection>
  <subsection name="Coyote">
    <changelog>
      <add>
        <pr>501</pr>: Add new <code>maxHttpRequestHeaderSize</code> and
        <code>maxHttpResponseHeaderSize</code> attributes which allow setting
        the maximum HTTP header sizes independently. If not specified, the
        value of the <code>maxHttpHeaderSize</code> connector attribute will
        be used. Submitted by Zhongming Hua. (remm)
      </add>
      <fix>
        The root cause of the Linux kernel duplicate accept bug has been
        identified along with the version of the kernel that includes the fix.
        The error message displayed when this bug occurs has been updated to
        reflect this new information and to advise users to update to a version
        of the OS that uses kernel 5.10 or later. Thanks to Christopher Gual for
        the research into this issue. (markt)
      </fix>
      <scode>
        Remove the custom UTF-8 decoder that was introduced to work around
        various UTF-8 decoding bugs in Java. These issues were fixed in early
        Java 8 releases. Now the minimum Java version is 11, we can be sure that
        Tomcat will not be running on a JRE where these issues are present.
        (markt)
      </scode>
      <fix>
        <bug>66023</bug>: Improve the fix for <bug>65726</bug> and support HTTP
        upgrade with a request body for a wider set of use cases. (markt)
      </fix>
      <fix>
        <bug>66035</bug>: Add NULL check on the SSL session reference in the
        Panama code before accessing the session id and creation time. (remm)
      </fix>
      <add>
        Add support for encrypted PKCS#1 formatted private keys when configuring
        the internal, in memory key store. Based on <pr>511</pr>.
        (jfclere/markt)
      </add>
      <fix>
        Remove the <code>prestartminSpareThreads</code> attribute of the
        <code>StandardThreadExecutor</code> since all core threads are always
        started by default making this attribute meaningless. Pull request
        <pr>510</pr> provided by Aooohan. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Jasper">
    <changelog>
      <update>
        To align with the JSP 3.1 specification, make the
        <code>jsp:plugin</code> action a NO-OP. No HTML will be generated as a
        result the <code>jsp:plugin</code> action being included in a JSP. This
        is be because the associated HTML elements are no longer supported by
        any major browser. (markt)
      </update>
      <fix>
        <bug>66031</bug>: Fix NPE when using a custom JspFactory. Patch by
        Jean-Louis Monteiro. (remm)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Webapps">
    <changelog>
      <fix>
        <bug>66008</bug>: In the documentation web application, clarify the
        recommendation for the use the <code>trimSpaces</code> option for Jasper
        in production environments. (markt)
      </fix>
      <fix>
        Update the documentation web application to state that the
        <code>EncryptInterceptor</code> does not provide sufficient protection
        to run Tomcat clustering over an untrusted network. This is
        CVE-2022-29885. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Other">
    <changelog>
      <add>
        Improvements to Chinese translations contributed by shawn. (markt)
      </add>
      <add>
        Improvements to French translations. (remm)
      </add>
      <add>
        Improvements to German translations contributed by Thomas Hoffmann.
        (markt)
      </add>
      <add>
        Improvements to Japanese translations contributed by Shirayuking.
        (markt)
      </add>
      <add>
        Improvements to Korean translations. (woonsan)
      </add>
      <update>
        Update to Commons Daemon 1.3.1. This fixes a known regression in 1.3.0
        when configuring the Windows service with custom scripts as described in
        <bug>66055</bug>. (markt)
      </update>
      <update>
        Update to JSign 4.1. (markt)
      </update>
      <update>
        Update the packaged version of the Tomcat Native Library to 1.2.33 to
        pick up Windows binaries built with OpenSSL 1.1.1o.(markt)
      </update>
    </changelog>
  </subsection>
</section>
<section name="Tomcat 10.1.0-M14 (markt)" rtext="2022-04-01">
  <subsection name="Catalina">
    <changelog>
      <fix>
        <bug>65736</bug>: Disable the <code>forceString</code> option for the
        JNDI <code>BeanFactory</code> and replace it with an automatic search
        for an alternative setter with the same name that accepts a
        <code>String</code>. This is a security hardening measure. (markt)
      </fix>
      <add>
         Remove the <code>WebappClassLoaderBase.getResources()</code> method as
         it is not used and if something accidentally exposes the class loader
         this method can be used to gain access to Tomcat internals. (markt)
      </add>
    </changelog>
  </subsection>
</section>
<section name="Tomcat 10.1.0-M13 (markt)" rtext="not released">
  <subsection name="Catalina">
    <changelog>
      <scode>
        Update the JASPIC 2.0 API to Jakarta Authentication 3.0 (JASPIC was
        renamed for Jakarta EE 10) including the implementation of the new
        methods on <code>AuthConfigFactory</code>. (markt)
      </scode>
      <scode>
        Harden the CredentialHandler implementations by switching to a
        constant-time implementation for credential comparisons. (schultz/markt)
      </scode>
    </changelog>
  </subsection>
  <subsection name="Coyote">
    <changelog>
      <fix>
        Use a constant for the default TLS cipher suite. This will allow
        skipping setting it in some cases (for example, it does not make
        sense for OpenSSL TLS 1.3). (remm)
      </fix>
      <fix>
        <pr>487</pr>: Improve logging of unknown settings frames. Pull request
        by Thomas Hoffmann. (remm)
      </fix>
      <add>
        <bug>65975</bug>: Add a warning if a TLS virtual host is configured with
        optional certificate authentication and the containing connector is also
        configured to support HTTP/2 as HTTP/2 does not permit optional
        certificate authentication. (markt)
      </add>
      <add>
        <bug>65975</bug>: Add a warning if a TLS virtual host is configured for
        TLS 1.3 with a JSSE implementation and a web application is configured
        for <code>CLIENT-CERT</code> authentication. <code>CLIENT-CERT</code>
        authentication requires post-handshake authentication (PHA) when used
        with TLS 1.3 but the JSSE TLS 1.3 implementation does not support PHA.
        (markt)
      </add>
      <fix>
        Improve the recycling of Processor objects to make it more robust.
        (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Jasper">
    <changelog>
      <fix>
        <bug>65959</bug>: Serialize Function as String[] rather Class[]. (remm)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Web applications">
    <changelog>
      <fix>
        <bug>65947</bug>: Correct the name of HTTP/1.1 configuration property
        (<code>maxHttpHeaderSize</code>) that is inherited by the HTTP/2 upgrade
        protocol. Thanks to Thomas Hoffmann. (markt)
      </fix>
      <fix>
        <bug>65952</bug>: Align <code>--add-opens</code> configuration for jsvc
        with the current Tomcat scripts. (markt)
      </fix>
      <fix>
        Correct the AJP and HTTP/1.1 Connector configuration pages in the
        documentation web application to show which attributes are applicable to
        all Connectors and which are implementation specific. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Other">
    <changelog>
      <fix>
        Correct a spelling mistake in the German translations. Thanks to Thomas
        Hoffmann. (markt)
      </fix>
      <fix>
        <bug>65951</bug>: Use the <code>tomcat.output</code> property for OSGi
        bundle manifest paths. (isapir)
      </fix>
      <update>
        Update to Commons Daemon 1.3.0. (markt)
      </update>
      <update>
        Update to Checkstyle 10.0. (markt)
      </update>
      <update>
        Update to SpotBugs 4.6.0. (markt)
      </update>
      <add>
        Expand the <code>spotbugs</code> Ant task to also cover test code.
        (markt)
      </add>
      <update>
        Update to bnd 6.2.0. (markt)
      </update>
      <update>
        Remove OSGi annotations dependency as it is no longer required with bnd
        6.2.0. (markt)
      </update>
      <update>
        Update to the Eclipse JDT compiler 4.23. (markt)
      </update>
      <scode>
        Refactor the resource files for the Apache Tomcat installer for Windows
        so that all the resource files are located in a single directory in the
        source tree. (markt)
      </scode>
      <update>
        Update the packaged version of the Tomcat Native Library to 1.2.32 to
        pick up Windows binaries built with OpenSSL 1.1.1n.(markt)
      </update>
      <add>
        Improvements to Chinese translations contributed by 15625988003. (markt)
      </add>
      <add>
        Improvements to French translations. (remm)
      </add>
      <add>
        Improvements to Japanese translations contributed by tak7iji. (markt)
      </add>
      <add>
        Expand coverage of translations for <code>jakarta.el</code> package.
        Based on <pr>488</pr> from Volodymyr Siedlecki. (markt)
      </add>
    </changelog>
  </subsection>
</section>
<section name="Tomcat 10.1.0-M12 (markt)" rtext="2022-03-14">
  <subsection name="Catalina">
    <changelog>
      <fix>
        <pr>477</pr>: Update the default list of JARs to skip to include the
        Apache Log4j JAR for Jakarta EE platforms. Pull request by Michael
        Seele. (markt)
      </fix>
      <fix>
        <bug>65921</bug>: The <code>type</code> substitution flag for the
        rewrite valve should set the content type for the response, not the
        request. (markt)
      </fix>
      <fix>
        <pr>479</pr>: Enable the rewrite valve to redirect requests when the
        original request cannot be mapped to a context. This typically happens
        when no ROOT context is defined. Pull request by elkman. (markt)
      </fix>
      <fix>
        <bug>65940</bug>: Fix <code>NullPointerException</code> if an exception
        occurs during the destruction of a Servlet. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Coyote">
    <changelog>
      <fix>
        Fix regression introduced with <bug>65757</bug> bugfix which better
        identified non request threads but which introduced a similar problem
        when user code was doing sequential operations in a single thread.
        Test case code submitted by Istvan Szekely. (remm)
      </fix>
      <fix>
        Fix potential thread-safety issue that could cause HTTP/1.1 request
        processing to wait, and potentially timeout, waiting for additional
        data when the full request has been received. (markt)
      </fix>
      <fix>
        Throw <code>IOException</code> rather than
        <code>IllegalStateException</code> when the application attempts to
        write to an HTTP/2 stream after the client has closed the stream.
        (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Jasper">
    <changelog>
      <fix>
        When resolving methods in EL expressions that use beans and/or static
        fields, ensure that any custom type conversion is considered when
        identifying the method to call. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Web applications">
    <changelog>
      <fix>
        Correct the name of the <code>value</code> attribute in the new
        documentation of <code>OpenSSLConfCmd</code> elements. (rjung)
      </fix>
    </changelog>
  </subsection>
  <subsection name="WebSocket">
    <changelog>
      <fix>
        Fix typo in JPMS substitution configuration for WebSocket client module.
        (markt)
      </fix>
    </changelog>
  </subsection>
</section>
<section name="Tomcat 10.1.0-M11 (markt)" rtext="2022-02-28">
  <subsection name="Catalina">
    <changelog>
      <add>
        Add <code>ha-api-*.jar</code> and <code>jaxws-rt-*.jar</code> to the
        list of JARs to skip when scanning for TLDs, web fragments and
        annotations. (michaelo)
      </add>
      <add>
        Expand the default mappings used by
        <code>ServletResponse.setLocale()</code> to include a mapping from the
        <code>ja</code> locale to the <code>Shift_JIS</code> encoding. (markt)
      </add>
      <fix>
        <bug>65806</bug>: Improve the handling of session ID generation when the
        default algorithm for <code>SecureRandom</code> (<code>SHA1PRNG</code>)
        is not supported by the configured providers as will be the case for a
        FIPS compliant configuration. (markt)
      </fix>
      <add>
        <pr>463</pr>: Add support for additional user attributes to
        <code>TomcatPrincipal</code> and <code>GenericPrincipal</code>.
        Patch provided by Carsten Klein. (michaelo)
      </add>
      <fix>
        <pr>464</pr>: Fall back to the class loader used to load JULI when the
        thread context class loader is not set. In a normal Tomcat
        configuration, this will be the system class loader. Based on a pull
        request by jackshirazi. (markt)
      </fix>
      <fix>
        <pr>469</pr>: Include the Jakarata Annotations API in the classes that
        Tomcat will not load from web applications. Pull request provided by
        ppkarwasz. (markt)
      </fix>
      <fix>
        Fix a potential <code>StringIndexOutOfBoundsException</code> exception
        when generating a WebDAV multi-status response after an error during a
        copy or delete. Report the paths relative to the server root for any
        resources with an error. (markt)
      </fix>
      <fix>
        Improve the format of WebDAV XML responses to make them easier for
        humans to read. The change ensures that there is always a line break
        before starting a new element. (markt)
      </fix>
      <fix>
        Improve validation of the <code>Destination</code> header for WebDAV
        <code>MOVE</code> and <code>COPY</code> requests. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Coyote">
    <changelog>
      <fix>
        Correct a regression in the fix for <bug>65454</bug> that meant that
        <code>minSpareThreads</code> and <code>maxThreads</code> settings were
        ignored when the Connector used an internal executor. (markt)
      </fix>
      <fix>
        <bug>65776</bug>: Improve the detection of the Linux duplicate accept
        bug and reduce (hopefully avoid) instances of false positives. (markt)
      </fix>
      <fix>
        <bug>65848</bug>: Revert the change that attempted to align the
        behaviour of client certificate authentication with NIO or NIO2 with
        OpenSSL for TLS between MacOS and Linux/Windows as the root cause was
        traced to configuration differences. (markt)
      </fix>
      <fix>
        <pr>467</pr>: When system time moves backwards (e.g. after clock
        correction), ensure that the cached formatted current date used for
        HTTP headers tracks this change. Pull request provided by zhenguoli.
        (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Jasper">
    <changelog>
      <fix>
        <pr>474</pr>: Prevent a tag file from corrupting the ELContext of the
        calling page. Pull request provided by Dmitri Blinov. (markt)
      </fix>
      <fix>
        Minor optimisation of serialization for <code>FunctionMapperImpl</code>
        in response to pull request <pr>476</pr>. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Web applications">
    <changelog>
      <fix>
        Remove the applet example from the example web application as applets
        are no longer supported in any major browser. (markt)
      </fix>
      <scode>
        Refactor a small number of pages in the examples web application to
        avoid an issue with reproducible builds due to differences in file
        ordering across different operating systems with Ant's zip task. (markt)
      </scode>
      <fix>
        Better documentation for the <code>protocol</code> attribute of the
        <code>JNDIRealm</code>. (markt)
      </fix>
      <fix>
        Clarify the settings described in the documentation web application to
        configure a cluster using static membership. (markt)
      </fix>
      <add>
        Add information on the <code>OpenSSLConf</code> and
        <code>OpenSSLConfCmd</code> elements to the HTTP SSL configuration page
        in the documentation web applications. (markt)
      </add>
    </changelog>
  </subsection>
  <subsection name="jdbc-pool">
    <changelog>
      <scode>
        Use LF line endings for text files in JARs to support reproducible
        builds across different operating systems. (markt)
      </scode>
    </changelog>
  </subsection>
  <subsection name="Other">
    <changelog>
      <scode>
        Use LF line endings for text files in JARs to support reproducible
        builds across different operating systems. (markt)
      </scode>
      <fix>
        Fix dependencies for individual test targets in Ant build file. Based on
        <pr>468</pr> provided by Totoo chenyonghui. (markt)
      </fix>
      <update>
        Update the OWB module to Apache OpenWebBeans 2.0.26. (remm)
      </update>
      <fix>
        Revert the cherry-pick of JavaDoc fix from DBCP applied in 10.1.0.M9
        that broke the <code>DataSourceMXBean</code> by using a type that isn't
        supported by MXBeans. (markt)
      </fix>
      <add>
        Improvements to Chinese translations contributed by cloudgyb, totoo and
        Chenyonghui1028. (markt)
      </add>
      <add>
        Improvements to French translations. (remm)
      </add>
      <add>
        Improvements to German translations contributed by Andreas Abraham.
        (markt)
      </add>
      <add>
        Improvements to Japanese translations contributed by tak7iji and
        Shirayuking. (markt)
      </add>
      <add>
        Improvements to Korean translations. (woonsan)
      </add>
      <add>
        Improvements to Spanish translations contributed by ceciliabarudi.
        (markt)
      </add>
    </changelog>
  </subsection>
</section>
<section name="Tomcat 10.1.0-M10 (markt)" rtext="2022-01-20">
  <subsection name="Coyote">
    <changelog>
      <fix>
        Correct a regression in the fix for <bug>65785</bug> that broke HTTP/2
        server push. (markt)
      </fix>
    </changelog>
  </subsection>
</section>
<section name="Tomcat 10.1.0-M9 (markt)" rtext="not released">
  <subsection name="Catalina">
    <changelog>
      <fix>
        Add missing check in <code>SessionCookieConfig.setAttribute()</code> to
        ensure that the method fails if called after the web application has
        started. (markt)
      </fix>
      <fix>
        Add additional locking to <code>DataSourceUserDatabase</code> to provide
        improved protection for concurrent modifications. (markt)
      </fix>
      <fix>
        Add recycling check in the input and output stream isReady to try to
        give a more informative ISE when the facade has been recycled. (remm)
      </fix>
      <fix>
        Make the calculation of the session storage location more robust when
        using file based persistent storage. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Coyote">
    <changelog>
      <fix>
        <bug>65726</bug>: Implement support for HTTP/1.1 upgrade when the
        request includes a body. The maximum permitted size of the body is
        controlled by <code>maxSavePostSize</code>. (markt)
      </fix>
      <fix>
        Restore pre-starting of <code>minSpareThreads</code> lost in the fix for
        <bug>65454</bug>. (markt)
      </fix>
      <fix>
        Revert the previous fix for <bug>65714</bug> and implement a more
        comprehensive fix. (markt)
      </fix>
      <fix>
        Allow freeing up context on JVM shutdown in the OpenSSL Panama module
        by properly using a shared scope. (remm)
      </fix>
      <fix>
        <bug>65757</bug>: Missing initial IO listener notification on Servlet
        container dispatch to another container thread. (remm)
      </fix>
      <fix>
        Expand the fix for <bug>65757</bug> so that rather than just checking if
        processing is happening on a container thread, the check is now if
        processing is happening on the container thread currently allocated to
        this request/response. (markt)
      </fix>
      <fix>
        Improve the fix for RST frame ordering added in 10.1.0-M8 to avoid a
        potential deadlock on some systems in non-default configurations.
        (markt)
      </fix>
      <add>
        <bug>65767</bug>:  Add support for certificates that use keys encrypted
        using PBES2. Based on a pull request provided by xiezhaokun. (markt)
      </add>
      <scode>
        Refactor testing whether a String is a valid HTTP token. (markt)
      </scode>
      <fix>
        <bug>65785</bug>: Perform additional validation of HTTP headers when
        using HTTP/2. (markt)
      </fix>
      <fix>
        When a Connector or Endpoint is paused, ensure that only new connections
        and new requests on existing connections are stopped while allowing in
        progress requests to run to completion. (markt)
      </fix>
      <fix>
        Explicitly release ByteBuffer instances associated with pooled channels
        when stopping the NioEndpoint and Nio2Endpoint. (markt)
      </fix>
      <fix>
        Narrow the scope of the logging of invalid cookie headers to just the
        invalid cookie rather than the whole cookie header. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Jasper">
    <changelog>
      <fix>
        <bug>65724</bug>: Fix missing messages for some
        <code>PropertyNotWritableException</code>s caused by a typo in the name
        used for a resource string. (markt)
      </fix>
      <add>
        Add support for specifying Java 18 (with the value <code>18</code>) as
        the compiler source and/or compiler target for JSP compilation. If used
        with an Eclipse JDT compiler version that does not support these values,
        a warning will be logged and the default will used.
        (markt)
      </add>
      <update>
        To align with the JSP 3.1 specification that requires Java 11 as a
        minimum, make the default JSP source version and target version Java 11.
        (markt)
      </update>
    </changelog>
  </subsection>
  <subsection name="WebSocket">
    <changelog>
      <fix>
        Remove the <code>ALLOW_UNSUPPORTED_EXTENSIONS</code> system property. As
        per RFC 6455, all extensions are optional. If an endpoint declares an
        extension that isn't supported there is no need to trigger an error. The
        extension can just be excluded from the result of the negotiation.
        (markt)
      </fix>
      <fix>
        Remove the <code>DISABLE_BUILTIN_EXTENSIONS</code>. It was added to
        enable Tomcat to pass the WebSocket TCK but after updates to the TCK, it
        is no longer required. (markt)
      </fix>
      <add>
        Add support for POJO WebSocket endpoints to the programmatic upgrade
        that allows applications to opt to upgrade an HTTP connection to
        WebSocket. (markt)
      </add>
      <add>
        Add support for the WebSocket 2.1 client-side API for configuring TLS
        connection for wss client connections. (markt)
      </add>
      <fix>
        <bug>65763</bug>: Improve handling of WebSocket connection close if a
        message write times out before the message is fully written. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Other">
    <changelog>
      <update>
        Update the OWB module to Apache OpenWebBeans 2.0.25. (remm)
      </update>
      <update>
        Update the CXF module to Apache CXF 3.5.0. (remm)
      </update>
      <add>
        Improvements to Chinese translations contributed by zhnnn. (markt)
      </add>
      <add>
        Improvements to French translations. (remm)
      </add>
      <add>
        Improvements to Japanese translations contributed by Shirayuking, yoshy
        and tak7iji. (markt)
      </add>
      <add>
        Improvements to Korean translations. (woonsan)
      </add>
      <add>
        Improvements to Spanish translations contributed by Israel. (markt)
      </add>
      <update>
        Update SpotBugs to 4.5.2. (markt)
      </update>
      <update>
        Update to the Eclipse JDT compiler 4.22. (markt)
      </update>
      <update>
        Update the NSIS installer to 3.08. (markt)
      </update>
      <update>
        Update UnboundID to 6.0.3. (markt)
      </update>
      <update>
        Update CheckStyle to 9.2.1. (markt)
      </update>
      <update>
        Update BND to 6.1.0. (markt)
      </update>
      <update>
        Update OSGI annotations to 1.1.1. (markt)
      </update>
    </changelog>
  </subsection>
</section>
<section name="Tomcat 10.1.0-M8 (markt)" rtext="2021-12-08">
  <subsection name="Catalina">
    <changelog>
      <update>
        Log warning if a listener is not nested inside a Server element
        although it must have been. (michaelo)
      </update>
      <fix>
        Where the getter can be called safely, remove the checks for
        <code>ServletContext</code> getters called from a
        <code>contextInitialized()</code> method of a
        <code>ServletContextListener</code> that was not defined in a
        <code>web.xml</code> file, a <code>web-fragment.xml</code> file nor
        annotated with <code>WebListener</code>. (markt)
      </fix>
      <fix>
        Make SPNEGO authentication more robust for the case where the provided
        credential has expired. (markt)
      </fix>
      <fix>
        Limit cookie support to RFC 6265 to align with recent updates to the
        Servlet specification. (markt)
      </fix>
      <fix>
        <bug>65684</bug>: Fix a potential <code>NullPointerException</code> when
        using JULI. (markt)
      </fix>
      <docs>
        Document conditions under which the <code>AprLifecycleListener</code>
        can be used to avoid JVM crashes. (michaelo)
      </docs>
      <fix>
        Refactor the <code>AsyncFileHandler</code> to reduce the possibility of
        log messages being lost on shutdown. (markt)
      </fix>
      <update>
        Refactor the <code>AsyncFileHandler</code> to remove the need for the
        <code>org.apache.juli.AsyncLoggerPollInterval</code>. If set, this
        property now has no effect. (markt)
      </update>
      <add>
        Add debug logging to the <code>RestCsrfPreventionFilter</code>. Based on
        pull request <pr>452</pr> by Polina Georgieva. (markt)
      </add>
    </changelog>
  </subsection>
  <subsection name="Coyote">
    <changelog>
      <add>
        Use implicit scopes in the OpenSSL Panama module to tie the cleanup of
        OpenSSL memory to the Java GC. (remm)
      </add>
      <add>
        Provide protection against a known <a
        href="https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1924298">OS
        bug</a> that causes the acceptor to report an incoming connection more
        than once. (markt)
      </add>
      <fix>
        Avoid unnecessary duplicate read registrations for blocking I/O with the
        NIO connector. (markt)
      </fix>
      <fix>
        <bug>65677</bug>: Improve exception handling for errors during HTTP/1.1
        reads with NIO2. (markt)
      </fix>
      <fix>
        When an error occurs that triggers a stream reset, ensure that the first
        <code>RST</code> frame sent to the client is the one associated with the
        error that triggered the reset. (markt)
      </fix>
      <fix>
        <bug>65714</bug>: Fix exceptions when the security manager is enabled
        and the first request received after starting is an HTTP request to a
        TLS enabled NIO2 connector. (markt)
      </fix>
      <add>
        Ensure that using NIO or NIO2 with OpenSSL for TLS behaves the same way
        on MacOS as it does on Linux and Windows when no trusted certificate
        authorities are configured and reject all client certificates. (markt)
      </add>
      <fix>
        Avoid a potential deadlock during the concurrent processing of incoming
        HTTP/2 frames for a stream and that stream being reset. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="WebSocket">
    <changelog>
      <add>
        Update the WebSocket API packaging to remove the copy of the client API
        from the server API and replace it with a dependency on the client API.
        This aligns Tomcat with changes in the WebSocket 2.1 specification.
        (markt)
      </add>
    </changelog>
  </subsection>
</section>
<section name="Tomcat 10.1.0-M7 (markt)" rtext="2021-11-15">
  <subsection name="Catalina">
    <changelog>
      <scode>
        Refactor <code>HttpServlet</code> so the default <code>doHead()</code>
        implementation now calls <code>doGet()</code> and relies on the
        container to ensure that the response body is not sent. The previous
        behaviour (wrapping the response) may be enabled per Servlet by setting
        the <code>jakarta.servlet.http.legacyDoHead</code> Servlet
        initialisation parameter to <code>true</code>. This aligns Tomcat with
        recent changes updates for Servlet 6.0 in the Jakarta Servlet
        specification project. (markt)
      </scode>
      <add>
        Add support for setting generic attributes for session cookies. This
        aligns Apache Tomcat with recent changes in the Jakarta Servlet
        specification project. (markt)
      </add>
      <fix>
        Do not add a trailing <code>/</code> to a request URI during
        canonicalization. (markt)
      </fix>
      <fix>
        Invalid byte sequences (typically in %nn form) in a request URi that are
        not valid for the given URI encoding now trigger a 400 response. (markt)
      </fix>
      <fix>
        Ensure that a request URI starts with a <code>/</code>. (markt)
      </fix>
      <add>
        Add a new Connector option, <code>rejectSuspiciousURIs</code> that will
        causes 'suspicious' (see the Servlet 6.0 specification) URIs to be
        rejected with a 400 response. (markt)
      </add>
      <fix>
        Improve robustness of JNDIRealm for exceptions occurring when getting
        the connection. Also add missing close when running into issues
        getting the passord of a user. (remm)
      </fix>
      <docs>
        Add Javadoc comment which listeners must be nested within
        <code>Server</code> elements only. (michaelo)
      </docs>
      <add>
        Add support for custom caching strategies for web application resources.
        This initial implementation allows control over whether or not a
        resource is cached. (markt)
      </add>
    </changelog>
  </subsection>
  <subsection name="Coyote">
    <changelog>
      <scode>
        Improve performance of Connector shutdown - primarily to reduce the time
        it takes to run the test suite. (markt)
      </scode>
      <add>
        <pr>457</pr>: Add a <code>toString()</code> method to
        <code>MimeHeader</code> to aid debugging. (dblevins)
      </add>
      <add>
        Add experimental OpenSSL support through the Panama API incubating in
        Java 17, with support for OpenSSL 1.1+. This no longer requires
        tomcat-native or APR. Please refer to the <code>openssl-java17</code>
        module for more details. (remm)
      </add>
    </changelog>
  </subsection>
  <subsection name="Jasper">
    <changelog>
      <update>
        Regenerate the EL parser using JavaCC 7.0.10. (markt)
      </update>
      <fix>
        Fix a bug that prevented the EL parser correctly parsing a literal Map
        that used variables rather than literals for both keys and values.
        (markt)
      </fix>
      <update>
        Ensure that the <code>getType()</code> method of any
        <code>ELResolver</code> implementation returns <code>null</code> if
        either the <code>ELResolver</code> or the resolved property is read-only
        to align Tomcat with recent updates in the Jakarta EL specification
        project. (markt)
      </update>
      <fix>
        Implement an alternative solution to support the JSP page directive
        attribute <code>isThreadSafe</code> now that the
        <code>SingleThreadModel</code> interface has been removed from the
        Servlet API. The new approach synchronizes the <code>service()</code>
        method.
      </fix>
    </changelog>
  </subsection>
  <subsection name="WebSocket">
    <changelog>
      <update>
        Add a new method<code>
        ServerEndpointConfig.Configurator.getContainerDefaultConfigurator()
        </code>to align with recent updates in the WebSocket specification
        project. (markt)
      </update>
      <update>
        Add a new method <code>ServerContainer.upgradeHttpToWebSocket()</code>
        to align with recent updates in the WebSocket specification project.
        (markt)
      </update>
    </changelog>
  </subsection>
  <subsection name="Tribes">
    <changelog>
      <fix>
        <pr>454</pr>: Differentiate warning messages in
        <code>KubernetesMembershipProvider</code> so that the missing attribute
        is clear to the user. PR provided by Hal Deadman. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Other">
    <changelog>
      <fix>
        Switch from Cobertura to JaCoCo for code coverage as Cobertura does not
        support code coverage for code compiled for Java 11 onwards. It also
        removes the need to use a single thread to run the tests. (markt)
      </fix>
    </changelog>
  </subsection>
</section>
<section name="Tomcat 10.1.0-M6 (markt)" rtext="2021-10-01">
  <subsection name="Catalina">
    <changelog>
      <fix>
        Provide the DataSource in the constructor of
        <code>DataSourceUserDatabase</code>, since it is always global. (remm)
      </fix>
      <fix>
        Fix delete then create object manipulations with
        <code>DataSourceUserDatabase</code>. (remm)
      </fix>
      <update>
        Remove all deprecated code from the Servlet API to align Tomcat with
        recent changes in the Jakarta Servlet specification project. (markt)
      </update>
      <add>
        Add the currently available Jakarta EE 10 schemas from the Jakarta EE
        schema project. (markt)
      </add>
      <add>
        Implement the new connection ID and request ID API for Servlet 6.0.
        (markt)
      </add>
      <fix>
        <bug>65553</bug>: Implement a work-around for a
        <a href="https://bugs.openjdk.java.net/browse/JDK-8273874">JRE bug</a>
        that can trigger a memory leak when using the JNDI realm. (markt)
      </fix>
      <fix>
        <bug>65586</bug>: Fix the bloom filter used to improve performance of
        archive file look ups in the web resources implementation so it works
        correctly for directory lookups whether or not the provided directory
        name includes the trailing <code>/</code>. (markt)
      </fix>
      <fix>
        <pr>451</pr>: Improve the usefulness of the thread name cache used in
        JULI. Pull request provided by t-gergely. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Coyote">
    <changelog>
      <fix>
        <bug>65563</bug>: Correct parsing of HTTP <code>Content-Range</code>
        headers. Tomcat was incorrectly requiring an <code>=</code> character
        after <code>bytes</code>. Fix based on pull request <pr>449</pr> by
        Thierry Guérin. (markt)
      </fix>
      <fix>
        Correct a potential <code>StackOverflowException</code> with HTTP/2 and
        sendfile. (markt)
      </fix>
      <fix>
        Further improvements in the management of the connection flow control
        window. This addresses various bugs that caused streams to incorrectly
        report that they had timed out waiting for an allocation from the
        connection flow control window. (markt)
      </fix>
      <fix>
        <bug>65577</bug>: Fix a <code>AccessControlException</code> reporting
        when running an NIO2 connector with TLS enabled. (markt)
      </fix>
      <update>
        Reclassify TLS ciphers that use AESCCM8 as medium security rather than
        high security to align with recent changes in OpenSSL. (markt)
      </update>
      <fix>
        Fix an issue that caused some Servlet non-blocking API reads of the HTTP
        request body to incorrectly use blocking IO. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Jasper">
    <changelog>
      <scode>
        Deprecate <code>ELResolver.getFeatureDescriptors</code> to align Tomcat
        with recent updates in the Jakarta EL specification project. (markt)
      </scode>
      <add>
        Add support for default methods to <code>BeanRELResolver</code> to align
        Tomcat with recent updates in the Jakarta EL specification project.
        (markt)
      </add>
      <add>
        Add support for <code>MethodReference</code> and the associated getter
        on <code>MethodExpression</code> to align Tomcat with recent updates in
        the Jakarta EL specification project. (markt)
      </add>
      <add>
        Refactor <code>ScopedAttributeELResolver</code> to separate out the
        functionality that is unrelated to scoped attributes into two new
        resolvers: <code>ImportELResolver</code> and
        <code>NotFoundELResolver</code>. This aligns Tomcat with recent updates
        to the Jakarta Server Pages specification. (markt)
      </add>
      <fix>
        Fix the implementation of <code>MethodExpression.getMethodInfo()</code>
        so that it returns the expected value rather than failing when the
        method expression is defined with the parameter values in the expression
        rather than the types being passed explicitly to
        <code>ExpressionFactory.createMethodExpression()</code>. (markt)
      </fix>
      <add>
        Add support for a new page/tag directive <code>errorOnELNotFound</code>
        that can be used to trigger an identifier if an EL expression in a
        page/tag contains an identifier that cannot be resolved. (markt)
      </add>
    </changelog>
  </subsection>
  <subsection name="WebSocket">
    <changelog>
      <fix>
        The internal upgrade handler should close the associated
        <code>WebConnection</code> on destroy. (remm)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Web applications">
    <changelog>
      <update>
        Update the web applications that are included with Apache Tomcat to use
        the Jakarta EE 10 schema for web.xml. (markt)
      </update>
      <fix>
        Clarify the JASPIC configuration options in the documentation web
        application. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Other">
    <changelog>
      <fix>
        <bug>65585</bug>: Update obsolete comments at the start of the
        <code>build.properties.default</code> file. (markt)
      </fix>
    </changelog>
  </subsection>
</section>
<section name="Tomcat 10.1.0-M5 (markt)" rtext="2021-09-10">
  <subsection name="Catalina">
    <changelog>
      <fix>
        Enable Tomcat to start if an (old) XML parser is configured that does
        not support <code>allow-java-encodings</code>. A warning will be logged
        if such an XML parser is detected. (markt)
      </fix>
      <fix>
        Change the behaviour of custom error pages. If an error occurs after the
        response is committed, once the custom error page content has been added
        to the response the connection is now closed immediately rather than
        closed cleanly. i.e. the last chunk that marks the end of the response
        body is no longer sent. This acts as an additional signal to the client
        that the request experienced an error. (markt)
      </fix>
      <fix>
        <bug>65479</bug>: When handling requests using JASPIC authentication,
        ensure that <code>PasswordValidationCallback.getResult()</code> returns
        the result of the password validation rather than always returning
        <code>false</code>. Fixed via pull request <pr>438</pr> provided by
        Robert Rodewald. (markt)
      </fix>
      <update>
        Improve the reusability of the <code>UserDatabase</code> by adding
        intermediate concrete implementation classes and allowing to do
        partial database updates on <code>save</code>. (remm)
      </update>
      <scode>
        Refactor the authenticators to delegate the check for preemptive
        authentication to the individual authenticators where an authentication
        scheme specific check can be performed. Based on pull request
        <pr>444</pr> by Robert Rodewald. (markt)
      </scode>
      <add>
        Add a <code>UserDatabase</code> implementation as a superset of the
        <code>DataSourceRealm</code> functionality. (remm)
      </add>
      <fix>
        Make sure the dynamic Principal returned by
        <code>UserDatabaseRealm</code> stays up to date with the database
        contents, and add an option to have it be static, similar to the other
        realms. (remm)
      </fix>
      <add>
        Add <code>derby-*.jar</code> to the list of JARs to skip when scanning
        for TLDs, web fragments and annotations. (markt)
      </add>
      <fix>
        <pr>447</pr>. Correct JPMS metadata for catalina.jar. Pull request
        provided by Hui Wang. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Coyote">
    <changelog>
      <fix>
        Correct a logic error that meant setting
        <code>certificateKeystoreFile</code> to <code>NONE</code> did not have
        the expected effect. <code>NONE</code> was incorrectly treated as a file
        path. Patch provided by Mikael Sterner. (markt)
      </fix>
      <scode>
        Remove the deprecated APR/Native connector which includes the HTTP APR
        and the AJP APR connector. Also remove the Java interfaces to the
        APR/Native library that are not used by the OpenSSL integration for the
        NIO and NIO2 connectors. (markt)
      </scode>
      <scode>
        Refactor the JSSE/OpenSSL integration to avoid the use of
        <code>finalize()</code>. (markt)
      </scode>
      <fix>
        <bug>65505</bug>: When an HTTP header value is removed, ensure that the
        order of the remaining header values is unchanged. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="WebSocket">
    <changelog>
      <fix>
        <bug>65506</bug>: Fix write timeout check that was using the read
        timeout value. Patch submitted by Gustavo Mahlow. (remm)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Web applications">
    <changelog>
      <fix>
        Remove unnecessary Context settings from the examples web application.
        (markt)
      </fix>
      <fix>
        Document default value for <code>unpackWARs</code> and related clean-up.
        Pull request <pr>439</pr> provided by Robert Rodewald. (markt)
      </fix>
      <fix>
        Clarify the documentation of the <code>compressionMinSize</code> and
        <code>compressibleMimeType</code> HTTP <code>Connector</code>
        attributes. Pull request <pr>442</pr> provided by crisgeek. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Tribes">
    <changelog>
      <scode>
        Refactor the <code>ParallelNioSender</code> to avoid the use of
        <code>finalize()</code>. (markt)
      </scode>
    </changelog>
  </subsection>
  <subsection name="Other">
    <changelog>
      <fix>
        Fix failing build when building on non-English locales. Pull request
        <pr>441</pr> provided by Dachuan J. (markt)
      </fix>
      <update>
        Update to JSign version 4.0 to enable code signing without the need for
        the installation of additional client tools. (markt)
      </update>
      <update>
        Add Apache Derby 10.15.2.0 to the testsuite dependencies, for JDBC
        and DataSource testing. (remm)
      </update>
      <add>
        Update the internal fork of Apache Commons BCEL to 40d5eb4 (2021-09-01,
        6.6.0-SNAPSHOT). Code clean-up only. (markt)
      </add>
      <add>
        Update the internal fork of Apache Commons Codec to fd44e6b (2021-09-01,
        1.16-SNAPSHOT). Minor refactoring. (markt)
      </add>
      <add>
        <bug>65661</bug>: Update the internal fork of Apache Commons FileUpload
        to 33d2d79 (2021-09-01, 2.0-SNAPSHOT). Refactoring and code clean-up. As
        a result of Commons File Upload now using
        <code>java.nio.file.Files</code>, applications using multi-part uploads
        need to ensure that the JVM is configured with sufficient direct memory
        to store all in progress multi-part uploads. (markt)
      </add>
      <add>
        Update the internal fork of Apache Commons Pool to 2.11.1 (2021-08-17).
        Improvements, code clean-up and refactoring. (markt)
      </add>
      <add>
        Update the internal fork of Apache Commons DBCP to 2.9.0 (2021-08-03).
        Improvements, code clean-up and refactoring. (markt)
      </add>
      <update>
        Update the packaged version of the Tomcat Native Library to 1.2.31 to
        pick up Windows binaries built with OpenSSL 1.1.1l.(markt)
      </update>
      <update>
        Switch to the CDN as the primary download location for ASF dependencies.
        (markt)
      </update>
      <add>
        Improvements to Chinese translations contributed by syseal, wolibo,
        ZhangJieWen and DigitalFatCat. (markt)
      </add>
      <add>
        Improvements to French translations. (remm)
      </add>
      <add>
        Improvements to Japanese translations contributed by tak7iji. (markt)
      </add>
      <add>
        Improvements to Korean translations. (woonsan)
      </add>
    </changelog>
  </subsection>
</section>
<section name="Tomcat 10.1.0-M4 (markt)" rtext="2021-08-06">
  <subsection name="WebSocket">
    <changelog>
      <fix>
        Correct a regression in the Java 8 to Java 11 changes made in 10.1.0-M3
        that caused all WebSocket end points to fail to register. (markt)
      </fix>
    </changelog>
  </subsection>
</section>
<section name="Tomcat 10.1.0-M3 (markt)" rtext="not released">
  <subsection name="General">
    <changelog>
      <update>
        Update the minimum required Java version to Java 11. (markt)
      </update>
    </changelog>
  </subsection>
  <subsection name="Catalina">
    <changelog>
      <scode>
        Incremented the supported Jakarta Servlet version to 6.0 to align with
        the current development branch of the Jakarta Servlet specification.
        Plans have changed and the next iteration of the Servlet specification
        will be 6.0 rather than 5.1. (markt)
      </scode>
      <fix>
        <bug>65411</bug>: Always close the connection when an uncaught
        <code>NamingException</code> occurs to avoid connection locking.
        Submitted by Ole Ostergaard. (remm)
      </fix>
      <fix>
        <bug>65433</bug>: Correct a regression in the fix for <bug>65397</bug>
        where a <code>StringIndexOutOfBoundsException</code> could be triggered
        if the canonical path of the target of a symlink was shorter than the
        canonical path of the directory in which the symlink had been created.
        Patch provided by Cedomir Igaly. (markt)
      </fix>
      <add>
        <bug>65443</bug>: Refactor the <code>CorsFilter</code> to make it easier
        to extend. (markt)
      </add>
      <fix>
        To avoid unnecessary cache revalidation, do not add an HTTP
        <code>Expires</code> header when setting adding an HTTP header of
        <code>CacheControl: private</code>. (markt)
      </fix>
      <scode>
        Refactor JULI's custom <code>LogManager</code>, the
        web application class loader implementation, the web resources
        implementation, the <code>JreLeakPreventionListener</code>
        implementation and the <code>StandardJarScanner</code> implementation to
        remove Java 8 specific code now that the minimum Java version has been
        increased to 11. (markt)
      </scode>
      <scode>
        Remove all references to the endorsed standards override feature and the
        specifying of optional packages (extensions) in the manifest as these
        are not supported in Java 11. (markt)
      </scode>
    </changelog>
  </subsection>
  <subsection name="Coyote">
    <changelog>
      <fix>
        When writing an HTTP/2 response via sendfile (only enabled when
        <code>useAsyncIO</code> is true) the connection flow control window was
        sometimes ignored leading to various error conditions. sendfile now
        checks both the stream and connection flow control windows before
        writing. (markt)
      </fix>
      <add>
        Add debug logging for writing an HTTP/2 response via sendfile. (markt)
      </add>
      <fix>
        Correct bugs in the HTTP/2 connection flow control management that meant
        it was possible for a connection to stall waiting for a connection flow
        control window update that had already arrived. Any streams on that
        connection that were trying to write when this happened would time out.
        (markt)
      </fix>
      <fix>
        <bug>65448</bug>: When using TLS with NIO, it was possible for a
        blocking response write to hang just before the final TLS packet
        associated with the response until the connection timed out at which
        point the final packet would be sent and the connection closed. (markt)
      </fix>
      <fix>
        <bug>65454</bug>: Fix a race condition that could result in a delay to
        a new request. The new request could be queued to wait for an existing
        request to finish processing rather than the thread pool creating a new
        thread to process the new request. (markt)
      </fix>
      <fix>
        <bug>65460</bug>: Correct a regression introduced in the previous
        release in the change to reduce the number of small HTTP/2 window
        updates sent for streams. A logic error meant that small window updates
        for the connection were dropped. This meant that the connection flow
        window slowly reduced over time until nothing could be sent. (markt)
      </fix>
      <fix>
        Remove NIO workarounds and code that is no longer needed with Java 11.
        (remm)
      </fix>
      <scode>
        Refactor the endpoints to remove Java 8 specific code now that the
        minimum Java version has been increased to 11. (markt)
      </scode>
    </changelog>
  </subsection>
  <subsection name="Jasper">
    <changelog>
      <scode>
        Add additional generics to the EL API to align with the latest changes
        in the EL specification project. (markt)
      </scode>
      <add>
        Enable EL lambda expressions to be coerced to functional interfaces.
        This is an implementation of a proposed extension to the Jakarta
        Expression Language specification. (markt)
      </add>
      <scode>
        Refactor the EL API and implementation to remove Java 8 specific code
        now that the minimum Java version has been increased to 11. (markt)
      </scode>
    </changelog>
  </subsection>
  <subsection name="WebSocket">
    <changelog>
      <scode>
        Refactor the WebSocket implementation to remove Java 8 specific code now
        that the minimum Java version has been increased to 11. (markt)
      </scode>
    </changelog>
  </subsection>
  <subsection name="Web applications">
    <changelog>
      <fix>
        <bug>65404</bug>: Correct a regression in the fix for <bug>63362</bug>
        that caused the server status page in the Manager web application to be
        truncated if HTTP upgrade was used such as when starting a WebSocket
        connection. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Other">
    <changelog>
      <add>
        Improvements to Chinese translations contributed by ZhangJieWen and
        chengzheyan. (markt)
      </add>
      <add>
        Improvements to French translations. (remm)
      </add>
      <add>
        Improvements to Japanese translations contributed by tak7iji. (markt)
      </add>
      <add>
        Improvements to Korean translations. (woonsan)
      </add>
      <fix>
        Use of GraalVM native images no longer automatically disables JMX
        support. JMX support may still be disabled by calling
        <code>org.apache.tomcat.util.modeler.Registry.disableRegistry()</code>.
        (markt)
      </fix>
    </changelog>
  </subsection>
</section>
<section name="Tomcat 10.1.0-M2 (markt)" rtext="2021-07-02">
  <subsection name="Catalina">
    <changelog>
      <scode>
        Refactor the <code>RemoteIpValve</code> to use the common utility method
        for list to comma separated string conversion. (markt)
      </scode>
      <scode>
        Refactor <code>JNDIRealm$JNDIConnection</code> so its fields are
        accessible to sub-classes of <code>JNDIRealm</code>. (markt)
      </scode>
      <fix>
        Fix serialization warnings in <code>UserDatabasePrincipal</code>
        reported by SpotBugs. (markt)
      </fix>
      <fix>
        <bug>65397</bug>: Calls to
        <code>ServletContext.getResourcePaths()</code> no longer include
        symbolic links in the results unless <code>allowLinking</code> has been
        set to <code>true</code>. If a resource is skipped because of this
        change, a warning will be logged as this typically indicates a
        configuration issue. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Coyote">
    <changelog>
      <fix>
        <bug>65368</bug>: Improve handling of clean closes of inbound TLS
        connections. Treat them the same way as clean closes of non-TLS
        connections rather than as unknown errors. (markt)
      </fix>
      <fix>
        Modify the HTTP/2 connector not to sent small updates for stream flow
        control windows to the user agent as, depending on how the user agent is
        written, this may trigger small writes from the user agent that in turn
        trigger the overhead protection. Small updates for stream flow control
        windows are now combined with subsequent flow control window updates for
        that stream to ensure that all stream flow control window updates sent
        from Tomcat are larger than <code>overheadWindowUpdateThreshold</code>.
        (markt)
      </fix>
      <add>
        Add additional debug logging to track the current state of the HTTP/2
        overhead count that Tomcat uses to detect and close potentially
        malicious connections. (markt)
      </add>
      <update>
        Many HTTP/2 requests from browsers will trigger one overhead frame and
        one non-overhead frame. Change the overhead calculation so that a
        non-overhead frame reduces the current overhead count by 2 rather than
        1. This means that, over time, the overhead count for a well-behaved
        connection will trend downwards. (markt)
      </update>
      <update>
        Change the initial HTTP/2 overhead count from <code>-10</code> to
        <code>-10 * overheadCountFactor</code>. This means that, regardless of
        the value chosen for <code>overheadCountFactor</code>, when a connection
        opens 10 overhead frames in a row will be required to trigger the
        overhead protection. (markt)
      </update>
      <update>
        Increase the default <code>overheadCountFactor</code> from
        <code>1</code> to <code>10</code> and change the reduction in overhead
        count for a non-overhead frame from <code>-2</code> to <code>-20</code>.
        This allows for a larger range (0-20) to be used for
        <code>overheadCountFactor</code> providing for finer-grained control.
        (markt)
      </update>
      <fix>
        Modify the parsing of HTTP header values that use the
        <code>1#token</code> to ignore empty elements as per RFC 7230 section 7
        instead of treating the presence of empty elements as an error. (markt)
      </fix>
      <fix>
        Expand the unit tests for <code>HttpServlet.doHead()</code> and correct
        the flushing of the response buffer. The buffer used to behave as if it
        was one byte smaller than the configured size. The buffer was flushed
        (and the response committed if required) when the buffer was full. The
        buffer is now flushed (and the response committed if required) if the
        buffer is full and there is more data to write. (markt)
      </fix>
      <fix>
        Fix an issue where concurrent HTTP/2 writes (or concurrent reads) to the
        same connection could hang and eventually timeout when async IO was
        enabled (it is enabled by default). (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Jasper">
    <changelog>
      <fix>
        <bug>65387</bug>: Correct a regression in the fix for <bug>65124</bug>
        and restore the local definition of <code>out</code> for tags that
        implement <code>TryCatchFinally</code>. (markt)
      </fix>
      <fix>
        <bug>65390</bug>: Correct a regression in the fix for <bug>65124</bug>
        and restore code that was removed in error leading to JSP compilation
        failures in some circumstances. (markt)
      </fix>
      <update>
        Update to the Eclipse JDT compiler 4.20. (markt)
      </update>
      <add>
        Add support for specifying Java 17 (with the value <code>17</code>) as
        the compiler source and/or compiler target for JSP compilation. If used
        with an Eclipse JDT compiler version that does not support these values,
        a warning will be logged and the latest supported version will used.
        (markt)
      </add>
      <fix>
        <bug>65377</bug>: Update the Java code generation for JSPs not to use
        the boxed primitive constructors as they have been deprecated in Java 9
        and marked for future removal in Java 16. <code>valueOf()</code> is now
        used instead. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="WebSocket">
    <changelog>
      <scode>
        Refactor the <code>DigestAuthenticator</code> to reuse a shared
        <code>SecureRandom</code> instance rather than create a new one to
        generate the <code>cnonce</code> if required. (markt)
      </scode>
    </changelog>
  </subsection>
  <subsection name="Web applications">
    <changelog>
      <fix>
        <bug>65385</bug>: Correct the link in the documentation web application
        the Maven Central repository. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Other">
    <changelog>
      <add>
        Use JSign to integrate the build script with the code signing service to
        enable release builds to be created on Linux as well as Windows. (markt)
      </add>
      <update>
        Update the OWB module to Apache OpenWebBeans 2.0.23. (remm)
      </update>
      <update>
        Update the CXF module to Apache CXF 3.4.4. (remm)
      </update>
      <fix>
        <bug>65369</bug> / <pr>422</pr>: Add the additional
        <code>--add-opens=...</code> options required for running Tomcat on Java
        16 onwards to the <code>service.bat</code> script to align it with the
        other start-up scripts. PR provided by MCMicS. (markt)
      </fix>
      <add>
        Improvements to French translations. (remm)
      </add>
      <add>
        Improvements to Korean translations. (woonsan)
      </add>
      <update>
        Update JUnit to version 4.13.2. (markt)
      </update>
      <update>
        Update EasyMock to 4.3. (markt)
      </update>
      <update>
        Update Objenesis to 3.2. (markt)
      </update>
      <update>
        Update UnboundID to 6.0.0. (markt)
      </update>
      <update>
        Update CheckStyle to 8.43. (markt)
      </update>
      <update>
        Update SpotBugs to 4.2.3. (markt)
      </update>
      <update>
        Update OSGi annotations to 1.1.0. (markt)
      </update>
    </changelog>
  </subsection>
</section>
<section name="Tomcat 10.1.0-M1 (markt)" rtext="2021-06-15">
  <subsection name="General">
    <changelog>
      <scode>
        This release contains all of the changes up to and including those in
        Apache Tomcat 10.0.6 plus the additional changes listed below. (markt)
      </scode>
      <scode>
        Remove code previously marked for removal in Tomcat 10.1.x. (markt)
      </scode>
    </changelog>
  </subsection>
  <subsection name="Catalina">
    <changelog>
      <scode>
        Incremented the supported Jakarta Servlet version to 5.1 to align with
        the current development branch of the Jakarta Servlet specification.
        (markt)
      </scode>
      <fix>
        <bug>65301</bug>: <code>RemoteIpValve</code> will now avoid getting
        the local host name when it is not needed. (remm)
      </fix>
      <fix>
        <bug>65308</bug>: NPE in JNDIRealm when no <code>userRoleAttribute</code>
        is given. (fschumacher)
      </fix>
      <add>
        <pr>412</pr>: Add commented out, sample users for the Tomcat Manager app
        to the default <code>tomcat-users.xml</code> file. Based on a PR by
        Arnaud Dagnelies. (markt)
      </add>
      <add>
        <pr>418</pr>: Add a new option, <code>pass-through</code>, to the
        default servlet's <code>useBomIfPresent</code> initialization parameter
        that causes the default servlet to leave any BOM in place when
        processing a static file and not to use the BOM to determine the
        encoding of the file. Based on a pull request by Jean-Louis Monteiro.
        (markt)
      </add>
      <fix>
        <pr>419</pr>: When processing POST requests of type
        <code>multipart/form-data</code> for parts without a filename that are
        added to the parameter map in String form, check the size of the part
        before attempting conversion to String. Pull request provided by
        tianshuang. (markt)
      </fix>
      <add>
        Implement the new <code>Cookie</code> methods
        <code>setAttribute()</code>, <code>getAttribute()</code> and
        <code>getAttributes()</code> introduced in Servlet 6.0. (markt)
      </add>
      <fix>
        AprLifecycleListener does not show dev version suffix for libtcnative
        and libapr. (michaelo)
      </fix>
      <update>
        Refactor principal handling in <code>UserDatabaseRealm</code> using
        an inner class that extends <code>GenericPrincipal</code>. (remm)
      </update>
      <fix>
        Enable the default <code>doHead()</code> implementation in
        <code>HttpServlet</code> to correctly handle responses where the content
        length needs to be represented as a long since it is larger than the
        maximum value that can be represented by an int. (markt)
      </fix>
      <fix>
        Avoid synchronization on roles verification for the memory
        <code>UserDatabase</code>. (remm)
      </fix>
      <fix>
        Fix the default <code>doHead()</code> implementation in
        <code>HttpServlet</code> to correctly handle responses where the Servlet
        calls <code>ServletResponse.reset()</code> and/or
        <code>ServletResponse.resetBuffer()</code>. (markt)
      </fix>
      <fix>
        Fix the default <code>doHead()</code> implementation in
        <code>HttpServlet</code> to correctly handle responses generated using
        the Servlet non-blocking API. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Coyote">
    <changelog>
      <fix>
        <bug>65303</bug>: Fix a possible <code>NullPointerException</code> if
        an error occurs on an HTTP/1.1 connection being upgraded to HTTP/2 or on
        a pushed HTTP/2 stream. (markt)
      </fix>
      <update>
        Simplify AprEndpoint socket bind for all platforms. (michaelo)
      </update>
      <fix>
        <bug>65340</bug>: Add missing check for a negative return value for
        <code>Hpack.decodeInteger</code> in the <code>HpackDecoder</code>,
        which could cause a <code>NegativeArraySizeException</code> exception.
        Submitted by Thomas, and verified the fix is present in the donated
        hpack code in a further update. (remm)
      </fix>
      <add>
        Add debug logging for HTTP/2 HPACK header decoding. (markt)
      </add>
      <fix>
        Correct parsing of HTTP headers consisting of a list of tokens so that a
        header with an empty token is treated consistently regardless of whether
        the empty token is at the start, middle or end of the list of tokens.
        (markt)
      </fix>
      <fix>
        Remove support for the <code>identity</code> transfer encoding. The
        inclusion of this encoding in RFC 2616 was an error that was corrected
        in 2001. Requests using this transfer encoding will now receive a 501
        response. (markt)
      </fix>
      <fix>
        Process transfer encoding headers from both HTTP 1.0 and HTTP 1.1
        clients. (markt)
      </fix>
      <fix>
        Ensure that if the transfer encoding header contains the
        <code>chunked</code>, that the <code>chunked</code> encoding is the
        final encoding listed. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Jasper">
    <changelog>
      <scode>
        Incremented the supported Jakarta Expression Language version to 5.0 to
        align with the current development branch of the Jakarta Expression
        Language specification. (markt)
      </scode>
      <scode>
        Review code used to generate Java source from JSPs and tags and remove
        code found to be unnecessary. (markt)
      </scode>
      <scode>
        Refactor use of internal <code>ChildInfo</code> class to use compile
        time type checking rather than run time type checking. (markt)
      </scode>
      <fix>
        <bug>65124</bug>: Partial fix. When generating Java source code to call
        a tag handler, only define the local variable <code>JspWriter out</code>
        when it is going to be used. (markt)
      </fix>
      <scode>
        Add generics to the EL 5.0 API to align with the current EL 5.0
        development branch. (markt)
      </scode>
      <update>
        Update the <code>web-fragment.xml</code> included in
        <code>jasper.jar</code> and <code>jasper-el.jar</code> to use the
        Servlet 5.0 schema. (markt)
      </update>
      <fix>
        Update JspC to generate <code>web.xml</code> and
        <code>web-fragment.xml</code> files using Servlet 5.0 schemas. (markt)
      </fix>
      <scode>
        Remove the deprecated method
        <code>MethodExpression.isParmetersProvided()</code> from the EL API to
        align with the current EL 5.0 development branch. (markt)
      </scode>
      <fix>
        <bug>65358</bug>: Improve expression language method matching for
        methods with varargs. Where multiple methods may match the provided
        parameters, the method that requires the fewest varargs is preferred.
        (markt)
      </fix>
      <add>
        <bug>65332</bug>: Add a commented out section in
        <code>catalina.policy</code> that provides the necessary permissions to
        compile JSPs with javac when running on Java 9 onwards with a security
        manager. It is commented out as it will cause errors if used with
        earlier Java versions. (markt)
      </add>
    </changelog>
  </subsection>
  <subsection name="WebSocket">
    <changelog>
      <fix>
        <bug>65317</bug>: When using <code>permessage-deflate</code>, the
        WebSocket connection was incorrectly closed if the uncompressed payload
        size was an exact multiple of 8192. Based on a patch provided by Saksham
        Verma. (markt)
      </fix>
      <update>
        Update the <code>web-fragment.xml</code> included in
        <code>tomcat-websocket.jar</code> to use the Servlet 5.0 schema. (markt)
      </update>
      <fix>
        <bug>65342</bug>: Correct a regression introduced with the fix for
        <bug>65262</bug> that meant Tomcat's WebSocket implementation would only
        work with Tomcat's implementation of the Jakarta WebSocket API. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Web applications">
    <changelog>
      <fix>
        Improve the description of the <code>maxConnections</code> and
        <code>acceptCount</code> attributes in the Connector section of the
        documentation web application. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Other">
    <changelog>
      <add>
        Improvements to French translations. (remm)
      </add>
      <add>
        Improvements to Korean translations. (woonsan)
      </add>
      <fix>
        <bug>65362</bug>: Correct a regression in the previous release. The
        change to create OSGi <code>Require-Capability</code> sections in
        manifests for Jakarta API JARs manually rather than with bnd annotations
        did not add the necessary manual entries to the embedded JARs. (markt)
      </fix>
      <update>
        Update the packaged version of the Tomcat Native Library to 1.2.30. Also
        update the minimum recommended version to 1.2.30. (markt)
      </update>
    </changelog>
  </subsection>
</section>
</body>
</document>

