<?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)>

  <!-- 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.0.3 (markt)" rtext="in development">
  <subsection name="Catalina">
    <changelog>
      <fix>
        Revert an incorrect fix for a potential resource leak that broke
        deployment via the Ant deploy task. (markt)
      </fix>
      <fix>
        Improve error message for failed ConfigurationSource lookups in the
        Catalina implementation. (remm)
      </fix>
      <fix>
        <bug>65135</bug>: Rename Context method
        <code>isParallelAnnotationScanning</code> to
        <code>getParallelAnnotationScanning</code> for consistency and ease
        of use in JMX descriptors. (remm)
      </fix>
      <update>
        Allow the loader to directly use the Tomcat Migration Tool for JakartaEE
        as a <code>ClassFileTransformer</code> using the
        <code>jakartaConverter</code> attribute. This only supports javax to
        jakarta conversion for classes, not for classloader resources or
        static files. (remm)
      </update>
      <add>
        Integrate the Tomcat Migration Tool for JakartaEE at deployment time.
        Java EE web applications placed in the <code>webapps-javaee</code>
        directory will be migrated to Jakarta EE 9 and placed in the
        <code>webapps</code> where it will be deployed (or not) based on the
        current settings for automatic deployment. (markt)
      </add>
      <fix>
        <bug>64938</bug>: Align the behaviour when <code>null</code> is passed
        to the <code>ServletResponse</code> methods
        <code>setCharacterEncoding()</code>, <code>setContentType()</code> and
        <code>setLocale()</code> with the recent clarification from the Jakarta
        Servlet project of the expected behaviour in these cases. (markt)
      </fix>
      <fix>
        Ensure that the <code>AsyncListener.onError()</code> event is triggered
        when a I/O error occurs during non-blocking I/O. There were some cases
        discovered where this was not happening. (markt)
      </fix>
      <add>
        Make the non-blocking I/O error handling more robust by handling the
        case where the application code swallows an <code>IOException</code> in
        <code>WriteListener.onWritePossible()</code> and
        <code>ReadListener.onDataAvailable()</code>. (markt)
      </add>
    </changelog>
  </subsection>
  <subsection name="Coyote">
    <changelog>
      <add>
        <bug>64943</bug>: Add support for Unix Domain Sockets to
        <code>org.apache.coyote.http11.Http11AprProtocol</code>. Depends on
        <code>tomcat-native</code> 1.2.26 and up. (minfrin)
      </add>
      <fix>
        <bug>65118</bug>: Fix a potential <code>NullPointerException</code> when
        pruning closed HTTP/2 streams from the connection. (markt)
      </fix>
      <fix>
        Avoid NullPointerException when a secure channel is closed before the
        SSL engine was initialized. (remm)
      </fix>
      <fix>
        Ensure that the <code>ReadListener</code>'s <code>onError()</code> event
        is triggered if the client closes the connection before sending the
        entire request body and the server is ready the request body using
        non-blocking I/O. (markt)
      </fix>
      <fix>
        <bug>65137</bug>: Ensure that a response is not corrupted as well as
        incomplete if the connection is closed before the response is fully
        written due to a write timeout. (markt)
      </fix>
      <fix>
        Related to bug <bug>65131</bug>, make sure all errors from OpenSSL are
        fully cleared, as there could be more than one error present after
        an operation (confirmed in the OpenSSL API documentation). (remm)
      </fix>
      <fix>
        Make handling of OpenSSL read errors more robust when plain text data is
        reported to be available to read. (markt)
      </fix>
      <fix>
        Correct handling of write errors during non-blocking I/O to ensure that
        the associated <code>AsyncContext</code> was closed down correctly.
        (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Web applications">
    <changelog>
      <fix>
        Remove the restriction that prevented the Manager web application
        deploying different web applications in parallel. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Other">
    <changelog>
      <update>
        Update the OWB module to Apache OpenWebBeans 2.0.21. (remm)
      </update>
      <update>
        Update the CXF module to Apache CXF 3.4.2. (remm)
      </update>
      <add>
        Improvements to French translations. (remm)
      </add>
      <add>
        Improvements to Korean translations. (woonsan)
      </add>
      <add>
        Improvements to Brazilian Portuguese translations. Provided by Thiago.
        (mark)
      </add>
      <add>
        Improvements to Russian translations. Provided by Azat. (mark)
      </add>
      <add>
        Improvements to Chinese translations. Provided by shawn. (mark)
      </add>
      <update>
        Update to bnd 5.3.0. (markt)
      </update>
    </changelog>
  </subsection>
</section>
<section name="Tomcat 10.0.2 (markt)" rtext="2021-02-02">
  <subsection name="Catalina">
    <changelog>
      <fix>
        <bug>65106</bug>: Fix the ConfigFileLoader handling of file URIs when
        running under a security manager on some JREs. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Coyote">
    <changelog>
      <fix>
        Ensure that SNI provided host names are matched to SSL virtual host
        configurations in a case insensitive manner. (markt)
      </fix>
      <fix>
        <bug>65111</bug>: Free direct memory buffers in the APR connector.
        (remm)
      </fix>
    </changelog>
  </subsection>
</section>
<section name="Tomcat 10.0.1 (markt)" rtext="not released">
  <subsection name="Catalina">
    <changelog>
      <fix>
        <bug>60781</bug>: Escape elements in the access log that need to be
        escaped for the access log to be parsed unambiguously.
        (fschumacher/markt)
      </fix>
      <add>
        <bug>64110</bug>: Add support for additional TLS related request
        attributes that provide details of the protocols and ciphers requested
        by a client in the initial TLS handshake. (markt)
      </add>
      <add>
        Let the <code>RemoteCIDRValve</code> inherit from
        <code>RequestFilterValve</code> and support all of its features.
        Especially add support for connector specific configuration
        using <code>addConnectorPort</code>. (rjung)
      </add>
      <add>
        Add <code>peerAddress</code> to coyote request, which contains
        the IP address of the direct connection peer. If a reverse proxy
        sits in front of Tomcat and the protocol used is AJP or HTTP
        in combination with the <code>RemoteIp(Valve|Filter)</code>,
        the peer address might differ from the <code>remoteAddress</code>.
        The latter then contains the address of the client in front of the
        reverse proxy, not the address of the proxy itself.
        Support for the peer address has been added to the
        RemoteAddrValve and RemoteCIDRValve with the new attribute
        <code>usePeerAddress</code>. This can be used to restrict access
        to Tomcat based on the reverse proxy IP address, which is especially
        useful to harden access to AJP connectors. The peer address can also
        be logged in the access log using the new <code>%{peer}a</code>
        syntax. (rjung)
      </add>
      <fix>
        Avoid uncaught InaccessibleObjectException on Java 16 trying to clear
        references threads. (remm)
      </fix>
      <fix>
        <bug>65033</bug>: Fix JNDI realm error handling when connecting to a
        failed server when pooling was not enabled. (remm)
      </fix>
      <fix>
        <bug>65047</bug>: If the <code>AccessLogValve</code> is unable to open
        the access log file, include information on the current user in the
        associated log message  (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Coyote">
    <changelog>
      <fix>
        Additional fix for <bug>64830</bug> to address an edge case that could
        trigger request corruption with h2c connections. (markt)
      </fix>
      <fix>
        <bug>64974</bug>: Improve handling of pipelined HTTP requests in
        combination with the Servlet non-blocking IO API. It was possible that
        some requests could get dropped. (markt)
      </fix>
      <add>
        Add support for using Unix domain sockets for NIO when running
        on Java 16 or later. This uses NIO specific
        <code>unixDomainSocketPath</code> and
        <code>unixDomainSocketPathPermissions</code> attributes.
        Based on a PR submitted by Graham Leggett. (remm)
      </add>
      <fix>
        <bug>65001</bug>: Fix error handling for exceptions thrown from calls
        to <code>ReadListener</code> and <code>WriteListener</code>. (markt)
      </fix>
      <fix>
        Avoid possible infinite loop in <code>OpenSSLEngine.unwrap</code>
        when the destination buffers state is changed concurrently. (remm)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Jasper">
    <changelog>
      <add>
        Add a new <code>StringInterpreter</code> interface that allows
        applications to provide customised string attribute value to type
        conversion within JSPs. This allows applications to provide a conversion
        implementation that is optimised for the application. (markt)
      </add>
      <fix>
        <bug>64965</bug>: <code>JspContextWrapper.findAttribute</code> should
        ignore expired sessions rather than throw an
        <code>IllegalStateException</code>. (remm)
      </fix>
      <update>
        Update to the Eclipse JDT compiler 4.18. (markt)
      </update>
    </changelog>
  </subsection>
  <subsection name="Web applications">
    <changelog>
      <fix>
        <bug>65007</bug>: Clarify that the commands shown in the TLS
        documentation for importing a signed TLS certificate from a certificate
        authority are typical examples that may need to be adjusted in some
        cases. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Tribes">
    <changelog>
      <fix>
        Work around DNS caching for the DNS provider of the cloud membership.
        (jfclere)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Other">
    <changelog>
      <add>
        Improvements to Chinese translations. Provided by leeyazhou and Yi Shen.
        (markt)
      </add>
      <add>
        Improvements to French translations. (remm)
      </add>
      <add>
        Improvements to Korean translations. (woonsan)
      </add>
      <update>
        Update the packaged version of the Tomcat Native Library to 1.2.26.
        (markt)
      </update>
      <add>
        Update the internal fork of Apache Commons Pool to 2.9.1-SNAPSHOT
        (2021-01-15). (markt)
      </add>
      <add>
        Update the internal fork of Apache Commons DBCP to 2.9.0-SNAPSHOT
        (2021-01-15). (markt)
      </add>
      <update>
        Migrate to new code signing service. (markt)
      </update>
      <scode>
        Use <code>java.nio.file.Path</code> to test for one directory being a
        sub-directory of another in a consistent way. (markt)
      </scode>
      <update>
        Update to Commons Daemon 1.2.4. (markt)
      </update>
      <add>
        Improvements to Brazilian Portuguese translations. Provided by Rual
        Zaninetti Rosa and Lucas. (markt)
      </add>
      <add>
        Improvements to Russian translations. Provided by Polina and Azat.
        (markt)
      </add>
      <update>
        Update the NSIS Installer used to build the Windows installer to version
        3.06.1. (kkolinko)
      </update>
    </changelog>
  </subsection>
</section>
<section name="Tomcat 10.0.0 (markt)" rtext="2020-12-08">
  <subsection name="Catalina">
    <changelog>
      <fix>
        <bug>56181</bug>: Update the RemoteIpValve and RemoteIpFilter so that
        calls to <code>ServletRequest.getRemoteHost()</code> are consistent with
        the return value of <code>ServletRequest.getRemoteAddr()</code> rather
        than always returning a value for the proxy. (markt)
      </fix>
      <fix>
        <bug>56890</bug>: Align the behaviour of
        <code>ServletContext.getRealPath(String path)</code> with the recent
        clarification from the Servlet specification project. If the path
        parameter does not start with <code>/</code> then Tomcat processes the
        call as if <code>/</code> is appended to the beginning of the
        provided path. (markt)
      </fix>
      <add>
        <bug>64080</bug>: Enhance the graceful shutdown feature. Includes a new
        option for <code>StandardService</code>,
        <code>gracefulStopAwaitMillis</code>, that allows a time to be
        specified to wait for client connections to complete and close before
        the Container hierarchy is stopped. (markt)
      </add>
      <fix>
        <bug>64921</bug>: Ensure that the <code>LoadBalancerDrainingValve</code>
        uses the correct setting for the secure attribute for any session
        cookies it creates. Based on a pull request by Andreas Kurth. (markt)
      </fix>
      <fix>
        <bug>64947</bug>: Don't assume that the <code>Upgrade</code> header has
        been set on the <code>HttpServletResponse</code> before any call is made
        to <code>HttpServletRequest.upgrade()</code>. (markt)
      </fix>
      <fix>
        Ensure that values are not duplicated when manipulating the vary header.
        Based on a pull request by Fredrik Fall. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Coyote">
    <changelog>
      <update>
        The APR/Native Connectors for both HTTP and AJP have been deprecated and
        will be removed in Apache Tomcat 10.1.x onwards. (markt)
      </update>
      <fix>
        <bug>64944</bug>: Ensure that the bytesSent metric is correctly updated
        when compression is enabled. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="WebSocket">
    <changelog>
      <fix>
        <bug>64951</bug>: Fix a potential file descriptor leak when WebSocket
        connections are attempted and fail. Patch provided by Maurizio Adami.
        (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Web applications">
    <changelog>
      <fix>
        Correct a regression in the addition of the HTTP header security filter
        to the examples web application that prevented the Servlet examples that
        depend on the asynchronous API from functioning correctly.
        (kkolinko/markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Tribes">
    <changelog>
      <scode>
        Start all core threads when starting the receiver and dispatch
        interceptor. (kfujino)
      </scode>
    </changelog>
  </subsection>
  <subsection name="Other">
    <changelog>
      <update>
        Update the OWB module to Apache OpenWebBeans 2.0.20. (remm)
      </update>
      <update>
        Update the CXF module to Apache CXF 3.4.1. (remm)
      </update>
      <add>
        <bug>64931</bug>: Implement validation of <code>changelog.xml</code>
        file at build time. (kkolinko)
      </add>
      <update>
        Update to Maven Ant Resolver Tasks 1.3.0. (markt)
      </update>
      <fix>
        <bug>62695</bug>: Provide SHA-256 and SHA-512 checksums for files
        published via Maven. (markt)
      </fix>
    </changelog>
  </subsection>
</section>
<section name="Tomcat 10.0.0-M10 (markt)" rtext="2020-11-19">
  <subsection name="Catalina">
    <changelog>
      <fix>
        <bug>55559</bug>: Add a new attribute, <code>localJndiResource</code>,
        that allows a UserDatabaseRealm to obtain a UserDatabase instance from
        the local (web application) JNDI context rather than the global JNDI
        context. This option is only useful when the Realm is defined on the
        Context. (markt)
      </fix>
      <fix>
        <bug>64805</bug>: Correct imports used by <code>JMXProxyServlet</code>.
        (markt)
      </fix>
      <fix>
        Fix JNDIRealm pooling problems retrying on another bad connection. Any
        retries are made on a new connection, just like with the single
        connection scenario. Also remove all connections from the pool after
        an error. (remm)
      </fix>
      <fix>
        Remove the entry for
        <code>org.apache.tomcat.util.descriptor.tld.LocalStrings</code>
        from tomcat-embed-core's GraalVM tomcat-resource.json. It no more part
        of the jar since
        <a href="https://github.com/apache/tomcat/commit/3815b4951eb3acd30a0b77aafa75fbdb928d5782">
        Fix unwanted JPMS dependency of embed-core on embed-jasper</a>.
        (mgrigorov)
      </fix>
      <fix>
        Add <code>org.apache.coyote.http11.Http11Nio2Protocol</code> to the list
        of classes which could be instantiated via reflection in GraalVM.
        (mgrigorov)
      </fix>
      <add>
        Add <code>JsonErrorReportValve</code> that extends the
        <code>ErrorReportValve</code> that returns  response as JSON instead of
        HTML. (kfujino)
      </add>
      <add>
        Add GraalVM config for Tomcat JNI related classes. This makes it
        possible to use the APR protocol in GraalVM native images.
        To use it add the following to the native-image arguments:
        <code>-H:JNIConfigurationResources=META-INF/native-image/org.apache.tomcat.embed/tomcat-embed-core/tomcat-jni.json</code>
        (mgrigorov)
      </add>
      <fix>
        JNDIRealm connections should only be created with the container
        classloader as the thread context classloader, just like for the JAAS
        realm. (remm)
      </fix>
      <add>
        <bug>64871</bug>: Log a warning if Tomcat blocks access to a file
        because it uses symlinks. (markt)
      </add>
      <update>
        Rename <code>JDBCStore</code> to <code>DataSourceStore</code>
        and remove bottlenecks for database backed session store. Legacy JDBC
        driver configuration is no longer supported. Patch submitted by
        Philippe Mouawad. (remm)
      </update>
    </changelog>
  </subsection>
  <subsection name="Coyote">
    <changelog>
      <fix>
        Refactor the HTTP/2 window update handling for padding in data frames to
        ensure that the connection window is correctly updated after a data
        frame with zero length padding is received. (markt)
      </fix>
      <fix>
        Fix processing of URIs with %nn encoded solidus characters when
        <code>encodedSolidusHandling</code> was set to <code>passthrough</code>
        and the encoded solidus was preceded by other %nn encoded characters.
        Based on a pull request by willmeck. (markt)
      </fix>
      <fix>
        <bug>63362</bug>: Add collection of statistics for HTTP/2, WebSocket and
        connections upgraded via the HTTP upgrade mechanism. (markt)
      </fix>
      <fix>
        Restore exception catch around Poller.events, as it would cause
        the NIO poller thread to exit. This is a regression caused when
        the Poller.events method was refactored. (remm)
      </fix>
      <add>
        Provide messages for some <code>SocketTimeoutException</code> instances
        that did not have one. (markt)
      </add>
      <fix>
        Avoid most of the thread pool use during NIO2 socket accept. Patch
        submitted by Anil Gursel. (remm)
      </fix>
      <add>
        Add additional debug logging for I/O issues when communicating with the
        user agent. (markt)
      </add>
      <fix>
        <bug>64830</bug>: Fix concurrency issue in HPACK decoder. (markt)
      </fix>
      <fix>
        Fix a concurrency issue in the NIO connector that could cause newly
        created connections to be removed from the poller. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Jasper">
    <changelog>
      <fix>
        <bug>64784</bug>: Don't include the time the Java file was generated as
        a comment when generating Java files for JSPs and/or tags if the Java
        file was created during pre-compilation. This is to aid repeatable
        builds. (markt)
      </fix>
      <fix>
        <bug>64794</bug>: Security exception reading system property on
        JspRuntimeLibrary use. (remm)
      </fix>
      <add>
        Add support for specifying Java 16 (with the value <code>16</code>) as
        the compiler source and/or compiler target for JSP compilation. If used
        with an ECJ version that does not support these values, a warning will
        be logged and the latest supported version will used. (markt)
      </add>
      <update>
        Update to the Eclipse JDT compiler 4.17. (markt)
      </update>
      <fix>
        <bug>64849</bug>: Correct JPMS metadata for the Jakarta Expression
        Language JARs to provide missing ServiceLoader information. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="WebSocket">
    <changelog>
      <fix>
        <bug>64848</bug>: Fix a variation of this memory leak when a write I/O
        error occurs on a non-container thread. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Web applications">
    <changelog>
      <fix>
        <bug>64799</bug>: Added missing resources to host-manager web app. (isapir)
      </fix>
      <fix>
        <bug>64797</bug>: Align manager.xml template file in Host-Manager with
        context.xml of real Manager web application. (isapir)
      </fix>
      <add>
        Configure the examples web applications to set
        <code>SameSite=strict</code> for all cookies, including session cookies,
        created by the application. (markt)
      </add>
      <add>
        Configure the examples, Manager and Host Manager to use the HTTP header
        security filter with default settings apart from no HSTS header. Based
        on a suggestion by Debangshu Kundu. (markt)
      </add>
    </changelog>
  </subsection>
  <subsection name="Other">
    <changelog>
      <add>
        Improvements to French translations. (remm)
      </add>
      <add>
        Improvements to Korean translations. (woonsan)
      </add>
      <add>
        Improvements to Russian translations. Provided by Azat. (markt)
      </add>
      <fix>
        <bug>64870</bug>: Update to bnd 5.3.0-SNAPSHOT to work around a
        <a href="https://bugs.openjdk.java.net/browse/JDK-8255854">JRE bug</a>.
        (markt)
      </fix>
    </changelog>
  </subsection>
</section>
<section name="Tomcat 10.0.0-M9 (markt)" rtext="2020-10-09">
  <subsection name="Catalina">
    <changelog>
      <update>
        The health check valve will now check the state of its associated
        containers to report availability. (remm)
      </update>
      <fix>
        Fix race condition when saving and recycling session in
        <code>PersistentValve</code>. (kfujino)
      </fix>
      <update>
        Remove the JDBCRealm. (markt)
      </update>
      <fix>
        Correct numerous spellings throughout the code base. Based on a pull
        request from John Bampton. (markt)
      </fix>
      <fix>
        <bug>64715</bug>: Add PasswordValidationCallback to the Jakarta
        Authentication implementation. Patch provided by Robert Rodewald.
        (markt)
      </fix>
      <update>
        Allow using the utility executor for annotation scanning. Patch
        provided by Jatin Kamnani. (remm)
      </update>
      <fix>
        <bug>64751</bug>: Correct the JPMS module descriptor so the embedded
        JARs may be used with JPMS. (markt)
      </fix>
      <fix>
        When performing an incremental build, ensure bnd does not create
        unwanted JPMS dependencies between embedded JARs. (markt)
      </fix>
      <update>
        Add a bloom filter to speed up archive lookup and improve deployment
        speed of applications with a large number of JARs. Patch
        provided by Jatin Kamnani. (remm)
      </update>
      <fix>
        Throw <code>SQLException</code> instead of
        <code>NullPointerException</code> when failing to connect to the
        database. (kfujino)
      </fix>
      <fix>
        <bug>64735</bug>: Ensure that none of the methods on a
        <code>ServletContext</code> instance always fail when running under a
        SecurityManager. Pull request provided by Kyle Stiemann. (markt)
      </fix>
      <fix>
        <bug>64765</bug>: Ensure that the number of currently processing threads
        is tracked correctly when a web application is undeployed, long running
        requests are being processed and
        <code>renewThreadsWhenStoppingContext</code> is enabled for the web
        application. (markt)
      </fix>
      <add>
        Improve the error messages when running under JPMS without the necessary
        options to enable reflection required by the memory leak prevention /
        detection code. (markt)
      </add>
      <fix>
        When estimating the size of a resource in the static resource cache,
        include a specific allowance for the path to the resource. Based on a
        pull request by blueSky1825821. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Coyote">
    <changelog>
      <fix>
        Do not send an HTTP/2 PING frame to measure round-trip time when it is
        known that the HTTP/2 connection is not in a good state. (markt)
      </fix>
      <fix>
        Ensure HTTP/2 timeouts are processed for idle connections. (markt)
      </fix>
      <fix>
        <bug>64743</bug>: Correct a regression introduced in 10.0.0-M7 that
        caused a <code>Connection: close</code> header to be added to the
        response if the Connector was configured with
        <code>maxSwallowSize=-1</code>. (markt)
      </fix>
      <fix>
        When logging HTTP/2 debug messages, use consistent formatting for stream
        identifiers. (markt)
      </fix>
      <fix>
        Correct some double counting in the code that tracks the number of
        in-flight asynchronous requests. The tracking enables Tomcat to shutdown
        gracefully when asynchronous processing is in use. (markt)
      </fix>
      <fix>
        Improve the error handling for the HTTP/2 connection preface when the
        Connector is configured with <code>useAsyncIO=&quot;true&quot;</code>.
        (markt)
      </fix>
      <fix>
        Refactor the handling of closed HTTP/2 streams to reduce the heap usage
        associated with used streams and to retain information for more streams
        in the priority tree. (markt)
      </fix>
      <fix>
        Don't send the Keep-Alive response header if the connection has been
        explicitly closed. (markt)
      </fix>
      <fix>
        <bug>64710</bug>: Avoid a <code>BufferOverflowException</code> if an
        HTTP/2 connection is closed while the parser still has a partial HTTP/2
        frame in the input buffer. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Jasper">
    <changelog>
      <fix>
        Use lazy instantiation to improve the performance when working with
        listeners added to the <code>ELContext</code>. Pull request provided by
        Thomas Andraschko. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Web applications">
    <changelog>
      <add>
        Configure the Manager and Host Manager web applications to set
        <code>SameSite=strict</code> for all cookies, including session cookies,
        created by the application. (markt)
      </add>
      <fix>
        Update the Manager How-To in the documentation web application to
        clarify when a user may wish to deploy additional instances of the
        Manager web application. (markt)
      </fix>
      <fix>
        <bug>64774</bug>: Review references to Tomcat 9 in the documentation
        web application and remove them or update them to refer to Tomcat 10 as
        appropriate. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Other">
    <changelog>
      <update>
        Update to Commons Daemon 1.2.3. This adds support to jsvc for
        <code>--enable-preview</code> and native memory tracking (Procrun
        already supported these features), adds some additional debug logging and
        adds a new feature to Procrun that outputs the command to (re-)configure
        the service with the current settings. (markt)
      </update>
      <add>
        When building, only rebuild JAR files (including OSGi and JPMS metadata)
        if the contents has changed. (markt)
      </add>
      <add>
        Improvements to Chinese translations. Pull request provided by Yang
        Yang. (markt)
      </add>
      <add>
        Expand coverage of Russian translations. Pull request provided by
        Nikolay Gribanov. (markt)
      </add>
      <update>
        Update the OWB module to Apache OpenWebBeans 2.0.18. (remm)
      </update>
      <update>
        Update the CXF module to Apache CXF 3.4.0. (remm)
      </update>
      <fix>
        Fix running service.bat when called from <code>$CATALINA_HOME</code>.
        (markt)
      </fix>
      <fix>
        Complete the fix for <bug>63815</bug>. Users wishing to use system
        properties that require quoting with <code>catalina.sh</code> and the
        <code>debug</code> option must use a JRE that includes the fix for <a
        href="https://bugs.openjdk.java.net/browse/JDK-8234808">JDK-8234808</a>.
        (markt)
      </fix>
      <add>
        Improvements to Chinese translations. Provided by leeyazhou. (markt)
      </add>
      <add>
        Improvements to Czech translations. Provided by Dušan Hlaváč and Arnošt
        Havelka. (markt)
      </add>
      <add>
        Improvements to French translations. (remm)
      </add>
      <add>
        Improvements to Korean translations. (woonsan)
      </add>
      <add>
        Improvements to Spanish translations. Provided by Andrewlanecarr.
        (markt)
      </add>
    </changelog>
  </subsection>
</section>
<section name="Tomcat 10.0.0-M8 (markt)" rtext="2020-09-14">
  <subsection name="Catalina">
    <changelog>
      <fix>
        <bug>64582</bug>: Pre-load the <code>CoyoteOutputStream</code> class to
        prevent a potential exception when running under a security manager.
        Patch provided by Johnathan Gilday. (markt)
      </fix>
      <fix>
        <bug>64593</bug>: If a request is not matched to a Context, delay
        issuing the 404 response to give the rewrite valve, if configured, an
        opportunity to rewrite the request. (remm/markt)
      </fix>
      <fix>
        Change top package name for generated embedded classes to avoid
        conflict with default host name on case insensitive filesystems.
        (remm)
      </fix>
      <fix>
        Add missing code generation for remaining digester rules. (remm)
      </fix>
      <update>
        Add a dedicated loader for generated code to avoid dynamic class
        loading. (remm)
      </update>
      <add>
        Refactor the Default servlet to provide a single method that can be
        overridden (<code>generateETag()</code>) should a custom entity tag
        format be required. (markt)
      </add>
      <fix>
        Improve the validation of entity tags provided with conditional
        requests. Requests with headers that contain invalid entity tags will be
        rejected with a 400 response code. Improve the matching algorithm used
        to compare entity tags in conditional requests with the entity tag for
        the requested resource. Based on a pull request by Sergey Ponomarev.
        (markt)
      </fix>
      <fix>
        Correct the description of the storage format for salted hashes in the
        Javadoc for <code>MessageDigestCredentialHandler</code> and refactor the
        associated code for clarity.
        Based on a patch provided by Milo van der Zee. (markt)
      </fix>
      <fix>
        Correct the path validation to allow the use of the file system root for
        the <code>docBase</code> attribute of a <code>Context</code>. Note that
        such a configuration should be used with caution. (markt)
      </fix>
      <add>
        Added filtering expression for requests that are not supposed to use
        session in <code>PersistentValve</code>. (kfujino)
      </add>
      <fix>
        Use the correct method to calculate session idle time in
        <code>PersistentValve</code>. (kfujino)
      </fix>
      <fix>
        Fix path used by the health check valve when it is not associated with
        a <code>Context</code>. (remm)
      </fix>
      <fix>
        <bug>64712</bug>: The JASPIC authenticator now checks the
        <code>ServerAuthModule</code> for
        <code>jakarta.servlet.http.authType</code> and, if present, uses the
        value provided. Based on a patch by Robert Rodewald. (markt)
      </fix>
      <fix>
        <bug>64713</bug>: The JASPIC authenticator now checks the value of
        <code>jakarta.servlet.http.registerSession</code> set by the
        <code>ServerAuthModule</code> when deciding whether or nor to register
        the session. Based on a patch by Robert Rodewald. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Coyote">
    <changelog>
      <add>
        <bug>57661</bug>: For requests containing the
        <code>Expect: 100-continue</code> header, add optional support to delay
        sending an intermediate 100 status response until the servlet reads the
        request body, allowing the servlet the opportunity to respond without
        asking for the request body. Based on a pull request by malaysf. (markt)
      </add>
      <fix>
        Remove deprecated <code>CookieProcessor.generateHeader</code> method.
        (remm)
      </fix>
      <fix>
        Refactor the implementation of
        <code>ServletInputStream.available()</code> to provide a more accurate
        return value, particularly when end of stream has been reached. (markt)
      </fix>
      <fix>
        Refactor the stopping of the acceptor to ensure that the acceptor thread
        stops when a connector is started immediately after it is stopped.
        (markt)
      </fix>
      <fix>
        <bug>64614</bug>: Improve compatibility with FIPS keystores. When a FIPS
        keystore is configured and the keystore contains multiple keys, the
        alias attribute will be ignored and the key used will be implementation
        dependent. (jfclere)
      </fix>
      <fix>
        <bug>64621</bug>: Improve handling HTTP/2 stream reset frames received
        from clients. (markt)
      </fix>
      <fix>
        <bug>64660</bug>: Avoid a potential NPE in the AprEndpoint if a socket
        is closed in one thread at the same time as the poller is processing an
        event for that socket in another. (markt)
      </fix>
      <fix>
        <bug>64671</bug>: Avoid several potential NPEs introduced in the changes
        in the previous release to reduce the memory footprint of closed HTTP/2
        streams. (markt)
      </fix>
      <fix>
        Refactor the HTTP/2 implementation to more consistently return a stream
        closed error if errors occur after a stream has been reset by the
        client. (markt)
      </fix>
      <fix>
        Improve handling of HTTP/2 stream level flow control errors and notify
        the stream immediately if it is waiting for an allocation when the flow
        control error occurs. (markt)
      </fix>
      <fix>
        Ensure that window update frames are sent for HTTP/2 connections to
        account for DATA frames containing padding including when the associated
        stream has been closed. (markt)
      </fix>
      <fix>
        Ensure that window update frames are sent for HTTP/2 connections and
        streams to account for DATA frames containing zero-length padding.
        (markt)
      </fix>
      <fix>
        <bug>64710</bug>: Revert the changes to reduce the memory footprint of
        closed HTTP/2 streams as they triggered multiple regressions in the form
        of <code>NullPointerException</code>s. (markt)
      </fix>
      <fix>
        Ensure that the HTTP/2 overhead protection check is performed after
        each HTTP/2 frame is processed. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="WebSocket">
    <changelog>
      <fix>
        Requests received via proxies may be marked as using the <code>ws</code>
        or <code>wss</code> protocol rather than <code>http</code> or
        <code>https</code>. Ensure that such requests are not rejected. PR
        provided by Ronny Perinke. (markt)
      </fix>
      <fix>
        <bug>64848</bug>: Fix a potential issue where the write lock for a
        WebSocket connection may not be released if an exception occurs during
        the write. (markt)
      </fix>
      <add>
        <bug>64644</bug>: Add support for a read idle timeout and a write idle
        timeout to the WebSocket session via custom properties in the user
        properties instance associated with the session. Based on a pull request
        by sakshamverma. (markt)
      </add>
    </changelog>
  </subsection>
  <subsection name="Web applications">
    <changelog>
      <fix>
        Remove the localization of the text output of the Manager application
        list of contexts and the Host Manager application list of hosts so that
        the output is more consistent. PR provided by Holomark. (markt)
      </fix>
      <fix>
        Clean-up / standardize the XSL files used to generate the documentation.
        PR provided by John Bampton. (markt)
      </fix>
      <fix>
        <bug>62723</bug>: Clarify the effects of some options for cluster
        <code>channelSendOptions</code>. Patch provided by Mitch Claborn.
        (schultz)
      </fix>
      <fix>
        Remove the out of date functional specification section from the
        documentation web application. (markt)
      </fix>
      <fix>
        Extracted CSS styles from the Manager we application for better code
        maintenance and replaced the GIF logo with SVG. (isapir)
      </fix>
      <add>
        Add document for <code>PersistentValve</code>. (kfujino)
      </add>
    </changelog>
  </subsection>
  <subsection name="Other">
    <changelog>
      <fix>
        Correct a regression in the fix for <bug>64540</bug> and include
        <code>org.apache.tomcat.util.modeler.modules</code> and
        <code>org.apache.tomcat.util.net.jsse</code> in the list of exported
        packages. (markt)
      </fix>
      <fix>
        Remove the local copy of the <code>javax.transaction.xa</code> package
        which is only used during compilation. The package is provided by the
        JRE from Java 1.4 onwards so the local copy should be unnecessary.
        (markt)
      </fix>
      <fix>
        Rename the local copy of the <code>javax.xml.ws</code> package to
        <code>jakarta.xml.ws</code>. (markt)
      </fix>
      <add>
        Improve the quality of the Japanese translations provided with Apache
        Tomcat. Includes contributions from Yuki Shira. (markt)
      </add>
      <fix>
        <bug>64645</bug>: Use a non-zero exit code if the
        <code>service.bat</code> does not complete normally. (markt)
      </fix>
      <add>
        Update the internal fork of Apache Commons BCEL to 6.5.0. Code clean-up
        only. (markt)
      </add>
      <add>
        Update the internal fork of Apache Commons Codec to 53c93d0 (2020-08-18,
        1.15-SNAPSHOT). Code clean-up. (markt)
      </add>
      <add>
        Update the internal fork of Apache Commons FileUpload to c25a4e3
        (2020-08-26, 2.0-SNAPSHOT). Code clean-up and RFC 2231 support. (markt)
      </add>
      <add>
        Update the internal fork of Apache Commons Pool to 2.8.1. Code clean-up
        and improved abandoned pool handling. (markt)
      </add>
      <add>
        Update the internal fork of Apache Commons DBCP to 6d232e5 (2020-08-11,
        2.8.0-SNAPSHOT). Code clean-up various bug fixes. (markt)
      </add>
      <update>
        Update the packaged version of the Tomcat Native Library to 1.2.25.
        (markt)
      </update>
    </changelog>
  </subsection>
</section>
<section name="Tomcat 10.0.0-M7 (markt)" rtext="2020-07-05">
  <subsection name="Catalina">
    <changelog>
      <add>
        Remove the error message on start if <code>java.io.tmpdir</code> is
        missing and add an explicit error message on application deployment when
        the sole feature that depends on it (anti-resource locking) is
        configured and can't be used. (markt)
      </add>
      <update>
        Implement a significant portion of the TLS environment variables for
        the rewrite valve. (remm)
      </update>
      <add>
        Add the Jakarta EE 9 schema. (markt)
      </add>
      <fix>
        <bug>64506</bug>: Correct a potential race condition in the resource
        cache implementation that could lead to
        <code>NullPointerException</code>s during class loading. (markt)
      </fix>
      <add>
        Add <code>application/wasm</code> to the media types recognised by
        Tomcat. Based on a PR by Thiago Henrique Hüpner. (markt)
      </add>
      <fix>
        Fix a bug in <code>HttpServlet</code> so that a <code>405</code>
        response is returned for an HTTP/2 request if the mapped servlet does
        implement the requested method rather than the more general
        <code>400</code> response. (markt)
      </fix>
      <add>
        Add generated classes using Tomcat embedded as an optional replacement
        for the Catalina configuration files. (remm)
      </add>
      <fix>
        <bug>64541</bug>: Refactor the DTD used to validate
        <code>mbeans-descriptors.xml</code> files to avoid issues when XML
        entity expansion is limited or disabled. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Coyote">
    <changelog>
      <add>
        Include a <code>Connection: close</code> HTTP header when committing a
        response and it is known that the <code>maxSwallowSize</code> limit is
        going to be exceeded. (markt)
      </add>
      <fix>
        <bug>64509</bug>: Correctly parse RFC 2109 version 1 cookies that use a
        comma as a separator between cookies when using the RFC 6265 cookie
        processor. Based on a patch by W J Carpenter. (markt)
      </fix>
      <fix>
        Fix the utility code that converted IPv6 addresses to a canonical form
        to correctly handle input addresses that ended with a pair of colons.
        Based on a patch by syarramsetty-skyhook. (markt)
      </fix>
      <fix>
        Correctly parse RFC 2109 version 1 cookies that have additional linear
        white space around cookie attribute names and values when using the RFC
        6265 cookie processor. (markt)
      </fix>
      <fix>
        Once an HTTP/2 stream has been closed, ensure that the code that cleans
        up references that are no longer required is called. (markt)
      </fix>
      <fix>
        Reduce the memory footprint of closed HTTP/2 streams. (markt)
      </fix>
      <fix>
        Ensure that the HTTP/1.1 processor is correctly recycled when a direct
        connection to h2c is made. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Jasper">
    <changelog>
      <update>
        Update the JSP document validation to permit <code>3.0</code> as a valid
        version attribute for the <code>&lt;jsp-root&gt;</code> element. (markt)
      </update>
    </changelog>
  </subsection>
  <subsection name="Cluster">
    <changelog>
      <fix>
        <bug>64560</bug>: Refactor the replication of a changed session ID for a
        replicated session so that the list of changes associated with the
        session is not reset when the session ID changes. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="WebSocket">
    <changelog>
      <fix>
        <bug>64563</bug>: Add additional validation of payload length for
        WebSocket messages. (markt)
      </fix>
      <fix>
        Correct the calculation of payload length when four or more bytes are
        required to represent the payload length. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Web Applications">
    <changelog>
      <update>
        Update all web applications to use the Jakarta EE 9 schema for web.xml.
        (markt)
      </update>
    </changelog>
  </subsection>
  <subsection name="Other">
    <changelog>
      <fix>
        Fix incorrect version format in OSGi manifests. Patch provided by
        Raymond Augé. (markt)
      </fix>
      <fix>
        <bug>64513</bug>: Remove bndlib from dependencies as it is not required.
        Pull request provided by Raymond Augé. (markt)
      </fix>
      <fix>
        <bug>64515</bug>: Bnd files don't need to be filtered (save some work).
        Pull request provided by Raymond Augé. (markt)
      </fix>
      <update>
        Update the OWB module to Apache OpenWebBeans 2.0.17. (remm)
      </update>
      <fix>
        <bug>64514</bug>: Fixes some missing class dependency issues in bootstrap
        to address packaging/dependency concerns for JPMS and OSGi. Pull request
        provided by Raymond Augé. (markt)
      </fix>
      <fix>
        <bug>64521</bug>: Avoid moving i18n translations into classes dir since
        they are packaged into separate jars. Pull request provided by Raymond
        Augé. (markt)
      </fix>
      <fix>
        <bug>64522</bug>: Package jars in effective dependency order. Pull
        request provided by Raymond Augé. (markt)
      </fix>
      <fix>
        Store common build details in a shared build-defaults.bnd. Pull
        request provided by Raymond Augé. (markt)
      </fix>
      <fix>
        <bug>64532</bug>: Update to bnd 5.1.1. Pull request provided by Raymond
        Augé. (markt)
      </fix>
      <fix>
        <bug>64540</bug>: Switch from bndwrap task to bnd task, begin generating
        a better manifest and make sure the resulting jar contents are correct.
        Pull request provided by Raymond Augé. (markt)
      </fix>
      <fix>
        <bug>64544</bug>: Add built libs to the bnd classpath for introspection.
        Pull request provided by Raymond Augé. (markt)
      </fix>
      <add>
        Improve the quality and expand the coverage of the French translations
        provided with Apache Tomcat. (remm)
      </add>
      <fix>
        <bug>64548</bug>: Generate JPMS metadata. (rotty3000)
      </fix>
    </changelog>
  </subsection>
</section>
<section name="Tomcat 10.0.0-M6 (markt)" rtext="2020-06-07">
  <subsection name="Catalina">
    <changelog>
      <fix>
        <bug>64432</bug>: Correct a refactoring regression that broke handling
        of multi-line configuration in the RewriteValve. Patch provided by Jj.
        (markt)
      </fix>
      <fix>
        Fix use of multiple parameters when defining RewriteMaps.
        (remm/fschumacher)
      </fix>
      <update>
        Add the special internal rewrite maps for case modification and
        escaping. (remm/fschumacher)
      </update>
      <fix>
        Correct a regression in an earlier fix that broke the loading of
        configuration files such as keystores via URIs on Windows. (markt)
      </fix>
      <fix>
        Implement a few rewrite SSL env that correspond to Servlet request
        attributes. (remm)
      </fix>
      <update>
        <bug>64442</bug>: Be more flexible with respect to the ordering of
        groups, roles and users in the <code>tomcat-users.xml</code> file.
        (fschumacher)
      </update>
    </changelog>
  </subsection>
  <subsection name="Coyote">
    <changelog>
      <update>
        Add support for ALPN on recent OpenJDK 8 releases. (remm)
      </update>
      <fix>
        <bug>64467</bug>: Improve performance of closing idle HTTP/2 streams.
        (markt)
      </fix>
      <update>
        Expose server certificate through the <code>SSLSupport</code>
        interface. (remm)
      </update>
      <add>
        <bug>64483</bug>: Log a warning if an AJP request is rejected because it
        contains an unexpected request attribute. (markt)
      </add>
      <fix>
        <bug>64485</bug>: Fix possible resource leak getting last modified from
        <code>ConfigurationSource.Resource</code>. (remm)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Jasper">
    <changelog>
      <update>
        Update the Jakarta Server Pages API implementation to align with
        specification updates to use generics and add missing
        <code>@Deprecated</code> annotations. (markt)
      </update>
      <fix>
        <bug>64488</bug>: Ensure that the ImportHandler from the Expression
        Language API is able to load classes from the Java runtime when running
        under a SecurityManager. Based on a patch by Volodymyr Siedleck. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="WebSocket">
    <changelog>
      <add>
        Add default implementations for <code>init()</code> and
        <code>destroy()</code> to the <code>Encoder</code> and
        <code>Decoder</code> interfaces. (markt)
      </add>
      <fix>
        Consistently throw a <code>DeploymentException</code> when an invalid
        endpoint path is specified and catch invalid endpoint paths earlier.
        (markt)
      </fix>
      <add>
        Include the target URL in the log message when a WebSocket connection
        fails. (markt)
      </add>
    </changelog>
  </subsection>
  <subsection name="Other">
    <changelog>
      <update>
        Update the list of known <code>Charset</code>s in the
        <code>CharsetCache</code> to include <code>ISO-8859-16</code>, added in
        OpenJDK 15. (markt)
      </update>
      <add>
        Improve the quality and expand the coverage of the French translations
        provided with Apache Tomcat. (remm)
      </add>
      <add>
        <bug>64430</bug>: Add support for the <code>CATALINA_OUT_CMD</code>
        environment variable that defines a command to which captured stdout and
        stderr will be redirected. Patch provided by Harald Dunkel. (markt)
      </add>
      <update>
        Switch from the unsupported Maven Ant Tasks to the supported Maven
        Resolver Ant Tasks to upload artifacts to the ASF Maven repository (and
        from there to Maven Central). (markt)
      </update>
      <update>
        Update dependency on bnd to 5.1.0. (markt)
      </update>
    </changelog>
  </subsection>
</section>
<section name="Tomcat 10.0.0-M5 (markt)" rtext="2020-05-11">
  <subsection name="Catalina">
    <changelog>
      <update>
        Remove <code>useAprConnector</code> flag from
        <code>AprLifecycleListener</code> so that the only way to use the APR
        connectors is to set the full class name. (remm)
      </update>
      <add>
        <bug>59203</bug>: Before calling <code>Thread.stop()</code> (if
        configured to do so) on a web application created thread that is not
        stopped by the web application when the web application is stopped, try
        interrupting the thread first. Based on a pull request by Govinda
        Sakhare. (markt)
      </add>
      <fix>
        <bug>62912</bug>: Don't mutate an application provided content header if
        it does not contain a charset. Also remove the outdated workaround for
        the buggy Adobe Reader 9 plug-in for IE. (markt)
      </fix>
      <scode>
        Remove the <code>reloadable</code> attribute from the
        <code>Loader</code> interface as it is duplicated on the
        <code>Context</code> interface. (markt)
      </scode>
      <fix>
        Reduce reflection use and remove AJP specific code in the Connector.
        (remm/markt/fhanik)
      </fix>
      <fix>
        Rework the fix for <bug>64021</bug> to better support web applications
        that use a custom class loader that loads resources from non-standard
        locations. (markt)
      </fix>
      <update>
        Remove redundant sole path/URI from error page message on SC_NOT_FOUND.
        (michaelo)
      </update>
      <add>
        Log a warning if a <code>CredentialHandler</code> instance is added to
        an instance of the <code>CombinedRealm</code> (or a sub-class) as the
        <code>CombinedRealm</code> doesn't use a configured
        <code>CredentialHandler</code> and it is likely that a configuration
        error has occurred. (markt)
      </add>
      <add>
        Add more descriptive error message in DefaultServlet for SC_NOT_FOUND.
        (michaelo)
      </add>
      <fix>
        <bug>64309</bug>: Improve the regular expression used to search for
        class loader repositories when bootstrapping Tomcat. Pull request
        provided by Paul Muriel Biya-Bi. (markt)
      </fix>
      <fix>
        <bug>64384</bug>: Fix multipart configuration ignoring some parameters
        in some cases. (schultz)
      </fix>
      <add>
        <bug>64386</bug>: WebdavServlet does not send "getlastmodified"
        property for resource collections. (michaelo)
      </add>
      <update>
        Remove reason phrase on WebDAV Multi-Status (207) response. (michaelo)
      </update>
      <fix>
        <bug>64398</bug>: Change default value separator for property
        replacement to <code>:-</code> due to possible conflicts. The
        syntax is now <code>${name:-default}</code>. (remm)
      </fix>
      <add>
        Improve validation of storage location when using FileStore. (markt)
      </add>
    </changelog>
  </subsection>
  <subsection name="Coyote">
    <changelog>
      <fix>
        Move <code>SocketProperties</code> mbean to its own type rather than
        use a subType to improve robustness with tools. (remm)
      </fix>
      <fix>
        Include the problematic data in the error message when reporting that
        the provided request line contains an invalid component. (markt)
      </fix>
      <fix>
        Improve the handling of requests that use an expectation. Do not disable
        keep-alive where the response has a non-2xx status code but the request
        body has been fully read. (rjung/markt)
      </fix>
      <fix>
        <bug>64403</bug>: Ensure that compressed HTTP/2 responses are not sent
        with a content length header appropriate for the original, uncompressed
        response. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Jasper">
    <changelog>
      <update>
        Remove redundant sole path/URI from error page message on SC_NOT_FOUND.
        (michaelo)
      </update>
      <add>
        Add more descriptive error message in DefaultServlet for SC_NOT_FOUND.
        (michaelo)
      </add>
      <fix>
        <bug>64373</bug>: When a tag file is packaged in a WAR and then that WAR
        is unpacked in <code>/WEB-INF/classes</code> ensure that the tag file
        can still be found. Patch provided by Karl von Randow. (markt)
      </fix>
      <fix>
        Ensure that the Jasper code that interfaces with the Eclipse Compiler
        for Java (ECJ) enables Jasper to compile JSPs using ECJ 4.14 onwards
        when the JSPs have inner classes. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Cluster">
    <changelog>
      <update>
        Refactor Tribes BufferPool and add the
        <code>org.apache.catalina.tribes.io.BufferPool.DEFAULT_POOL_SIZE</code>
        system property to configure its size. (remm)
      </update>
      <update>
        Remove java.io based Tribes receiver and sender, in favor of NIO which
        was the default. (remm)
      </update>
    </changelog>
  </subsection>
  <subsection name="Web applications">
    <changelog>
      <fix>
        Fix the saving of a Context configuration file via the scripting
        interface of the Manager web application. (markt)
      </fix>
      <add>
        Add a section to the TLS Connector documentation on different key store
        types and how to configure them. (markt)
      </add>
    </changelog>
  </subsection>
  <subsection name="Other">
    <changelog>
      <update>
        Update JUnit to version 4.13. (markt)
      </update>
      <fix>
        Add missing entries to test class path in sample NetBeans configuration
        files. Patch provided by Brian Burch. (markt)
      </fix>
      <scode>
        Refactor to use parameterized <code>Collection</code> constructors where
        possible. Pull request provided by Lars Grefer. (markt)
      </scode>
      <scode>
        Refactor to use empty arrays with <code>Collections.toArray()</code>.
        Pull request provided by Lars Grefer. (markt)
      </scode>
      <scode>
        Refactor loops with a condition to exit as soon as the condition is met.
        Pull request provided by Lars Grefer. (markt)
      </scode>
      <scode>
        Refactor bulk addition to collections to use <code>addAll()</code>
        rather than a loop. Pull request provided by Lars Grefer. (markt)
      </scode>
      <add>
        Expand the coverage of the Chinese translations provided with Apache
        Tomcat. Contributions provided by winsonzhao, ZhangJieWen and Lee
        Yazhou. (markt)
      </add>
      <add>
        Improve the quality and expand the coverage of the French translations
        provided with Apache Tomcat. (remm)
      </add>
      <add>
        Improve the quality of the Japanese translations provided with Apache
        Tomcat. Includes contributions from Yoshy. (markt)
      </add>
      <add>
        Improve the quality of the German translations provided with Apache
        Tomcat. (markt)
      </add>
      <update>
        Update the packaged version of the Tomcat Native Library to 1.2.24.
        (markt)
      </update>
      <scode>
        Refactor to use enhanced for loops where possible. Pull request by Lars
        Grefer. (markt)
      </scode>
      <add>
        Improve IDE support for IntelliJ IDEA. Patch provided by Lars Grefer.
        (markt)
      </add>
      <add>
        Improve the coverage and quality of the Korean translations provided
        with Apache Tomcat. (woonsan)
      </add>
      <update>
        Update dependency on bnd to 5.0.1. (markt)
      </update>
    </changelog>
  </subsection>
</section>
<section name="Tomcat 10.0.0-M4 (markt)" rtext="2020-04-08">
  <subsection name="Catalina">
    <changelog>
      <fix>
        Ensure all URL patterns provided via web.xml are %nn decoded
        consistently using the encoding of the web.xml file where specified and
        UTF-8 where no explicit encoding is specified. (markt)
      </fix>
      <update>
        Allow a comma separated list of class names for the
        <code>org.apache.tomcat.util.digester.PROPERTY_SOURCE</code>
        system property. (remm)
      </update>
      <fix>
        <bug>64149</bug>: Avoid NPE when using the access log valve without
        a pattern. (remm)
      </fix>
      <fix>
        <bug>64226</bug>: Reset timezone after parsing a date since the date
        format is reused. Test case submitted by Gary Thomas. (remm)
      </fix>
      <fix>
        <bug>64247</bug>: Using a wildcard for <code>jarsToSkip</code> should
        not override a possibly present <code>jarsToScan</code>. Based on code
        submitted by Iridias. (remm)
      </fix>
      <update>
        Refactor DefaultServlet to avoid using an internal Range structure that
        is duplicated from the parsing result. (remm)
      </update>
      <update>
        Remove
        <code>org.apache.catalina.connector.CoyoteAdapter.ALLOW_BACKSLASH</code>
        system property, replaced by the <code>allowBackslash</code> attribute
        on the Connector. (remm)
      </update>
      <update>
        Remove
        <code>org.apache.catalina.connector.Response.ENFORCE_ENCODING_IN_GET_WRITER</code>
        system property, replaced by the
        <code>enforceEncodingInGetWriter</code> attribute on the Connector.
        (remm)
      </update>
      <update>
        Remove
        <code>org.apache.catalina.session.StandardSession.ACTIVITY_CHECK</code>
        system property, replaced by the <code>sessionActivityCheck</code> attribute
        on the Manager. (remm)
      </update>
      <update>
        Remove
        <code>org.apache.catalina.session.StandardSession.LAST_ACCESS_AT_START</code>
        system property, replaced by the
        <code>sessionLastAccessAtStart</code> attribute on the Manager. (remm)
      </update>
      <update>
        Remove
        <code>org.apache.catalina.core.StandardHostValve.ACCESS_SESSION</code>
        system property, replaced by the
        <code>alwaysAccessSession</code> attribute on the Context. (remm)
      </update>
      <update>
        Remove
        <code>org.apache.catalina.core.ApplicationContext.GET_RESOURCE_REQUIRE_SLASH</code>
        system property, replaced by the
        <code>contextGetResourceRequiresSlash</code> attribute on the Context. (remm)
      </update>
      <update>
        Remove
        <code>org.apache.catalina.core.ApplicationDispatcher.WRAP_SAME_OBJECT</code>
        system property, replaced by the
        <code>dispatcherWrapsSameObject</code> attribute on the Context. (remm)
      </update>
      <fix>
        <bug>64265</bug>: Fix ETag comparison performed by the default servlet.
        The default servlet always uses weak comparison. (markt)
      </fix>
      <update>
        Remove
        <code>org.apache.catalina.authenticator.Constants.SSO_SESSION_COOKIE_NAME</code>
        system property, replaced by the
        <code>cookieName</code> attribute on the SSO valve. (remm)
      </update>
      <fix>
        Add support for default values when using <code>${...}</code> property
        replacement in configuration files. Based on a pull request provided by
        Bernd Bohmann. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Coyote">
    <changelog>
      <fix>
        When closing a NIO channel, avoid canceling keys as a workaround for
        deadlocks when running on Java 11. Excessive internal NIO
        synchronization on channel close is resolved starting with this
        Java version. (remm)
      </fix>
      <add>
        When configuring an HTTP Connector, ensure that the encoding specified
        for <code>URIEncoding</code> is a superset of US-ASCII as required by
        RFC7230. (markt)
      </add>
      <fix>
        Avoid always retrieving the NIO poller selection key when processing
        to reduce sync. (remm)
      </fix>
      <fix>
        <bug>64240</bug>: Ensure that HTTP/0.9 requests that contain additional
        data on the request line after the URI are treated consistently. Such
        requests will now always be treated as HTTP/1.1. (markt)
      </fix>
      <add>
        Expose the HTTP/2 connection ID and stream ID to applications via the
        request attributes <code>org.apache.coyote.connectionID</code> and
        <code>org.apache.coyote.streamID</code> respectively. (markt)
      </add>
      <add>
        Replace the system property
        <code>org.apache.tomcat.util.buf.UDecoder.ALLOW_ENCODED_SLASH</code>
        with the Connector attribute <code>encodedSolidusHandling</code> that
        adds an additional option to pass the <code>%2f</code> sequence through
        to the application without decoding it in addition to rejecting such
        sequences and decoding such sequences. (markt)
      </add>
      <add>
        Expose the associated <code>HttpServletRequest</code> to the
        <code>CookieProcessor</code> when generating a cookie header so the
        header can be tailored based on the properties of the request, such as
        the user agent, if required. Based on a patch by Lazar Kirchev. (markt)
      </add>
    </changelog>
  </subsection>
  <subsection name="Jasper">
    <changelog>
      <update>
        Update to the Eclipse JDT compiler 4.15. (markt)
      </update>
      <add>
        Add support for specifying Java 14 (with the value <code>14</code>) and
        Java 15 (with the value <code>15</code>) as the compiler source and/or
        compiler target for JSP compilation. If used with an ECJ version that
        does not support these values, a warning will be logged and the latest
        supported version will used. (markt)
      </add>
      <update>
        Remove Jasper configuration using system properties and replace them
        by a new set of JSP Servlet init parameters. (remm)
      </update>
    </changelog>
  </subsection>
  <subsection name="Web applications">
    <changelog>
      <fix>
        Correct the documentation web application to remove references to the
        <code>org.apache.catalina.STRICT_SERVLET_COMPLIANCE</code> system
        property changing the default for the <code>URIEncoding</code> attribute
        of the Connector. (markt)
      </fix>
      <fix>
        Correct the documentation web application to remove references to the
        <code>org.apache.tomcat.util.buf.UDecoder.ALLOW_ENCODED_SLASH</code>
        system property changing how the sequence <code>%5c</code> is
        interpreted in a URI. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Tribes">
    <changelog>
      <scode>
        Remove support for the deprecated system property
        <code>org.apache.catalina.tribes.dns_lookups</code>. The default value
        of <code>false</code> will now always be used. (markt)
      </scode>
    </changelog>
  </subsection>
  <subsection name="Other">
    <changelog>
      <add>
        Improve the quality and expand the coverage of the French translations
        provided with Apache Tomcat. Contribution provided by Tom Bens. (remm)
      </add>
      <add>
        Expand the coverage of the Chinese translations provided with Apache
        Tomcat. Contribution provided by Lee Yazhou. (markt)
      </add>
      <fix>
        <bug>64270</bug>: Set the documented default umask of <code>0027</code>
        when using jsvc via <code>daemon.sh</code> and allow the umask used to
        be configured via the <code>UMASK</code> environment variable as it is
        when using <code>catalina.sh</code>. (markt)
      </fix>
      <update>
        Update the OWB module to Apache OpenWebBeans 2.0.16. (remm)
      </update>
      <update>
        Update the CXF module to Apache CXF 3.3.6. (remm)
      </update>
      <fix>
        Remove the <code>LOGGING_CONFIG</code> environment variable and
        replace it with the <code>CATALINA_LOGGING_CONFIG</code> environment
        variable to avoid clashes with other components that use
        <code>LOGGING_CONFIG</code>. (markt)
      </fix>
    </changelog>
  </subsection>
</section>
<section name="Tomcat 10.0.0-M3 (markt)" rtext="2020-03-16">
  <subsection name="Coyote">
    <changelog>
      <fix>
        <bug>64202</bug>: Use a loop on NIO blocking reads, as it is possible
        zero bytes are produced by a network read. (markt/remm)
      </fix>
      <fix>
        <bug>64210</bug>: Correct a regression in the improvements to HTTP
        header validation that caused requests to be incorrectly treated as
        invalid if a <code>CRLF</code> sequence was split between TCP packets.
        Improve validation of request lines, including for HTTP/0.9 requests.
        (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Other">
    <changelog>
      <fix>
        <bug>64206</bug>: Correct a regression introduced in 10.0.0-M1 that
        meant that the HTTP port specified when using the Windows Installer was
        ignored and 8080 was always used. (markt)
      </fix>
    </changelog>
  </subsection>
</section>
<section name="Tomcat 10.0.0-M2 (markt)" rtext="not released">
  <subsection name="Catalina">
    <changelog>
      <scode>
        Refactor <code>HttpServlet.doOptions()</code> to improve performance.
        (markt)
      </scode>
      <update>
        Disable StandardManager session persistence by default. It can be
        enabled back in <code>context.xml</code>. (remm)
      </update>
      <add>
        Add extension point to DeltaSession to improve subclassing.
        Patch provided by ThStock. (schultz)
      </add>
      <fix>
        <bug>64153</bug>: Ensure that the parent for the web application class
        loader is set consistently. (markt)
      </fix>
      <fix>
        <bug>64166</bug>: Ensure that the names returned by
        <code>HttpServletResponse.getHeaderNames()</code> are unique. (markt)
      </fix>
      <scode>
        Rename <code>org.apache.tomcat.util.digester.Digester$EnvironmentPropertySource</code>
        to
        <code>org.apache.tomcat.util.digester.EnvironmentPropertySource</code>.
        Patch provided by Bernd Bohmann. (markt)
      </scode>
      <fix>
        <bug>63286</bug>: Resolve inconsistencies with access log valve. This
        changes the element API to use a nanosecond resolution elapsed time
        argument. (remm)
      </fix>
      <add>
        Add new attribute <code>persistAuthentication</code> to both
        <code>StandardManager</code> and <code>PersistentManager</code> to
        support authentication persistence. Patch provided by Carsten Klein.
        (markt)
      </add>
      <fix>
        <bug>64184</bug>: Avoid repeated log messages if a
        <code>MemoryUserDatabase</code> is configured but the specified
        configuration file is missing. (markt)
      </fix>
      <add>
        <bug>64189</bug>: Expose the web application version String as a
        <code>ServletContext</code> attribute named
        <code>org.apache.catalina.webappVersion</code>. (markt)
      </add>
    </changelog>
  </subsection>
  <subsection name="Coyote">
    <changelog>
      <fix>
        Fix support of native jakarta servlet attributes in AJP connector.
        (remm)
      </fix>
      <update>
        <bug>56966</bug>: Add use of System.nanoTime to track request
        execution time. (remm)
      </update>
      <fix>
        <bug>64141</bug>: If using a CA certificate, remove a default value
        for the truststore file when not using a JSSE configuration. (remm)
      </fix>
      <fix>
        Improve robustness of OpenSSLEngine shutdown. Based on code submitted
        by Manuel Dominguez Sarmiento. (remm)
      </fix>
      <fix>
        Add the TLS request attributes used by IIS to the attributes that an AJP
        Connector will always accept. (markt)
      </fix>
      <fix>
        A zero length AJP secret will now behave as if it has not been
        specified. (remm)
      </fix>
      <fix>
        <bug>64188</bug>: If an error occurs while committing or flushing the
        response when using a multiplexing protocol like HTTP/2 that requires
        the channel to be closed but not the connection, just close the channel
        and allow the other channels using the connection to continue. Based on
        a suggestion from Alejandro Anadon. (markt)
      </fix>
      <fix>
        Correct the semantics of <code>getEnableSessionCreation</code> and
        <code>setEnableSessionCreation</code> for <code>OpenSSLEngine</code>.
        Pull request provided by Alexander Scheel. (markt)
      </fix>
      <fix>
        <bug>64192</bug>: Correctly handle case where unread data is returned to
        the read buffer when the read buffer is non empty. Ensure a gathering
        TLS read stops once the provided ByteBuffers are full or no more data is
        available. (markt)
      </fix>
      <fix>
        Allow async requests to complete cleanly when the Connector is paused
        before <code>complete()</code> is called on a container thread. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Cluster">
    <changelog>
      <fix>
        Allow configuring the <code>DNSMembershipProvider</code> using the
        <code>dns</code> alias. Submitted by Bernd Bohmann. (remm)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Web applications">
    <changelog>
      <add>
        Expand the documentation for the <code>address</code> attribute of the
        AJP Connector and document that the AJP Connector also supports the
        <code>ipv6v6only</code> attribute with the APR/Native implementation.
        (markt)
      </add>
    </changelog>
  </subsection>
  <subsection name="Other">
    <changelog>
      <update>
        Update the OWB module to Apache OpenWebBeans 2.0.15. (remm)
      </update>
      <update>
        Update the CXF module to Apache CXF 3.3.5. (remm)
      </update>
      <add>
        Expand the coverage of the Korean translations provided with Apache
        Tomcat. Contributions provided by B. Cansmile Cha. (markt)
      </add>
      <add>
        Expand the coverage of the French translations provided with Apache
        Tomcat. (remm)
      </add>
      <add>
        <bug>64190</bug>: Add support for specifying milliseconds (using
        <code>S</code>, <code>SS</code> or <code>SSS</code>) in the timestamp
        used by JULI&apos;s <code>OneLineFormatter</code>. (markt)
      </add>
    </changelog>
  </subsection>
</section>
<section name="Tomcat 10.0.0-M1 (markt)" rtext="2020-02-20">
  <subsection name="General">
    <changelog>
      <scode>
        This release contains all of the changes upto and including those in
        Apache Tomcat 9.0.31 plus the additional changes listed below. (markt)
      </scode>
    </changelog>
  </subsection>
  <subsection name="Catalina">
    <changelog>
      <update>
        Refactor recycle facade system property into a new connector attribute
        named <code>discardFacades</code> and enable it by default. (remm)
      </update>
      <update>
        Update to Jakarta Servlet 5.0, Jakarta Server Pages 3.0. Jakarta
        Expression Language 4.0, Jakarta WebSocket 2.0, Jakarta Authentication
        2.0 and Jakarta Annotations 2.0. (markt)
      </update>
      <update>
        Remove GenericPrincipal.getPassword. The credentials should remain
        managed by the realm. (remm)
      </update>
      <update>
        Add connection pooling to JNDI realm. (remm)
      </update>
      <update>
        Use <code>&lt;request-character-encoding&gt;</code> and
        <code>&lt;response-character-encoding&gt;</code> in
        <code>conf/web.xml</code> to set the default request and response
        character encodings to UTF-8. (markt)
      </update>
      <fix>
        Store config compatibility with HostWebXmlCacheCleaner listener. (remm)
      </fix>
      <fix>
        Modify the <code>RewriteValve</code> to use
        <code>ServletRequest.getServerName()</code> to populate the
        <code>HTTP_HOST</code> variable rather than extracting it from the
        <code>Host</code> header as this allows HTTP/2 to be supported. (markt)
      </fix>
      <fix>
        Switch Tomcat embedded to loading MIME type mappings from a property
        file generated from the default <code>web.xml</code> so the MIME type
        mappings are consistent regardless of how Tomcat is started. (markt)
      </fix>
      <fix>
        Missing store config attributes for Resources elements. (remm)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Coyote">
    <changelog>
      <update>
        Update endpoint cache sizes defaults. (remm)
      </update>
      <update>
        Remove unused NIO blocking selector. (remm)
      </update>
      <add>
        When using an AJP Connector, convert Java Servlet specific request
        attributes to the Jakarta Servlet equivalent. (markt)
      </add>
      <add>
        When reporting / logging invalid HTTP headers encode any non-printing
        characters using the 0xNN form. (markt)
      </add>
      <update>
        Remove duplication of HTTP/1.1 configuration on the HTTP/2
        UpgradeProtocol element. Configuration from the main Connector element
        will now be used. (remm)
      </update>
      <fix>
        When the NIO or APR/native connectors were configured with
        <code>useAsyncIO="true"</code> and a zero length read or write was
        performed, the read/write would time out rather than return immediately.
        (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Jasper">
    <changelog>
      <scode>
        Parameterize JSP version and API class names in localization messages to
        allow simpler re-use between major versions. (markt)
      </scode>
      <fix>
        Ensure that TLD files listed in the <code>jsp-config</code> section of
        <code>web.xml</code> that are registered in the
        <code>uriTldResourcePathMap</code> with the URI specified in
        <code>web.xml</code> are also registered with the URI in the TLD file if
        it is different. Patch provided by Markus Lottmann. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Cluster">
    <changelog>
      <fix>
        Fix cloud environment lookup order and add a dedicated
        <code>DNS_MEMBERSHIP_SERVICE_NAME</code> environment for use with the
        DNS membership provider. Submitted by Bernd Bohmann. (remm)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Other">
    <changelog>
      <fix>
        <bug>53620</bug>: JULI now only creates logging files when there is a
        log entry to write. Based on a patch by Karol Bucek. (markt)
      </fix>
      <fix>
        Update implemented specification version information in a few places
        where it has not been updated for Jakarta EE 9. (markt)
      </fix>
      <add>
        Expand the coverage of the French translations provided with Apache
        Tomcat. (remm)
      </add>
      <add>
        Expand the coverage of the Chinese translations provided with Apache
        Tomcat. Contribution provided by BoltzmannWxd. (markt)
      </add>
    </changelog>
  </subsection>
</section>
</body>
</document>
