<?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 9.0.52 (remm)" rtext="in development">
  <subsection name="Catalina">
    <changelog>
      <scode>
        <bug>65476</bug>: Correct an error in some code clean-up that mean that
        web application classes were not configured with the correct package.
        (markt)
      </scode>
    </changelog>
  </subsection>
</section>
<section name="Tomcat 9.0.51 (remm)" rtext="not released">
  <subsection name="Catalina">
    <changelog>
      <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>
    </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>
    </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 9.0.50 (remm)" rtext="2021-07-02">
  <subsection name="Jasper">
    <changelog>
      <fix>
        Jakarta to Javax backport issue in tests. (remm)
      </fix>
    </changelog>
  </subsection>
</section>
<section name="Tomcat 9.0.49 (remm)" rtext="not released">
  <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>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>
      <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>
      <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 9.0.48 (remm)" rtext="2021-06-15">
  <subsection name="Coyote">
    <changelog>
      <fix>
        Regression when generating reflection due to removed NIO classes
        in 9.0.47. (remm)
      </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>
    </changelog>
  </subsection>
</section>
<section name="Tomcat 9.0.47 (remm)" rtext="not released">
  <subsection name="Catalina">
    <changelog>
      <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>
      <update>
        Add <code>cookieName</code> attribute to the SSO valve to configure the
        SSO cookie name. (remm)
      </update>
      <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>
      <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>
      <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>
      <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>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>
      <fix>
        <bug>65311</bug>: Fix a race condition in the
        <code>NioBlockingSelector</code> that could cause a delay to select
        operations. (markt)
      </fix>
      <update>
        Simplify AprEndpoint socket bind for all platforms. (michaelo)
      </update>
      <update>
        Add back simplification of NIO block read and write, now better
        validated in Tomcat 10. (remm)
      </update>
      <fix>
        Optimize NIO selector handling for Java 11. (remm)
      </fix>
      <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>
        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>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>
      <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 Java EE 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>
<section name="Tomcat 9.0.46 (markt)" rtext="2021-05-12">
  <subsection name="Catalina">
    <changelog>
      <fix>
        Allow APR connector creation using the listener with the flag and
        the default <code>HTTP/1.1</code> protocol. (rjung/remm)
      </fix>
      <scode>
        Expand coverage of unit tests for JNDIRealm using the UnboundID LDAP SDK
        for Java. (markt)
      </scode>
      <fix>
        <bug>65224</bug>: Ensure the correct escaping of attribute values and
        search filters in the JNDIRealm. (markt)
      </fix>
      <fix>
        <bug>65235</bug>: Add missing attributes to the MBean descriptor file
        for the <code>RemoteIpValve</code>. (markt)
      </fix>
      <fix>
        <bug>65244</bug>: HandlesTypes should include classes that use
        the specified annotation types on fields or methods. (remm)
      </fix>
      <fix>
        <bug>65251</bug>: Correct a regression introduced in 9.0.44 that meant
        that the auto-deployment process may attempt a second, concurrent
        deployment of a web application that is being deployed by the Manager
        resulting in one of the deployments failing and errors being reported.
        (markt)
      </fix>
      <fix>
        Improve the <code>SSLValve</code> so it is able to handle escaped
        client certificate headers from Nginx. Based on a patch by Florent
        Guillaume. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Coyote">
    <changelog>
      <fix>
        Ensure that all HTTP requests that contain an invalid character in the
        protocol component of the request line are rejected with a 400 response
        rather than some requests being rejected with a 505 response. (markt)
      </fix>
      <fix>
        When generating the error message for an HTTP request with an invalid
        request line, ensure that all the available data is included in the
        error message. (markt)
      </fix>
      <fix>
        <bug>65272</bug>: Restore the optional HTTP feature that allows
        <code>LF</code> to be treated as a line terminator for the request line
        and/or HTTP headers lines as well as the standard <code>CRLF</code>.
        This behaviour was previously removed as a side-effect of the fix for
        CVE-2020-1935. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Jasper">
    <changelog>
      <scode>
        Review code used to generate Java source from JSPs and tags and remove
        code found to be unnecessary. (markt)
      </scode>
      <update>
        <code>&lt;servlet&gt;</code> entries in web.xml that include a
        <code>&lt;jsp-file&gt;</code> element and a negative
        <code>&lt;load-no-startup&gt;</code> element that is not the default
        value of <code>-1</code> will no longer be loaded at start-up. This
        makes it possible to define a <code>&lt;jsp-file&gt;</code> that will
        not be loaded at start-up. (markt)
      </update>
      <fix>
        Allow the JSP configuration option
        <code>useInstanceManagerForTags</code> to be used with Tags that are
        implemented as inner classes. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="WebSocket">
    <changelog>
      <scode>
        Refactor the way Tomcat passes path parameters to POJO end points to
        simplify the code. (markt)
      </scode>
      <fix>
        <bug>65262</bug>: Refactor the creation of WebSocket end point, decoder
        and encoder instances to be more IoC friendly. Instances are now created
        via the <code>InstanceManager</code> where possible. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Web applications">
    <changelog>
      <fix>
        <bug>65235</bug>: Correct name of <code>changeLocalName</code> in the
        documentation for the <code>RemoteIpValve</code>. (markt)
      </fix>
      <fix>
        <bug>65265</bug>: Avoid getting the boot classpath when it is not
        available in the Manager diagnostics. (remm)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Other">
    <changelog>
      <fix>
        Create OSGi <code>Require-Capability</code> sections in manifests for
        Jakarta API JARs manually rather than via the
        <code>aQute.bnd.annotation.spi.ServiceConsumer</code> annotation as this
        triggers TCK failures for downstream consumers of the API JARs. (markt)
      </fix>
      <update>
        Update the packaged version of the Tomcat Native Library to 1.2.28.
        (markt)
      </update>
      <update>
        Update the OWB module to Apache OpenWebBeans 2.0.22. (remm)
      </update>
      <update>
        Update the CXF module to Apache CXF 3.4.3. (remm)
      </update>
      <fix>
        Move <code>SystemPropertySource</code> to be a regular class to allow
        more precise configuration if needed. The system property source will
        still always be enabled. (remm)
      </fix>
      <add>
        Improvements to Chinese translations. Provided by bytesgo. (mark)
      </add>
      <add>
        Improvements to French translations. (remm)
      </add>
      <add>
        Improvements to Korean translations. (woonsan)
      </add>
    </changelog>
  </subsection>
</section>
<section name="Tomcat 9.0.45 (markt)" rtext="2021-04-06">
  <subsection name="Catalina">
    <changelog>
      <fix>
        Avoid NPE when a JNDI reference cannot be resolved in favor of a
        NamingException. (remm)
      </fix>
      <fix>
        Avoid using reflection for setting properties on the webapp
        classloader. Based on a patch submitted by Romain Manni-Bucau. (remm)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Coyote">
    <changelog>
      <fix>
        Improve consistency of OpenSSL error stack handling in the TLS engine,
        and log all errors found as debug. (remm)
      </fix>
      <fix>
        Ensure that HTTP/2 streams are only recycled once as multiple attempts
        to recycle an HTTP/2 stream may result in
        <code>NullPointerException</code>s. (markt)
      </fix>
      <scode>
        Simplify the closing on an HTTP/2 stream when an error condition is
        present. (markt)
      </scode>
      <fix>
        <bug>64771</bug>: Prevent concurrent calls to
        <code>ServletInputStream.isReady()</code> corrupting the input buffer.
        (markt)
      </fix>
      <fix>
        <bug>65179</bug>: Ensure that the connection level flow control window
        from the client to the server is updated when handling DATA frames
        received for completed streams else the flow control window  may become
        exhausted. (markt)
      </fix>
      <fix>
        <bug>65203</bug>: Fix a regression introduced in 9.0.44 that meant that
        an error during an asynchronous read broke all future asynchronous reads
        associated with the same request instance. (markt)
      </fix>
      <fix>
        Disable keep-alive when inconsistent content delimitation is present in
        a request. (remm)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Jasper">
    <changelog>
      <fix>
        Include the new <code>org.apache.jasper.optimizations</code> package in
        the list of OSGi exported packages for the Jasper embedded JAR. Patch
        provided by Sokratis Zappis. (markt)
      </fix>
      <add>
        Add a new option for the <code>trimSpaces</code> configuration.
        <code>extended</code> will attempt to remove leading and trailing
        whitespace from template text and collapse sequences of whitespace and
        newlines within template text into a single new line. Based on a pull
        request by kamnani. (markt)
      </add>
    </changelog>
  </subsection>
  <subsection name="Other">
    <changelog>
      <add>
        Implement the first phase of reproducible builds. Sequential builds on
        the same machine now produce identical output provided that the Ant
        property <code>ant.tstamp.now.iso</code> is set. The minimum required
        Ant version is now 1.9.10. (markt)
      </add>
      <add>
        Improvements to Chinese translations. Provided by Ruan Wenjun. (mark)
      </add>
      <add>
        Improvements to French translations. (remm)
      </add>
      <add>
        Improvements to Japanese translations. Provided by kfujino and
        Shirayuking. (markt)
      </add>
      <add>
        Improvements to Korean translations. (woonsan)
      </add>
      <update>
        Update the packaged version of the Tomcat Native Library to 1.2.27.
        (markt)
      </update>
    </changelog>
  </subsection>
</section>
<section name="Tomcat 9.0.44 (markt)" rtext="2021-03-10">
  <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>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>
        <bug>65135</bug>: Rename Context method
        <code>isParallelAnnotationScanning</code> to
        <code>getParallelAnnotationScanning</code> for consistency and ease
        of use in JMX descriptors. (remm)
      </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>
      <fix>
        Correct syntax error in output of <code>JsonErrorReportValve</code>.
        Pull request provided by Viraj Kanwade. (markt)
      </fix>
      <scode>
        Make the <code>StandardContext.postWorkDirectory()</code> protected
        rather than private to help users wishing to customise the default
        work directory behaviour. (markt)
      </scode>
    </changelog>
  </subsection>
  <subsection name="Coyote">
    <changelog>
      <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 9.0.43 (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 9.0.42 (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 9.0.41 (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>
      <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 9.0.40 (markt)" rtext="2020-11-17">
  <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 org.apache.coyote.http11.Http11Nio2Protocol 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. The
        <code>JDBCStore</code> is deprecated but remains unchanged. 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>
        Align JPMS module names with current Jakarta EE expectations. (markt)
      </fix>
      <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 9.0.39 (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>
        Deprecate 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 JASPIC
        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>
      <update>
        Add connection pooling to JNDI realm. (remm)
      </update>
      <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 9.0.37 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 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>
    </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 addition 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 9.0.38 (markt)" rtext="2020-09-15">
  <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>
        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 <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>
      <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 9.0.37 (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>
      <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="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="Other">
    <changelog>
      <fix>
        <bug>64498</bug>: Fix incorrect version format in OSGi manifests. Patch
        provided by Raymond Augé. (markt)
      </fix>
      <fix>
        <bug>64501</bug>: Refactor the handling of the deprecated
        <code>LOGGING_CONFIG</code> environment variable to avoid using a POSIX
        shell feature that is not available by default on Solaris 10. (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 9.0.36 (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>
        <bug>64470</bug>: The default value of the solidus handling should
        reflect the associated system property. (remm)
      </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>
      <fix>
        <bug>64493</bug>: Revert possible change of returned protocol
        attribute value on the <code>Connector</code>. (remm)
      </fix>
    </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>
      <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>
      <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 9.0.35 (markt)" rtext="2020-05-11">
  <subsection name="Catalina">
    <changelog>
      <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>
      <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>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="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>
        Improve the quality and 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. Contributions provided by winsonzhao, ZhangJieWen and Lee
        Yazhou. (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 quality of the Japanese translations provided with Apache
        Tomcat. Includes contributions from Yoshy. (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 9.0.34 (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>
      <fix>
        <bug>64265</bug>: Fix ETag comparison performed by the default servlet.
        The default servlet always uses weak comparison. (markt)
      </fix>
      <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>
      <add>
        When configuring an HTTP Connector, warn if the encoding specified for
        <code>URIEncoding</code> is not 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>
    </changelog>
  </subsection>
  <subsection name="Cluster">
    <changelog>
      <scode>
        Refactor the creation of <code>DeltaRequest</code> objects to make it
        simpler to use custom implementations. Based on a pull request provided
        by Thomas Stock. (markt)
      </scode>
    </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="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>
        Deprecated 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 9.0.33 (markt)" rtext="2020-03-16">
  <subsection name="Coyote">
    <changelog>
      <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 regression introduced in 9.0.31 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 9.0.32 (markt)" rtext="not released">
  <subsection name="Catalina">
    <changelog>
      <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>
      <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>.
        The old class is still available but deprecated. Patch provided by Bernd
        Bohmann. (markt)
      </scode>
      <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>
        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>
      <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>
        <bug>64195</bug>: Revert simplification of NIO block read and write,
        deferred to Tomcat 10. (remm)
      </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="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>
      <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>
      <fix>
        Add to the documentation for the <code>JmxRemoteLifecycleListener</code>
        the requirement to use
        <code>-Dcom.sun.management.jmxremote.registry.ssl=false</code> if TLS is
        not being used else clients will be unable to connect to the JMX server.
        (markt)
      </fix>
      <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>
      <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>
      <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 9.0.31 (markt)" rtext="2020-02-11">
  <subsection name="Catalina">
    <changelog>
      <update>
        Do not store username and password as session notes during
        authentication if they are not needed. (kkolinko)
      </update>
      <fix>
        Avoid useless environment restore when not using GSSCredential
        in JNDIRealm. (remm)
      </fix>
      <fix>
        <bug>58577</bug>: Respect the argument-count when searching for MBean
        operations to invoke via the JMXProxyServlet. (schultz)
      </fix>
      <update>
        <bug>63691</bug>: Skip all jar and directory scanning when the wildcard
        pattern &quot;*&quot; or &quot;*.jar&quot; is set or added to
        <code>tomcat.util.scan.StandardJarScanFilter.jarsToSkip</code>. (isapir)
      </update>
      <fix>
        <bug>64005</bug>: Correct a regression in the static resource caching
        changes introduced in 9.0.28. Avoid a <code>NullPointerException</code>
        when working with the URL provided for the root of a packed WAR. (markt)
      </fix>
      <fix>
        <bug>64006</bug>: Provide default configuration source based on the
        current directory if none has been set, for full compatibility with
        existing code. (remm)
      </fix>
      <fix>
        <bug>64008</bug>: Clarify/expand the Javadoc for the
        <code>Tomcat#addWebapp()</code> and related methods. (markt)
      </fix>
      <scode>
        Deprecate the <code>JmxRemoteLifecycleListener</code> as the features it
        provides are now available in the remote JMX capability included with
        the JRE. This listener will be removed in Tomcat 10 and may be removed
        from Tomcat 9.0.x some time after 2020-12-31. (markt)
      </scode>
      <fix>
        <bug>64011</bug>: <code>JNDIRealm</code> no longer authenticates to LDAP.
        (michaelo)
      </fix>
      <fix>
        <bug>64021</bug>: Ensure that container provided SCIs are always loaded
        before application provided SCIs. Note that where both the container and
        the application provide the same SCI, it is the application provided SCI
        that will be used. (markt)
      </fix>
      <fix>
        SCI definitions from JARs unpacked into <code>WEB-INF/classes</code> are
        now handled consistently and will always be found irrespective of
        whether the web application defines a JAR ordering or not. (markt)
      </fix>
      <fix>
        <bug>64023</bug>: Skip null-valued session attributes when deserializing
        sessions. (schultz)
      </fix>
      <fix>
        Do not throw a NullPointerException when an MBean or operation cannot
        be found by the JMXProxyServlet. (schultz)
      </fix>
      <update>
        <bug>64067</bug>: Allow more than one parameter when defining RewriteMaps.
        (fschumacher)
      </update>
      <fix>
        <bug>64074</bug>: <code>InputStream</code>s for directories obtained
        from resource URLs now return a directory listing consistent with the
        behaviour of <code>FileURLConnection</code>. In addition to restoring
        the behaviour that was lost as a result of the introduction of
        <code>CachedResourceURLConnection</code>, it expands the feature to
        include packedWARs and to take account of resource JARs. (markt)
      </fix>
      <update>
        Refactor recycle facade system property into a new connector attribute
        named <code>discardFacades</code>. (remm)
      </update>
      <fix>
        <bug>64089</bug>: Add <code>${...}</code> property replacement support
        to XML external entity definitions. (markt)
      </fix>
      <scode>
        Deprecate <code>MappingData.contextPath</code> as it is unused. (markt)
      </scode>
      <fix>
        Fix a problem that meant that remote host, address and port information
        could be missing in the access log for an HTTP/2 request where the
        connection was closed unexpectedly. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Coyote">
    <changelog>
      <update>
        Simplify NIO blocking read and write. (remm)
      </update>
      <fix>
        Ensure that Servlet Asynchronous processing timeouts fire when requests
        are made using HTTP/2. (markt)
      </fix>
      <fix>
        Fix the corruption of the TLS configuration when using the deprecated TLS
        attributes on the Connector if the configuration has already been set
        via the new <code>SSLHostConfig</code> and
        <code>SSLHostConfigCertificate</code> elements. (markt)
      </fix>
      <fix>
        <bug>63966</bug>: Switch the message shown when using HTTP to connect to
        an HTTPS port from ISO-8859-1 to UTF-8. (markt)
      </fix>
      <fix>
        <bug>64007</bug>: Cancel selection key in poller before wrapper close to
        avoid possible deadlock. (remm)
      </fix>
      <add>
        Add support for RFC 5915 formatted, unencrypted EC key files when using
        a JSSE based TLS connector. (markt)
      </add>
      <fix>
        Correct a regression introduced in 9.0.28 that meant invalid tokens in
        the <code>Transfer-Encoding</code> header were ignored rather than
        treated as an error. (markt)
      </fix>
      <fix>
        Rename the HTTP Connector attribute <code>rejectIllegalHeaderName</code>
        to <code>rejectIllegalHeader</code> and expand the underlying
        implementation to include header values as well as names. (markt)
      </fix>
      <update>
        Disable (comment out in server.xml) the AJP/1.3 connector by default.
        (markt)
      </update>
      <update>
        Change the default bind address for the AJP/1.3 connector to be the
        loopback address. (markt)
      </update>
      <add>
        Rename the <code>requiredSecret</code> attribute of the AJP/1.3
        Connector to <code>secret</code> and add a new attribute
        <code>secretRequired</code> that defaults to <code>true</code>. When
        <code>secretRequired</code> is <code>true</code> the AJP/1.3 Connector
        will not start unless the <code>secret</code> attribute is configured to
        a non-null, non-zero length String. (markt)
      </add>
      <add>
        Add a new attribute, <code>allowedRequestAttributesPattern</code> to
        the AJP/1.3 Connector. Requests with unrecognised attributes will be
        blocked with a 403. (markt)
      </add>
    </changelog>
  </subsection>
  <subsection name="Jasper">
    <changelog>
      <fix>
        Update the performance optimisation for using expressions in tags that
        depend on uninitialised tag attributes with implied scope to make the
        performance optimisation aware of the new public class
        (<code>java.lang.Record</code>) added in Java 14. (markt)
      </fix>
      <fix>
        <bug>64097</bug>: Replace the faulty custom services lookup used for
        <code>ExpressionFactory</code> implementations with
        <code>ServiceLoader</code>. (markt)
      </fix>
      <add>
        Add a <code>META-INF/services</code> entry to jasper-el.jar so that the
        Expression Language implementation can be discovered via the services
        API. (markt)
      </add>
    </changelog>
  </subsection>
  <subsection name="Cluster">
    <changelog>
      <fix>
        <bug>64043</bug>: Ensure that session ID changes are replicated during
        form-authentication. (kfujino)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Web applications">
    <changelog>
      <fix>
        <bug>64000</bug>: In the examples web application, where a Servlet
        example includes i18n support, the Locale used should be based on the
        request locale and not the server locale. (markt)
      </fix>
      <add>
        Add additional information on securing AJP/1.3 Connectors. (markt)
      </add>
    </changelog>
  </subsection>
  <subsection name="Other">
    <changelog>
      <fix>
        <bug>63995</bug>: Ensure statements are closed when a pooled JDBC
        connection is passivated in Tomcat's fork of Commons DBCP2. (markt)
      </fix>
    </changelog>
  </subsection>
</section>
<section name="Tomcat 9.0.30 (markt)" rtext="2019-12-12">
  <subsection name="Catalina">
    <changelog>
      <add>
        <bug>63681</bug>: Introduce RealmBase#authenticate(GSSName, GSSCredential)
        and friends. (michaelo)
      </add>
      <fix>
        <bug>63964</bug>: Correct a regression in the static resource caching
        changes introduced in 9.0.28. URLs constructed from URLs obtained from
        the cache could not be used to access resources. (markt)
      </fix>
      <fix>
        <bug>63970</bug>: Correct a regression in the static resource caching
        changes introduced in 9.0.28. Connections to URLs obtained for JAR
        resources could not be cast to <code>JarURLConnection</code>. (markt)
      </fix>
      <add>
        <bug>63937</bug>: Add a new attribute to the standard
        <code>Authenticator</code> implementations,
        <code>allowCorsPreflight</code>, that allows the
        <code>Authenticator</code>s to be configured to allow CORS preflight
        requests to bypass authentication as required by the CORS specification.
        (markt)
      </add>
      <fix>
        <bug>63939</bug>: Correct the same origin check in the CORS filter. An
        origin with an explicit default port is now considered to be the same as
        an origin without a default port and origins are now compared in a
        case-sensitive manner as required by the CORS specification. (markt)
      </fix>
      <fix>
        <bug>63981</bug>: Allow multiple calls to
        <code>Registry.disableRegistry()</code> without the second and
        subsequent calls triggering the logging of a warning. Based on a patch
        by Andy Wilkinson. (markt)
      </fix>
      <fix>
        <bug>63982</bug>: CombinedRealm makes assumptions about principal implementation
        (michaelo)
      </fix>
      <fix>
        <bug>63983</bug>: Correct a regression in the static resource caching
        changes introduced in 9.0.28. A large number of file descriptors were
        opened that could reach the OS limit before being released by GC.
        (markt)
      </fix>
      <update>
        <bug>63987</bug>: Deprecate <code>Realm.getRoles(Principal)</code>. (michaelo)
      </update>
      <scode>
        Add a unit test for the session <code>FileStore</code> implementation
        and refactor loops in <code>FileStore</code> to use the ForEach style.
        Pull request provided by Govinda Sakhare. (markt)
      </scode>
      <update>
        Moved server-side include (SSI) module into a separate JAR library. (schultz)
      </update>
      <fix>
        Refactor FORM authentication to reduce duplicate code and to ensure that
        the authenticated Principal is not cached in the session when caching is
        disabled. This is the fix for CVE-2019-17563. (markt/kkolinko)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Coyote">
    <changelog>
      <fix>
        Fix endpoint closeSocket and destroySocket discrepancies, in particular
        in the APR connector. (remm)
      </fix>
      <fix>
        Harmonize maxConnections default value to 8192 across all connectors.
        (remm)
      </fix>
      <fix>
        <bug>63931</bug>: Improve timeout handling for asyncIO to ensure that
        blocking operations see a <code>SocketTimeoutException</code> if one
        occurs. (remm/markt)
      </fix>
      <fix>
        <bug>63932</bug>: By default, do not compress content that has a strong
        ETag. This behaviour is configuration for the HTTP/1.1 and HTTP/2
        connectors via the new Connector attribute
        <code>noCompressionStrongETag</code>. (markt)
      </fix>
      <fix>
        <bug>63949</bug>: Fix non blocking write problems with NIO due to the
        need for a write loop. (remm)
      </fix>
      <fix>
        Simplify regular endpoint writes by removing write(Non)BlockingDirect.
        All regular writes will now be buffered for a more predictable
        behavior. (remm)
      </fix>
      <fix>
        Send an exception directly to the completion handler when a timeout
        exception occurs for the operation, and add a boolean to make sure the
        completion handler is called only once. (remm/markt)
      </fix>
      <add>
        When reporting / logging invalid HTTP headers encode any non-printing
        characters using the 0xNN form. (markt)
      </add>
    </changelog>
  </subsection>
  <subsection name="WebSocket">
    <changelog>
      <fix>
        Ensure a couple of very unlikely concurrency issues are avoided when
        writing WebSocket messages. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Web applications">
    <changelog>
      <fix>
        Fix the broken re-try link on the error page for the FORM authentication
        example in the JSP section of the examples web application. (markt)
      </fix>
      <add>
        Improvements to CsrfPreventionFilter: additional logging, allow the
        CSRF nonce request parameter name to be customized.
        (schultz)
      </add>
      <fix>
        Correct the documentation for the <code>maxConnections</code> attribute
        of the <code>Connector</code> in the documentation web application.
        (markt)
      </fix>
      <add>
        Add the ability to set and display session attributes in the JSP FORM
        authentication example to demonstrate session persistence across
        restarts for authenticated sessions. (markt)
      </add>
    </changelog>
  </subsection>
  <subsection name="Other">
    <changelog>
      <fix>
        Correct the fix for <bug>63815</bug> (quoting the use of
        <code>CATALINA_OPTS</code> and <code>JAVA_OPTS</code> when used in shell
        scripts to avoid the expansion of <code>*</code>) as it caused various
        regressions, particularly with <code>daemon.sh</code>. (markt)
      </fix>
      <update>
        Update the OWB module to Apache OpenWebBeans 2.0.13. (remm)
      </update>
      <update>
        Support Java 11 in Graal Native Images with Graal 19.3+. (remm)
      </update>
      <add>
        Expand the search made by the Windows installer for a suitable Java
        installation to include the 64-bit JDK registry entries and the
        <code>JAVA_HOME</code> environment variable. Pull request provided by
        Alexander Norz. (markt)
      </add>
      <add>
        Expand the coverage of the Korean translations provided with Apache
        Tomcat. (woonsan)
      </add>
      <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. Contributions provided by lins and 磊. (markt)
      </add>
      <add>
        Update the internal fork of Apache Commons BCEL to ff6941e (2019-12-06,
        6.4.2-dev). Code clean-up only. (markt)
      </add>
      <add>
        Update the internal fork of Apache Commons Codec to 9637dd4 (2019-12-06,
        1.14-SNAPSHOT). Code clean-up and a fix for CODEC-265. (markt)
      </add>
      <add>
        Update the internal fork of Apache Commons FileUpload to 2317552
        (2019-12-06, 2.0-SNAPSHOT). Refactoring. (markt)
      </add>
      <add>
        Update the internal fork of Apache Commons Pool 2 to 6092f92 (2019-12-06,
        2.8.0-SNAPSHOT). Clean-up and minor refactoring. (markt)
      </add>
      <add>
        Update the internal fork of Apache Commons DBCP 2 to a36390 (2019-12-06,
        2.7.1-SNAPSHOT). Minor refactoring. (markt)
      </add>
    </changelog>
  </subsection>
</section>
<section name="Tomcat 9.0.29 (markt)" rtext="2019-11-21">
  <subsection name="Catalina">
    <changelog>
      <fix>
       Refactor JMX remote RMI registry creation. This is the fix for
       CVE-2019-12418. (remm)
      </fix>
      <add>
        Improvement to CsrfPreventionFilter: expose the latest available nonce
        as a request attribute; expose the expected nonce request parameter
        name as a context attribute.
        (schultz)
      </add>
    </changelog>
  </subsection>
  <subsection name="Coyote">
    <changelog>
      <add>
        <bug>63835</bug>: Add support for Keep-Alive response header. (michaelo)
      </add>
      <fix>
        Correct a logic bug in the <code>NioEndpoint</code> timeout handling
        that meant a write timeout could be handled as a read timeout. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Web applications">
    <changelog>
      <add>
        Add a warning regarding potential poor performance of the HTTP and AJP
        connectors if <code>socket.txBufSize</code> is configured with an
        explicit value rather than using the JVM default. (markt)
      </add>
    </changelog>
  </subsection>
  <subsection name="Other">
    <changelog>
      <fix>
        Improve OWB module based using custom shade appender. (remm)
      </fix>
      <fix>
        Add security filter in OWB module in addition to the valve for more flexibility. (remm)
      </fix>
    </changelog>
  </subsection>
</section>
<section name="Tomcat 9.0.28 (markt)" rtext="not released">
  <subsection name="Catalina">
    <changelog>
      <fix>
        Bad paths for URIs can cause exceptions on Windows due to its
        path separator, so wrap using an IOException. (remm)
      </fix>
      <fix>
        <bug>63832</bug>: Properly mark container as FAILED when a JVM error
        occurs on stop. (remm)
      </fix>
      <add>
        Add more details on the usage of <code>RewriteMap</code>
        functionality in the <code>RewriteValve</code>. (fschumacher)
      </add>
      <fix>
        <bug>63836</bug> Ensure that references to the Host object are cleared
        once the Host instance is destroyed. (markt)
      </fix>
      <fix>
        Ensure that, when static resource caching is enabled for a web
        application, all access to static files (including JSP files) goes via
        the cache so that a consistent view of the static files is seen. Prior
        to this change it was possible to see an updated last modified time but
        the content would be that prior to the modification. (markt)
      </fix>
      <update>
        <bug>63905</bug> Clean up Tomcat CSS. (michaelo)
      </update>
      <fix>
        <bug>63909</bug>: When the <code>ExpiresFilter</code> is used without a
        default and the response is served by the Default Servlet, ensure that
        the filter processes the response if the Default Servlet sets a 304 (Not
        Found) status code. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Coyote">
    <changelog>
      <fix>
        Ensure that <code>ServletRequest.isAsyncStarted()</code> returns
        <code>false</code> once <code>AsyncContext.complete()</code> or
        <code>AsyncContext.dispatch()</code> has been called during
        <code>AsyncListener.onTimeout()</code> or
        <code>AsyncListener.onError()</code>. (markt)
      </fix>
      <fix>
        <bug>63816</bug> and <bug>63817</bug>: Correctly handle I/O errors after
        asynchronous processing has been started but before the container thread
        that started asynchronous processing has completed processing the
        current request/response. (markt)
      </fix>
      <fix>
        <bug>63825</bug>: When processing the <code>Expect</code> and
        <code>Connection</code> HTTP headers looking for a specific token, be
        stricter in ensuring that the exact token is present. (markt)
      </fix>
      <fix>
        <bug>63829</bug>: Improve the check of the <code>Content-Encoding</code>
        header when looking to see if Tomcat is serving pre-compressed content.
        Ensure that only a full token is matched and that the match is case
        insensitive. (markt)
      </fix>
      <fix>
        <bug>63864</bug>: Refactor parsing of the <code>transfer-encoding</code>
        request header to use the shared parsing code and reduce duplication.
        (markt)
      </fix>
      <fix>
        <bug>63865</bug>: Add <code>Unset</code> option to same-site cookies
        and pass through <code>None</code> value if set by user. Patch provided
        by John Kelly. (markt)
      </fix>
      <fix>
        <bug>63879</bug>: Remove stack trace from debug logging on socket
        wrapper close. (remm)
      </fix>
      <update>
        Add connection tracking on the connector endpoint to remove excessive
        concurrency in the protocol handler when maintaining an association
        between the socket wrapper and its current processor. (remm)
      </update>
      <fix>
        <bug>63894</bug>: Ensure that the configured values for
        <code>certificateVerification</code> and
        <code>certificateVerificationDepth</code> are correctly passed to the
        OpenSSL based SSLEngine implementation. (remm/markt)
      </fix>
      <fix>
        Improve cleanup after errors when setting socket options. (remm)
      </fix>
      <fix>
        <bug>63859</bug>: Do not perform a blocking read after a
        <code>CPING</code> message is received by the AJP connector because, if
        the JK Connector is configured with
        <code>ping_mode=&quot;I&quot;</code>, the <code>CPING</code> message
        will not always be followed by the start of a request. (markt)
      </fix>
      <fix>
        Properly calculate all dynamic parts of the ErrorReportValve response
        on the fly in
        <code>org.apache.coyote.http2.TestHttp2InitialConnection</code>.
        (michaelo)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Jasper">
    <changelog>
      <fix>
        <bug>63897</bug>: Capture the timestamp of a JSP for the purposes of
        modification tracking before the JSP is compiled to prevent a race
        condition if the JSP is modified during compilation. Patch provided by
        Karl von Randow. (markt)
      </fix>
      <fix>
        Fix a race condition that could mean changes to a modified JSP were not
        visible to end users. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="WebSocket">
    <changelog>
      <fix>
        <bug>63913</bug>: Wrap any <code>NullPointerException</code>s throw by
        the <code>Inflater</code> or <code>Deflater</code> used by the
        <code>PerMessageDeflate</code> extension in an <code>IOException</code>
        so that the error can be caught and handled by the WebSocket error
        handling mechanism. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Web applications">
    <changelog>
      <fix>
        Correct the description of the default value for the server attribute in
        the security How-To. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Other">
    <changelog>
      <fix>
        <bug>63815</bug>: Quote the use of <code>CATALINA_OPTS</code> and
        <code>JAVA_OPTS</code> when used in shell scripts to avoid the expansion
        of <code>*</code>. Note that any newlines present in
        <code>CATALINA_OPTS</code> and/or <code>JAVA_OPTS</code> will no longer
        removed. (markt)
      </fix>
      <fix>
        <bug>63826</bug>: Remove <code>commons-daemon-native.tar.gz</code> and
        <code>tomcat-native.tar.gz</code> from the binary zip distributions for
        Windows since compiled versions of those components are already
        included within the zip distributions. (markt)
      </fix>
      <fix>
        <bug>63838</bug>: Suppress reflexive access warnings when running the
        unit tests on the command line. (markt)
      </fix>
      <fix>
        Add missing charsets from the HPE JVM on HP-UX to pass unit tests in
        <code>org.apache.tomcat.util.buf.TestCharsetCache</code>. (michaelo)
      </fix>
      <update>
        Update the CXF module to Apache CXF 3.3.4. (remm)
      </update>
      <add>
        Expand the coverage and quality of the French translations provided
        with Apache Tomcat. (remm)
      </add>
      <add>
        Expand the coverage and quality of the Japanese translations provided
        with Apache Tomcat. Patch provided by motohashi.yuki. (markt)
      </add>
      <add>
        Expand the coverage and quality of the Simplified Chinese translations
        provided with Apache Tomcat. Contributions provided by rpo130, Mason
        Shen, leeyazhou, winsonzhao, qingshi huang, Lay, Shucheng Hou and
        Yanming Zhou. (markt)
      </add>
      <add>
        Expand the coverage and quality of the Brazilian Portuguese translations
        provided with Apache Tomcat. Patch provided by Danielamorais. (markt)
      </add>
    </changelog>
  </subsection>
</section>
<section name="Tomcat 9.0.27 (markt)" rtext="2019-10-11">
  <subsection name="Catalina">
    <changelog>
      <fix>
        Correct a regression introduced in 9.0.25 that prevented configuration
        files from being loaded from the class path. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Coyote">
    <changelog>
      <fix>
        Use URL safe base 64 encoding rather than standard base 64 encoding when
        generating or parsing the <code>HTTP2-Settings</code> header as part of
        an HTTP upgrade to <code>h2c</code> as required by RFC 7540. (markt)
      </fix>
      <fix>
        <bug>63765</bug>: NIO2 should try to unwrap after TLS handshake to
        avoid edge cases. (remm)
      </fix>
      <fix>
        <bug>63766</bug>: Ensure Processor objects are recycled when processing
        an HTTP upgrade connection that terminates before processing switches to
        the Processor for the upgraded protocol. (markt)
      </fix>
      <fix>
        Fix a memory leak introduced by the HTTP/2 timeout refactoring in 9.0.23
        that could occur when HTTP/2 or WebSocket was used. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Jasper">
    <changelog>
      <update>
        Update to the Eclipse JDT compiler 4.13. (markt)
      </update>
      <fix>
        Add GraalVM specific ELResolver to avoid BeanInfo use in BeanElResolver
        if possible, as it needs manual reflection configuration. (remm)
      </fix>
      <fix>
        <bug>63781</bug>: When performing various checks related to the
        visibility of classes, fields an methods in the EL implementation, also
        check that the containing module has been exported. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Web Socket">
    <changelog>
      <fix>
        <bug>63753</bug>: Ensure that the <code>Host</code> header in a Web
        Socket HTTP upgrade request only contains a port if a non-default port
        is being used. (markt)
      </fix>
      <fix>
        When running on Java 9 and above, don't attempt to instantiate WebSocket
        Endpoints found in modules that are not exported. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Web Applications">
    <changelog>
      <add>
        Add base GraalVM documentation. (remm)
      </add>
      <add>
        Add Javadoc for the Common Annotations API implementation. (markt)
      </add>
      <fix>
        Correct various typos in the comments, error messages and Javadoc. Patch
        provided by 康智冬. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="jdbc-pool">
    <changelog>
      <fix>
        When connections are validated without an explicit validation query,
        ensure that any transactions opened by the validation process are
        committed. Patch provided by Pascal Davoust. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Other">
    <changelog>
      <scode>
        Deprecate <code>org.apache.tomcat.util.compat.TLS</code>.
        Its functionality was only used for unit tests in
        <code>org.apache.tomcat.util.net.TesterSupport</code>
        and has been moved there. (rjung)
      </scode>
      <fix>
        <bug>63759</bug>: When installing Tomcat with the Windows installer,
        grant sufficient privileges to enable the uninstaller to execute when
        user account control is active. (markt)
      </fix>
      <add>
        Use a build property to define the minimum supported Java version and
        use that build property to reduce the number of edits required to update
        the minimum supported Java version. (markt)
      </add>
      <update>
        Update the OWB module to Apache OpenWebBeans 2.0.12. (remm)
      </update>
      <update>
        Update the CXF module to Apache CXF 3.3.3. (remm)
      </update>
      <update>
        <bug>63767</bug>: Update to Commons Daemon 1.2.2. This corrects a
        regression in Commons Daemon 1.2.0 and 1.2.1 that caused the Windows
        Service to crash on start when running on an operating system that had
        not been fully updated. (markt)
      </update>
    </changelog>
  </subsection>
</section>
<section name="Tomcat 9.0.26 (markt)" rtext="2019-09-19">
  <subsection name="Other">
    <changelog>
      <fix>
        Re-tagged to ensure that the source file for the changelog did not
        contain an XML byte order mark. (markt)
      </fix>
    </changelog>
  </subsection>
</section>
<section name="Tomcat 9.0.25 (markt)" rtext="not released">
  <subsection name="Catalina">
    <changelog>
      <fix>
        Avoid a possible <code>InvalidPathException</code> when obtaining a URI
        for a configuration file. (markt)
      </fix>
      <fix>
        <bug>63684</bug>: <code>Wrapper</code> never passed to
        <code>RealmBase.hasRole()</code> for given security constraints.
        (michaelo)
      </fix>
      <fix>
        <bug>63740</bug>: Ensure configuration files are loaded correctly when a
        <code>Host</code> is configured with an <code>xmlBase</code>. Patch
        provided by uk4sx. (markt)
      </fix>
      <fix>
        Avoid a potential <code>NullPointerException</code> on Service stop if a
        Service is embedded directly (i.e. with no Server) in an application
        and JNDI is enabled. Patch provided by S. Ali Tokmen. (markt)
      </fix>
      <add>
        Add a new <code>PropertySource</code> implementation,
        <code>EnvironmentPropertySource</code>, that can be used to do property
        replacement in configuration files with environment variables. Based on
        a pull request provided by Thomas Meyer. (markt)
      </add>
    </changelog>
  </subsection>
  <subsection name="Coyote">
    <changelog>
      <fix>
        <bug>63682</bug>: Fix a potential hang when using the asynchronous
        Servlet API to write the response body and the stream and/or connection
        window reaches 0 bytes in size. (markt)
      </fix>
      <fix>
        <bug>63690</bug>: Use the average of the current and previous sizes when
        calculating overhead for HTTP/2 <code>DATA</code> and
        <code>WINDOW_UPDATE</code> frames to avoid false positives as a result
        of client side buffering behaviour that causes a small percentage of
        non-final DATA frames to be smaller than expected. (markt)
      </fix>
      <fix>
        <bug>63706</bug>: Avoid NPE accessing https port with plaintext. (remm)
      </fix>
      <fix>
        Correct typos in the names of the configuration attributes
        <code>overheadDataThreshold</code> and
        <code>overheadWindowUpdateThreshold</code>. (markt)
      </fix>
      <fix>
        If the HTTP/2 connection requires an initial window size larger than the
        default, send a WINDOW_UPDATE to increase the flow control window for the
        connection so that the initial size of the flow control window for the
        connection is consistent with the increased value. (markt)
      </fix>
      <fix>
        <bug>63710</bug>: When using HTTP/2, ensure that a
        <code>content-length</code> header is not set for those responses with
        status codes that do not permit one. (markt)
      </fix>
      <fix>
        <bug>63737</bug>: Correct various issues when parsing the
        <code>accept-encoding</code> header to determine if gzip encoding is
        supported including only parsing the first header found. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Jasper">
    <changelog>
      <fix>
        <bug>63724</bug>: Correct a regression introduced in 9.0.21 that broke
        compilation of JSPs in some configurations. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Web applications">
    <changelog>
      <fix>
        Correct the source code links on the index page for the ROOT web
        application to point to Git rather than Subversion. (markt)
      </fix>
      <fix>
        Fix various issues with the Javadoc generated for the documentation web
        application to enable release builds to be built with Java 10 onwards.
        (markt)
      </fix>
      <fix>
        <bug>63733</bug>: Remove the documentation for the &quot;Additional
        Components&quot; since they have been removed / merged into the core
        Tomcat distribution for 9.0.5 onwards. (markt)
      </fix>
      <fix>
        <bug>63739</bug>: Correct the invalid <code>Automatic-Module-Name</code>
        manifest entries for the Tomcat provided JARs included in the Tomcat
        embedded distribution. (markt)
      </fix>
      <fix>
        Fix a large number of Javadoc and documentation typos. Patch provided by
        KangZhiDong. (markt)
      </fix>
      <fix>
        Spelling and formatting corrections for the cluster how-to. Pull request
        provided by Bill Mitchell. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Other">
    <changelog>
      <add>
        Expand the coverage and quality of the French translations provided
        with Apache Tomcat. (remm)
      </add>
      <add>
        Expand the coverage and quality of the Simplified Chinese translations
        provided with Apache Tomcat. Includes contributions by leeyazhou and
        康智冬. (markt)
      </add>
      <fix>
        <bug>62140</bug>: Additional usage documentation in comments for
        <code>catalina.[bat|sh]</code>. (markt)
      </fix>
      <fix>
        Fix <code>JSSE_OPTS</code> quoting in <code>catalina.bat</code>.
        Contributed by Peter Uhnak. (fschumacher)
      </fix>
      <update>
        <bug>63625</bug>: Update to Commons Daemon 1.2.1. This corrects several
        regressions in Commons Daemon 1.2.1, most notably the Windows Service
        crashing on start when using 32-bit JVMs. (markt)
      </update>
      <fix>
        <bug>63689</bug>: Correct a regression in the fix for <bug>63285</bug>
        that meant that when installing a service, the service display name was
        not set. (markt)
      </fix>
      <fix>
        When performing a silent install with the Windows Installer, ensure that
        the registry entries are added to the 64-bit registry when using a
        64-bit JVM. (markt)
      </fix>
      <fix>
        Remove unused i18n messages and associated translations. Patch provided
        by KangZhiDong. (markt)
      </fix>
      <add>
        Expand the coverage and quality of the Korean translations provided
        with Apache Tomcat. (woonsan)
      </add>
    </changelog>
  </subsection>
</section>
<section name="Tomcat 9.0.24 (markt)" rtext="2019-08-17">
  <subsection name="Coyote">
    <changelog>
      <scode>
        Remove the code in the sendfile poller that ensured smaller pollsets
        were used with older, no longer supported versions of Windows that
        could not support larger pollsets. (markt)
      </scode>
    </changelog>
  </subsection>
</section>
<section name="Tomcat 9.0.23 (markt)" rtext="not released">
  <subsection name="Catalina">
    <changelog>
      <add>
        <bug>57665</bug>: Add support for the <code>X-Forwarded-Host</code>
        header to the <code>RemoteIpFilter</code> and <code>RemoteIpValve</code>.
        (markt)
      </add>
      <add>
        <bug>62496</bug>: Add option to write auth information (remote user/auth type)
        to response headers. (michaelo)
      </add>
      <fix>
        <bug>63550</bug>: Only try the <code>alternateURL</code> in the
        <code>JNDIRealm</code> if one has been specified. (markt)
      </fix>
      <add>
        <bug>63556</bug>: Mark request as forwarded in RemoteIpValve and
        RemoteIpFilter (michaelo)
      </add>
      <fix>
        <bug>63579</bug>: Correct parsing of malformed OPTIONS requests and
        reject them with a 400 response rather than triggering an internal error
        that results in a 500 response. (markt)
      </fix>
      <fix>
        <bug>63608</bug>: Align the implementation of the negative match feature
        for patterns used with the <code>RewriteValve</code> with the
        description in the documentation. (markt)
      </fix>
      <update>
        <bug>63627</bug>: Implement more fine-grained handling in
        <code>RealmBase.authenticate(GSSContext, boolean)</code>. (michaelo)
      </update>
      <fix>
        If an unhandled exception occurs on a asynchronous thread started via
        <code>AsyncContext.start(Runnable)</code>, process it using the standard
        error page mechanism. (markt)
      </fix>
      <fix>
        Discard large byte buffers allocated using setBufferSize when recycling
        the request. (remm)
      </fix>
      <fix>
        Avoid a <code>NullPointerException</code> in the
        <code>CrawlerSessionManagerValve</code> if no ROOT Context is deployed
        and a request does not map to any of the other deployed Contexts. Patch
        provided by Jop Zinkweg. (markt)
      </fix>
      <fix>
        <bug>63636</bug>: <code>Context.findRoleMapping()</code> never called
        in <code>StandardWrapper.findSecurityReference()</code>. (michaelo)
      </fix>
     </changelog>
  </subsection>
  <subsection name="Coyote">
    <changelog>
      <scode>
        Refactor the APR poller to always use a single pollset now that the
        Windows operating systems that required multiple smaller pollsets to be
        used are no longer supported. (markt)
      </scode>
      <fix>
        <bug>63524</bug>: Improve the handling of PEM file based keys and
        certificates that do not include a full certificate chain when
        configuring the internal, in-memory key store. Improve the handling of
        PKCS#1 formatted private keys when configuring the internal, in-memory
        key store. (markt)
      </fix>
      <update>
        Add callback when finishing the set properties rule in the digester.
        (remm)
      </update>
      <fix>
        <bug>63568</bug>: Avoid error when trying to set tcpNoDelay on socket
        types that do not support it, which can occur when using the NIO
        inherited channel capability. Submitted by František Kučera. (remm)
      </fix>
      <fix>
        <bug>63570</bug>: Fix regression retrieving local address with
        the NIO connector. Submitted by Aditya Kadakia. (remm)
      </fix>
      <fix>
        Correct parsing of invalid host names that contain bytes in the range
        128 to 255 and reject them with a 400 response rather than triggering an
        internal error that results in a 500 response. (markt)
      </fix>
      <fix>
        <bug>63571</bug>: Allow users to configure infinite TLS session caches
        and/or timeouts. (markt)
      </fix>
      <fix>
        <bug>63578</bug>: Improve handling of invalid requests so that 400
        responses are returned to the client rather than 500 responses. (markt)
      </fix>
      <fix>
        Fix h2spec test suite failure. It is an error if a Huffman encoded
        string literal contains the EOS symbol. (jfclere)
      </fix>
      <add>
        Connections that fail the TLS handshake will now appear in the access
        logs with a 400 status code. (markt)
      </add>
      <fix>
        Timeouts for HTTP/2 connections were not always correctly handled
        leaving some connections open for longer than expected. (markt)
      </fix>
      <fix>
        <bug>63650</bug>: Refactor initialisation for JSSE based TLS connectors
        to enable custom JSSE providers that provide custom cipher suites to be
        used. (markt)
      </fix>
      <add>
        Expand the HTTP/2 excessive overhead protection to cover various forms
        of abusive client behaviour and close the connection if any such
        behaviour is detected. (markt)
      </add>
      <fix>
        Fix a crash on shutdown with the APR/native connector when a blocking
        I/O operation was still in progress when the connector stopped. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Cluster">
    <changelog>
      <fix>
        Avoid failing Kubernetes membership (and preventing startup) if the
        stream cannot be opened, to get the same behavior as the DNS based
        membership. The namespace is still a failure on startup but it is easy
        to provide. (remm)
      </fix>
      <fix>
        Avoid non fatal NPEs with Tribes when JMX is not available. (remm)
      </fix>
      <fix>
        Make Kube environment optional for Kube memberships, for easier testing
        and Graal training. A warn log will occur if the environment is not
        present. (remm)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Web applications">
    <changelog>
      <fix>
        <bug>63597</bug>: Update the custom 404 error page for the Host Manager
        to take account of previous refactoring so that the page is used for
        404 errors rather than falling back to the default error page. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Other">
    <changelog>
      <fix>
        JNDI support for GraalVM native images. (remm)
      </fix>
      <fix>
        JSP runtime library support for GraalVM native images. (remm)
      </fix>
      <fix>
        java.util.logging configuration for GraalVM native images. (remm)
      </fix>
      <update>
        Update Checkstyle to 8.22. (markt)
      </update>
      <fix>
        <bug>55969</bug>: Tighten up the security of the Apache Tomcat
        installation created by the Windows installer. Change the default
        shutdown port used by the Windows installer from <code>8005</code> to
        <code>-1</code> (disabled). Limit access to the chosen installation
        directory to local administrators, Local System and Local Service.
        (markt)
      </fix>
      <update>
        <bug>62696</bug>: The digital signature for the Windows installer now
        uses SHA-256 for hashes. (markt)
      </update>
      <add>
        <bug>63285</bug>: Add an option to <code>service.bat</code> so that when
        installing a Windows service, the name of the executables used by the
        Windows service may be changed to match the service name. This
        makes the installation behaviour consistent with the Windows installer.
        The original executable names will be restored when the Windows service
        is removed. The renaming can be enabled by using the new
        <code>--rename</code> option after the service name. (markt)
      </add>
      <update>
        <bug>63310</bug>: Update to Commons Daemon 1.2.0. This provides improved
        support for Java 11. This also changes the user configured by the
        Windows installer for the Windows service from <code>Local System</code>
        to the lower privileged <code>Local Service</code>. (markt)
      </update>
      <add>
        Expand the coverage and quality of the French translations provided
        with Apache Tomcat. (remm)
      </add>
      <fix>
        <bug>63555</bug>: Add <code>Automatic-Module-Name</code> entries for
        each of the Tomcat provided JARs included in the Tomcat embedded
        distribution. (markt)
      </fix>
      <fix>
        <bug>63567</bug>: Restore the passing of <code>$LOGGING_MANAGER</code>
        to the jvm in <code>catalina.sh</code> when calling <code>stop</code>.
        (markt)
      </fix>
      <fix>
        Correct broken OSGi data in JAR file manifests. (markt)
      </fix>
      <fix>
        Add &quot;embed&quot; to the <code>Bundle-Name</code> and
        <code>Bundle-Symbolic-Name</code> for the Tomcat embedded WebSocket JAR
        to align the naming with the other embedded JARs and to differentiate it
        from the standard WebSocket JAR that does not include the API classes.
        (markt)
      </fix>
      <update>
        Update dependency on bnd to 4.2.0. (markt)
      </update>
      <update>
        Update the internal fork of Commons Codec to 3ebef4a (2018-08-01) to
        pick up the fix for CODEC-134. (markt)
      </update>
      <update>
        Update the internal fork of Commons Pool2 to 796e32d (2018-08-01) to
        pick up the changes Commons Pool2 2.7.0. (markt)
      </update>
      <update>
        Update the internal fork of Commons DBCP2 to 87d9e3a (2018-08-01) to
        pick up the changes Commons DBCP2 2.7.0 and DBCP-555. (markt)
      </update>
      <update>
        <bug>63648</bug>: Update the test TLS keys and certificates used in the
        test suite to replace the keys and certificates that are about to
        expire. (markt)
      </update>
    </changelog>
  </subsection>
</section>
<section name="Tomcat 9.0.22 (markt)" rtext="2019-07-09">
  <subsection name="Catalina">
    <changelog>
      <fix>
        Improve parsing of Range request headers. (markt)
      </fix>
      <fix>
        Range headers that specify a range unit Tomcat does not recognise should
        be ignored rather than triggering a 416 response. Based on a pull
        request by zhanhb. (markt)
      </fix>
      <fix>
        When comparing a date from a <code>If-Range</code> header, an exact
        match is required. Based on a pull request by zhanhb. (markt)
      </fix>
      <fix>
        Add an option to the default servlet to disable processing of PUT
        requests with Content-Range headers as partial PUTs. The default
        behaviour (processing as partial PUT) is unchanged. Based on a pull
        request by zhanhb. (markt)
      </fix>
      <fix>
        Improve parsing of Content-Range headers. (markt)
      </fix>
      <update>
        Update the recommended minimum Tomcat Native version to 1.2.23. (markt)
      </update>
    </changelog>
  </subsection>
  <subsection name="Coyote">
    <changelog>
      <fix>
        Remove a source of potential deadlocks when using HTTP/2 when the
        Connector is configured with <code>useAsyncIO</code> as
        <code>true</code>. (markt)
      </fix>
      <fix>
        <bug>63523</bug>: Restore SSLUtilBase methods as protected to preserve
        compatibility. (remm)
      </fix>
      <fix>
        Fix typo in UTF-32LE charset name. Patch by zhanhb via Github.
        (fschumacher)
      </fix>
      <fix>
        Once a URI is identified as invalid don't attempt to process it further.
        Based on a PR by Alex Repert. (markt)
      </fix>
      <fix>
        Fix to avoid the possibility of long poll times for individual pollers
        when using multiple pollers with APR. (markt)
      </fix>
      <fix>
        Refactor the fix for <bug>63205</bug> so it only applies when using
        PKCS12 keystores as regressions have been reported with some other
        keystore types. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Jasper">
    <changelog>
      <add>
        Include file names if SMAP processor is unable to delete or rename a
        class file during SMAP generation. (markt)
      </add>
      <update>
        Update to the Eclipse JDT compiler 4.12. (markt)
      </update>
    </changelog>
  </subsection>
  <subsection name="WebSocket">
    <changelog>
      <fix>
        <bug>63521</bug>: As required by the WebSocket specification, if a POJO
        that is deployed as a result of the SCI scan for annotated POJOs is
        subsequently deployed via the programmatic API ignore the programmatic
        deployment. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Other">
    <changelog>
      <fix>
        Switch the check for terminal availability to test for stdin as using
        stdout does not work when output is piped to another process. Patch
        provided by Radosław Józwik. (markt)
      </fix>
      <add>
        Add user buildable optional modules for easier CDI 2 and JAX-RS
        support. Also include a new documentation page describing how
        to use it. (remm)
      </add>
    </changelog>
  </subsection>
</section>
<section name="Tomcat 9.0.21 (markt)" rtext="2019-06-07">
  <subsection name="Catalina">
    <changelog>
      <add>
        <bug>57287</bug>: Add file sorting to DefaultServlet (schultz)
      </add>
      <fix>
        Fix <code>--no-jmx</code> flag processing, which was called after
        registry initialization. (remm)
      </fix>
      <fix>
        Ensure that a default request character encoding set on a
        <code>ServletContext</code> is used when calling
        <code>ServletRequest#getReader()</code>. (markt)
      </fix>
      <fix>
        Make a best efforts attempt to clean-up if a request fails during
        processing due to an <code>OutOfMemoryException</code>. (markt)
      </fix>
      <fix>
        Improve the BoM detection for static files handled by the default
        servlet for the rarely used UTF-32 encodings. Identified by Coverity
        Scan. (markt)
      </fix>
      <fix>
        Ensure that the default servlet reads the entire global XSLT file if
        one is defined. Identified by Coverity Scan. (markt)
      </fix>
      <fix>
        Avoid potential <code>NullPointerException</code> when generating an
        HTTP <code>Allow</code> header. Identified by Coverity Scan. (markt)
      </fix>
      <scode>
        Add <code>Context.createInstanceManager()</code> for easier framework
        integration. (remm)
      </scode>
      <scode>
        Add utility <code>org.apache.catalina.core.FrameworkListener</code> to
        allow replicating adding a Listener to context.xml in a programmatic
        way. (remm)
      </scode>
      <scode>
        Move <code>Container.ADD_CHILD_EVENT</code> to before the child
        container start, and <code>Container.REMOVE_CHILD_EVENT</code> to
        before removal of the child from the internal child collection.
        (remm)
      </scode>
      <add>
        Remove any fragment included in the target path used to obtain a
        <code>RequestDispatcher</code>. The requested target path is logged as a
        warning since this is an application error. (markt)
      </add>
    </changelog>
  </subsection>
  <subsection name="Coyote">
    <changelog>
      <fix>
        NIO poller seems to create some unwanted concurrency, causing rare
        CI test failures. Add sync when processing async operation to avoid
        this. (remm)
      </fix>
      <fix>
        Fix concurrency issue that lead to incorrect HTTP/2 connection timeout.
        (remm/markt)
      </fix>
      <fix>
        Avoid useless exception wrapping in async IO. (remm)
      </fix>
      <fix>
        <bug>63412</bug>: Security manager failure when using the async IO
        API from a webapp. (remm)
      </fix>
      <fix>
        Remove <code>acceptorThreadCount</code> Connector attribute,
        one accept thread is sufficient. As documented, value <code>2</code>
        was the only other sensible value, but without and impact beyond
        certain microbenchmarks. (remm)
      </fix>
      <fix>
        Avoid possible NPEs on connector stop. (remm)
      </fix>
      <update>
        Remove <code>pollerThreadCount</code> Connector attribute for NIO,
        one poller thread is sufficient. (remm)
      </update>
      <add>
        Add async IO for APR connector for consistency, but disable it by
        default due to low performance. (remm)
      </add>
      <fix>
        Avoid blocking write of internal buffer when using async IO. (remm)
      </fix>
      <scode>
        Refactor async IO implementation to the <code>SocketWrapperBase</code>.
        (remm)
      </scode>
      <update>
        Refactor <code>SocketWrapperBase</code> close using an atomic boolean
        and a <code>doClose</code> method that subclasses will implement, with
        a guarantee that it will be run only once. (remm)
      </update>
      <fix>
        Decouple the socket wrapper, which is not recycled, from the NIOx
        channel after close, and replace it with a dummy static object. (remm)
      </fix>
      <fix>
        Clear buffers on socket wrapper close. (remm)
      </fix>
      <fix>
        NIO2 failed to properly close sockets on connector stop. (remm)
      </fix>
      <update>
        Reduce the default for <code>maxConcurrentStreams</code> on the
        <code>Http2Protocol</code> from 200 to 100 to align with typical
        defaults for HTTP/2 implementations. (markt)
      </update>
      <update>
        Reduce the default HTTP/2 header list size from 4GB to 32kB to align
        with typical HTTP/2 implementations. (markt)
      </update>
      <add>
        Add support for same-site cookie attribute. Patch provided by John
        Kelly. (markt)
      </add>
      <fix>
        Drop legacy NIO double socket close (close channel, then close
        socket). (remm)
      </fix>
      <fix>
        Fix HTTP/2 end of stream concurrency with async. (remm)
      </fix>
      <fix>
        Correct a bug in the stream flushing code that could lead to multiple
        threads processing the stream concurrently which in turn could cause
        errors processing the stream. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Cluster">
    <changelog>
      <fix>
        <bug>62841</bug>: Refactor the <code>DeltaRequest</code> serialization
        to reduce the window during which the <code>DeltaSession</code> is
        locked and to remove a potential cause of deadlocks during
        serialization. (markt)
      </fix>
      <fix>
        <bug>63441</bug>: Further streamline the processing of session creation
        messages in the <code>DeltaManager</code> to reduce the possibility of a
        session update message being processed before the session has been
        created. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="WebSocket">
    <changelog>
      <fix>
        Fix timeout logic for async non blocking writes. Identified by
        Coverity Scan. (remm)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Web applications">
    <changelog>
      <add>
        Expand the explanation of how deprecated TLS configuration attributes
        are converted to the new TLS configuration style. (markt)
      </add>
    </changelog>
  </subsection>
  <subsection name="Tribes">
    <changelog>
      <fix>
        Treat <code>NoRouteToHostException</code> the same way as
        <code>SocketTimeoutException</code> when checking the health of group
        members. This avoids a SEVERE log message every time the check is
        performed when the host associated with a group member is not powered
        on. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Other">
    <changelog>
      <update>
        Switch from FindBugs to SpotBugs. (fschumacher)
      </update>
      <update>
        Start Graal native image compatibility, using the tomcat-maven
        packaging. (remm)
      </update>
      <fix>
        <bug>63403</bug>: Fix TestHttp2InitialConnection test failures when
        running with a non-English locale. (kkolinko)
      </fix>
      <fix>
        Add Graal JreCompat, and use it to disable JMX and URL stream handlers.
        (remm)
      </fix>
      <add>
        Expand the coverage and quality of the Czech translations provided
        with Apache Tomcat. Includes contributions by Arnošt Havelka. (markt)
      </add>
      <add>
        Expand the coverage and quality of the German translations provided
        with Apache Tomcat. Includes contributions by Niklasmerz, dusiema and
        Jens. (markt)
      </add>
      <add>
        Expand the coverage and quality of the French translations provided
        with Apache Tomcat. (remm)
      </add>
      <add>
        Expand the coverage and quality of the Simplified Chinese translations
        provided with Apache Tomcat. Includes contributions by 諵. (markt)
      </add>
      <fix>
        Use the <code>test</code> command to check for terminal availability
        rather than the <code>tty</code> command since the <code>tty</code>
        based test fails on non-English locales. (markt)
      </fix>
    </changelog>
  </subsection>
</section>
<section name="Tomcat 9.0.20 (markt)" rtext="2019-05-13">
  <subsection name="Catalina">
    <changelog>
      <fix>
        Fix some edge cases where the docBase was not being set using a canonical
        path which in turn meant resource URLs were not being constructed as
        expected. (markt)
      </fix>
      <fix>
        Fix a potential resource leak when executing CGI scripts from a WAR
        file. Identified by Coverity scan. (markt)
      </fix>
      <fix>
        Fix a potential concurrency issue in the StringCache identified by
        Coverity scan. (markt)
      </fix>
      <fix>
        Fix a potential concurrency issue in the main Sendfile thread of the APR
        connector. Identified by Coverity scan. (markt)
      </fix>
      <fix>
        Fix a potential resource leak when running a web application from a WAR
        file. Identified by Coverity scan. (markt)
      </fix>
      <fix>
        Fix a potential resource leak on some exception paths in the
        <code>DataSourceRealm</code>. Identified by Coverity scan. (markt)
      </fix>
      <fix>
        Fix a potential resource leak on an exception path when parsing JSP
        files. Identified by Coverity scan. (markt)
      </fix>
      <fix>
        Fix a potential resource leak when a JNDI lookup returns an object of an
        in compatible class. Identified by Coverity scan. (markt)
      </fix>
      <scode>
        Refactor <code>ManagerServlet</code> to avoid loading classes when
        filtering JNDI resources for resources of a specified type. (markt)
      </scode>
      <fix>
        <bug>63324</bug>: Refactor the <code>CrawlerSessionManagerValve</code>
        so that the object placed in the session is compatible with session
        serialization with mem-cached. Patch provided by Martin Lemanski.
        (markt)
      </fix>
      <add>
        <bug>63358</bug>: Expand the <code>throwOnFailure</code> support in the
        <code>Connector</code> to include the adding of a <code>Connector</code>
        to a running <code>Service</code>. (markt)
      </add>
      <add>
        <bug>63361</bug>: Add a new method
        (<code>Registry.disableRegistry()</code>) that can be used to disable
        JMX registration of Tomcat components providing it is called before the
        first component is registered. (markt)
      </add>
      <fix>
        Avoid <code>OutOfMemoryError</code>s and
        <code>ArrayIndexOutOfBoundsException</code>s when accessing large files
        via the default servlet when resource caching has been disabled. (markt)
      </fix>
      <fix>
        Avoid a <code>NullPointerException</code> when a <code>Context</code> is
        defined in <code>server.xml</code> with a <code>docBase</code> but not
        the optional <code>path</code>. (markt)
      </fix>
      <fix>
        <bug>63333</bug>: Override the <code>isAvailable()</code> method in the
        <code>JAASRealm</code> so that only login failures caused by invalid
        credentials trigger account lock out when the <code>LockOutRealm</code>
        is in use. Patch provided by jchobantonov. (markt)
      </fix>
      <fix>
        Add <code>--no-jmx</code> flag to allow disabling JMX in
        <code>startup.Tomcat.main</code>. (remm)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Coyote">
    <changelog>
      <fix>
        The <code>useAsyncIO</code> boolean attribute on the Connector element
        value now defaults to <code>true</code>. (remm)
      </fix>
      <fix>
        Possible HTTP/2 connection leak issue when using async with NIO. (remm)
      </fix>
      <fix>
        Fix socket close discrepancies for NIO, now the wrapper close
        is used everywhere except for socket accept problems. (remm)
      </fix>
      <fix>
        Implement poller timeout when using async IO with NIO. (remm)
      </fix>
      <fix>
        Avoid creating and using object caches when they are disabled. (remm)
      </fix>
      <fix>
        When running on newer JREs that don't support SSLv2Hello, don't warn
        that it is not available unless explicitly configured. (markt)
      </fix>
      <fix>
        Change default value of <code>pollerThreadCount</code> of NIO
        to <code>1</code>. (remm)
      </fix>
      <fix>
        Associate BlockPoller thread name with its NIO connector for better
        readability. (remm)
      </fix>
      <fix>
        The async HTTP/2 frame parser should tolerate concurrency so clearing
        shared buffers before attempting a read is not possible. (remm)
      </fix>
      <update>
        Update the HTTP/2 connection preface and initial frame reading to be
        asynchronous instead of blocking IO. (remm)
      </update>
      <scode>
        Refactor Hostname validation to improve performance. Patch provided by
        Uwe Hees. (markt)
      </scode>
      <update>
        Add additional NIO2 style read and write methods closer to core NIO2,
        for possible use with an asynchronous workflow like CompletableFuture.
        (remm)
      </update>
      <fix>
        Expand HTTP/2 timeout handling to include connection window exhaustion
        on write. This is the fix for CVE-2019-10072. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Jasper">
    <changelog>
      <fix>
        <bug>63359</bug>: Ensure that the type conversions used when converting
        from strings for <code>jsp:setProperty</code> actions are correctly
        implemented as per section JSP.1.14.2.1 of the JSP 2.3 specification.
        (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Other">
    <changelog>
      <fix>
        <bug>63335</bug>: Ensure that stack traces written by the
        <code>OneLineFormatter</code> are fully indented. The entire stack trace
        is now indented by an additional TAB character. (markt)
      </fix>
      <fix>
        <bug>63370</bug>: Message files (LocalStrings_*.properties) of the
        examples webapp not converted to ascii. (woonsan)
      </fix>
      <add>
        Expand the coverage and quality of the French translations provided
        with Apache Tomcat. (remm)
      </add>
      <add>
        Expand the coverage and quality of the Japanese translations provided
        with Apache Tomcat. Includes contributions by motohashi.yuki. (markt)
      </add>
      <add>
        Expand the coverage and quality of the Czech translations provided
        with Apache Tomcat. Includes contributions by Arnošt Havelka. (markt)
      </add>
      <fix>
        When using the <code>OneLineFormatter</code>, don't print a blank line
        in the log after printing a stack trace. (markt)
      </fix>
      <update>
        Update the internal fork of Apache Commons FileUpload to 41e4047
        (2019-04-24) pick up some enhancements. (markt)
      </update>
      <update>
        Update the internal fork of Apache Commons DBCP 2 to dcdbc72
        (2019-04-24) to pick up some clean-up and enhancements. (markt)
      </update>
      <update>
        Update the internal fork of Apache Commons Pool 2 to 0664f4d
        (2019-04-30) to pick up some enhancements and bug fixes. (markt)
      </update>
    </changelog>
  </subsection>
</section>
<section name="Tomcat 9.0.19 (markt)" rtext="2019-04-13">
  <subsection name="Catalina">
    <changelog>
      <fix>
        Fix wrong JMX registration regression in 9.0.18. (remm)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Coyote">
    <changelog>
      <update>
        Add vectoring for NIO in the base and SSL channels. (remm)
      </update>
      <add>
        Add asynchronous IO from NIO2 to the NIO connector, with support for
        the async IO implementations for HTTP/2 and Websockets. The
        <code>useAsyncIO</code> boolean attribute on the Connector element
        allows enabling use of the asynchronous IO API. (remm)
      </add>
    </changelog>
  </subsection>
  <subsection name="Other">
    <changelog>
      <fix>
        Ensure that the correct files are included in the source distribution
        for javacc based parsers depending on whether jjtree is used or not.
        (markt)
      </fix>
      <fix>
        Ensure that text files in the source distribution have the correct line
        endings for the target platform. (markt)
      </fix>
    </changelog>
  </subsection>
</section>
<section name="Tomcat 9.0.18 (markt)" rtext="not released">
  <subsection name="Catalina">
    <changelog>
      <fix>
        <bug>63196</bug>: Provide a default (<code>X-Forwarded-Proto</code>) for
        the <code>protocolHeader</code> attribute of the
        <code>RemoteIpFilter</code> and <code>RemoteIpValve</code>. (markt)
      </fix>
      <fix>
        <bug>63235</bug>: Refactor Charset cache to reduce start time. (markt)
      </fix>
      <fix>
        <bug>63249</bug>: Use a consistent log level (<code>WARN</code>) when
        logging the failure to register or deregister a JMX Bean. (markt)
      </fix>
      <fix>
        <bug>63249</bug>: Use a consistent log level (<code>ERROR</code>) when
        logging the <code>LifecycleException</code> associated with the failure
        to start or stop a component. (markt)
      </fix>
      <fix>
        When the SSI directive <code>fsize</code> is used with an invalid
        target, return a file size of <code>-</code> rather than
        <code>1k</code>. (markt)
      </fix>
      <fix>
        <bug>63251</bug>: Implement a work-around for a known JRE bug (<a
        href="https://bugs.openjdk.java.net/browse/JDK-8194653">JDK-8194653</a>)
        that may cause a dead-lock when Tomcat starts. (markt)
      </fix>
      <fix>
        <bug>63275</bug>: When using a <code>RequestDispatcher</code> ensure
        that <code>HttpServletRequest.getContextPath()</code> returns an encoded
        path in the dispatched request. (markt)
      </fix>
      <update>
        Add optional listeners for Server/Listener, as a slight variant of
        a standard listener. The difference is that loading is not fatal when
        it fails. This would allow adding example configuration to the standard
        server.xml if deemed useful. Storeconfig will not attempt to persist
        the new listener. (remm)
      </update>
      <fix>
        <bug>63286</bug>: Document the differences in behaviour between the
        <code>LogFormat</code> directive in httpd and the <code>pattern</code>
        attribute in the <code>AccessLogValve</code> for <code>%D</code> and
        <code>%T</code>. (markt)
      </fix>
      <fix>
        <bug>63287</bug>: Make logging levels more consistent for similar issues
        of similar severity. (markt)
      </fix>
      <fix>
        <bug>63311</bug>: Add support for https URLs to the local resolver within
        Tomcat used to resolve standard XML DTDs and schemas when Tomcat is
        configured to validate XML configuration files such as web.xml. (markt)
      </fix>
      <fix>
        Encode the output of the SSI <code>printenv</code> command. This is the
        fix for CVE-2019-0221. (markt)
      </fix>
      <scode>
        Use constants for SSI encoding values. (markt)
      </scode>
      <add>
        When the CGI Servlet is configured with
        <code>enableCmdLineArguments</code> set to true, limit the encoded form
        of the individual command line arguments to those values allowed by RFC
        3875. This restriction may be relaxed by the use of the new
        initialisation parameter <code>cmdLineArgumentsEncoded</code>. (markt)
      </add>
      <add>
        When the CGI Servlet is configured with
        <code>enableCmdLineArguments</code> set to true, limit the decoded form
        of the individual command line arguments to known safe values when
        running on Windows. This restriction may be relaxed by the use of the
        new initialisation parameter <code>cmdLineArgumentsDecoded</code>. This
        is the fix for CVE-2019-0232. (markt)
      </add>
    </changelog>
  </subsection>
  <subsection name="Coyote">
    <changelog>
      <fix>
        Fix bad interaction between NIO2 async read API and the regular read.
        (remm)
      </fix>
      <fix>
        Refactor NIO2 write pending strategy for the classic IO API. (remm)
      </fix>
      <fix>
        Restore original maxConnections default for NIO2 as the underlying
        close issues have been fixed. (remm)
      </fix>
      <fix>
        Harmonize NIO2 isReadyForWrite with isReadyForRead code. (remm)
      </fix>
      <fix>
        When using a JSSE TLS connector that supported ALPN (Java 9 onwards) and
        a protocol was not negotiated, Tomcat failed to fallback to HTTP/1.1 and
        instead dropped the connection. (markt)
      </fix>
      <fix>
        Correct a regression in the TLS connector refactoring in Tomcat 9.0.17
        that prevented the use of PKCS#8 private keys with OpenSSL based
        connectors. (markt)
      </fix>
      <fix>
        Fix NIO2 SSL edge cases. (remm)
      </fix>
      <fix>
        When performing an upgrade from HTTP/1.1 to HTTP/2, ensure that any
        query string present in the original HTTP/1.1 request is passed to the
        HTTP/2 request processing. (markt)
      </fix>
      <fix>
        When Tomcat writes a final response without reading all of an HTTP/2
        request, reset the stream to inform the client that the remaining
        request body is not required. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Jasper">
    <changelog>
      <add>
        Add support for specifying Java 11 (with the value <code>11</code>) as
        the compiler source and/or compiler target for JSP compilation. (markt)
      </add>
      <add>
        Add support for specifying Java 12 (with the value <code>12</code>) and
        Java 13 (with the value <code>13</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. Based on a patch by Thomas Collignon.
        (markt)
      </add>
    </changelog>
  </subsection>
  <subsection name="Web applications">
    <changelog>
      <fix>
        <bug>63184</bug>: Expand the SSI documentation to provide more
        information on the supported directives and their attributes. Patch
        provided by nightwatchcyber. (markt)
      </fix>
      <add>
        Add a note to the documentation about the risk of DoS with poorly
        written regular expressions and the <code>RewriteValve</code>. Patch
        provided by salgattas. (markt)
      </add>
    </changelog>
  </subsection>
  <subsection name="jdbc-pool">
    <changelog>
      <fix>
        Improved maxAge handling. Add support for age check on idle connections.
        Connection that expired reconnects rather than closes it. Patch provided
        by toby1984. (kfujino)
      </fix>
      <fix>
        <bug>63320</bug>: Ensure that <code>StatementCache</code> caches
        statements that include arrays in arguments. (kfujino)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Other">
    <changelog>
      <update>
        Update to the Eclipse JDT compiler 4.10. (markt)
      </update>
      <add>
        Expand the coverage and quality of the Spanish translations provided
        with Apache Tomcat. Includes contributions by Ulises Gonzalez Horta.
        (markt)
      </add>
      <add>
        Expand the coverage and quality of the Czech translations provided
        with Apache Tomcat. Includes contributions by Arnošt Havelka. (markt)
      </add>
      <add>
        Expand the coverage and quality of the Chinese translations provided
        with Apache Tomcat. Includes contributions by winsonzhao and wjt.
        (markt)
      </add>
      <add>
        Expand the coverage and quality of the Russian translations provided
        with Apache Tomcat. (kkolinko)
      </add>
      <add>
        Expand the coverage and quality of the Japanese translations provided
        with Apache Tomcat. (kfujino)
      </add>
      <add>
        Expand the coverage and quality of the Korean translations provided
        with Apache Tomcat. (woonsan)
      </add>
      <add>
        Expand the coverage and quality of the German translations provided
        with Apache Tomcat. (fschumacher)
      </add>
      <add>
        Expand the coverage and quality of the French translations provided
        with Apache Tomcat. (remm)
      </add>
    </changelog>
  </subsection>
</section>
<section name="Tomcat 9.0.17 (markt)" rtext="2019-03-18">
  <subsection name="Catalina">
    <changelog>
      <fix>
        Refactor how cookies are transferred from the base request to a
        <code>PushBuilder</code> so that they are accessible, and may be edited,
        via the standard <code>PushBuilder</code> methods for working with HTTP
        headers. (markt)
      </fix>
      <update>
        Simplify the value of <code>jarsToSkip</code> property in
        <code>catalina.properties</code> file for tomcat-i18n jar files.
        Use prefix pattern instead of listing each language. (kkolinko)
      </update>
      <fix>
        Restore the getter and setter for the access log valve attribute
        <code>maxLogMessageBufferSize</code> that were accidentally removed.
        (markt)
      </fix>
      <add>
        <bug>63206</bug>: Add a new attribute to <code>Context</code> -
        <code>createUploadTargets</code> which, if <code>true</code> enables
        Tomcat to create the temporary upload location used by a Servlet if the
        location specified by the Servlet does not already exist. The default
        value is <code>false</code>. (markt)
      </add>
      <fix>
        <bug>63210</bug>: Ensure that the Apache Commons DBCP 2 based default
        connection pool is correctly shutdown when it is no longer required.
        This ensures that a non-daemon thread is not left running that will
        prevent Tomcat from shutting down cleanly. (markt)
      </fix>
      <fix>
        <bug>63213</bug>: Ensure the correct escaping of group names when
        searching for nested groups when the JNDIRealm is configured with
        <code>roleNested</code> set to <code>true</code>. (markt)
      </fix>
      <fix>
        <bug>63236</bug>: Use <code>String.intern()</code> as suggested by
        Phillip Webb to reduce memory wasted due to String duplication. This
        changes saves ~245k when starting a clean installation. With additional
        thanks to YourKit Java profiler for helping to track down the wasted
        memory and the root causes. (markt)
      </fix>
      <fix>
        <bug>63246</bug>: Fix a potential <code>NullPointerException</code> when
        calling <code>AsyncContext.dispatch()</code>. (markt)
      </fix>
      <fix>
        Always use the absolute path of the <code>docBase</code> during the
        deployment process to determine the Context name, deployment type,
        whether the <code>docBase</code> is located within the
        <code>appBase</code> etc. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Coyote">
    <changelog>
      <fix>
        When performing an HTTP/1.1 upgrade to HTTP/2 (h2c) ensure that the hostname
        and port from the HTTP/1.1 Host header of the upgraded request are made
        available via the standard methods
        <code>ServletRequest.getServerName()</code> and
        <code>ServletRequest.getServerPort()</code>. (markt)
      </fix>
      <fix>
        Refactor the APR/Native endpoint TLS configuration code to enable JSSE
        style configuration - including JKS keystores - to be used with the
        APR/Native connector. (markt)
      </fix>
      <add>
        With the TLS configuration refactoring, the configuration attributes
        <code>sessionCacheSize</code> and <code>sessionTimeout</code> are no
        longer limited to JSSE implementations. They may now be used with
        OpenSSL implementations as well. (markt)
      </add>
      <fix>
        Refactor NIO2 read pending strategy for the classic IO API. (remm)
      </fix>
      <fix>
        <bug>63182</bug>: Avoid extra read notifications for HTTP/1.1 with
        NIO2 when using asynchronous threads. (remm)
      </fix>
      <add>
        <bug>63205</bug>: Add a work-around for a known
        <a href="https://bugs.openjdk.java.net/browse/JDK-8157404">JRE KeyStore
        loading bug</a>. (markt)
      </add>
      <fix>
        NIO2 should try to use SocketTimeoutException everywhere rather than a
        mix of it and InterruptedByTimeout. (remm)
      </fix>
      <fix>
        Correct an error in the request validation that meant that HTTP/2 push
        requests always resulted in a 400 response. (markt)
      </fix>
      <fix>
        <bug>63223</bug>: Correctly account for push requests when tracking
        currently active HTTP/2 streams. (markt)
      </fix>
      <fix>
        Ensure enough buffer space when using TLS with NIO2 by using the main
        read buffer to store additional decrypted data. (remm)
      </fix>
      <fix>
        Verify HTTP/2 stream is still writable before assuming a timeout
        occurred. (remm)
      </fix>
      <fix>
        Avoid some overflow cases with OpenSSL to improve efficiency, as the
        OpenSSL engine has an internal buffer. (remm)
      </fix>
      <fix>
        Harmonize HTTP/1.1 NIO2 keepalive code. (remm)
      </fix>
    </changelog>
  </subsection>
  <subsection name="WebSocket">
    <changelog>
      <scode>
        Remove the <code>STREAMS_DROP_EMPTY_MESSAGES</code> system property that
        was introduced to work-around four failing TCK tests. An alternative
        solution has been implemented. Sending messages via
        <code>getSendStream()</code> and <code>getSendWriter()</code> will now
        only result in messages on the wire if data is written to the
        <code>OutputStream</code> or <code>Writer</code>. Writing zero length
        data will result in an empty message. Note that sending a message via an
        <code>Encoder</code> may result in the message being send via
        <code>getSendStream()</code> or <code>getSendWriter()</code>. (markt)
      </scode>
    </changelog>
  </subsection>
  <subsection name="Web applications">
    <changelog>
      <fix>
        Fix messages used by Manager and Host Manager web applications.
        Disambiguate message keys used when adding or removing a host.
        Improve display of summary values on the status page: separate
        terms and values with a whitespace. Improve wording of messages
        for expire sessions command. (kkolinko)
      </fix>
      <fix>
        Do not add CSRF nonce parameter and suppress Referer header for external
        links in Manager and Host Manager web applications. (kkolinko)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Tribes">
    <changelog>
      <add>
        Add feature that discover local member from the static member list.
        (kfujino)
      </add>
      <fix>
        Ensure that members registered in the addSuspects list are static
        members. (kfujino)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Other">
    <changelog>
      <add>
        Expand the coverage and quality of the French translations provided
        with Apache Tomcat. (remm)
      </add>
      <fix>
        <bug>63041</bug>: Revert the changes for <bug>53930</bug> that added
        support for the <code>CATALINA_OUT_CMD</code> environment variable as
        they prevented correct operation with systemd configurations that did
        not explicitly specify a PID file. (markt)
      </fix>
      <add>
        Expand the coverage and quality of the Russian translations provided
        with Apache Tomcat. (kkolinko)
      </add>
      <fix>
        Fix the artifactId of <code>tomcat-i18n-cs</code>. (rjung)
      </fix>
      <add>
        Expand the coverage and quality of the Korean translations provided
        with Apache Tomcat. (woonsan)
      </add>
      <add>
        Expand the coverage and quality of the Chinese translations provided
        with Apache Tomcat. Includes contributions by winsonzhao. (markt)
      </add>
      <add>
        Expand the coverage and quality of the Czech translations provided
        with Apache Tomcat. Includes contributions by Arnošt Havelka. (markt)
      </add>
      <add>
        Expand the coverage and quality of the Spanish translations provided
        with Apache Tomcat. Includes contributions by Ulises Gonzalez Horta.
        (markt)
      </add>
    </changelog>
  </subsection>
</section>
<section name="Tomcat 9.0.16 (markt)" rtext="2019-02-08">
  <subsection name="Web applications">
    <changelog>
      <fix>
        Use client's preferred language for the Server Status page of the
        Manager web application. Review and fix several cases when the
        client's language preference was not respected in Manager and
        Host Manager web applications. (kkolinko)
      </fix>
      <fix>
        <bug>63141</bug>: Ensure that translated manager response strings still
        start with <code>OK -</code> where expected by the associated Ant tasks.
        (markt)
      </fix>
      <fix>
        <bug>63143</bug>: Ensure that the Manager web application respects the
        language preferences of the user as configured in the browser when the
        language of the default system locale is not English. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Tribes">
    <changelog>
      <fix>
        Remove unnecessary shutdown for executor. (kfujino)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Other">
    <changelog>
      <update>
        Update the NSIS Installer used to build the Windows installer to version
        3.04. (markt)
      </update>
      <add>
        Add Czech translations to Apache Tomcat. Includes contributions from
        Arnošt Havelka and Alice. (markt)
      </add>
      <add>
        Expand the coverage and quality of the Spanish translations provided
        with Apache Tomcat. Includes contributions from Ulises Gonzalez Horta.
        (markt)
      </add>
      <add>
        Expand the coverage and quality of the French translations provided
        with Apache Tomcat. (remm)
      </add>
      <add>
        Expand the coverage and quality of the Korean translations provided
        with Apache Tomcat. (woonsan)
      </add>
      <add>
        Expand the coverage and quality of the Japanese translations provided
        with Apache Tomcat. Includes contributions from Yujiorama. (markt)
      </add>
      <add>
        Expand the coverage and quality of the Chinese translations provided
        with Apache Tomcat. Includes contributions from zheng. (markt)
      </add>
      <add>
        Expand the coverage and quality of the Russian translations provided
        with Apache Tomcat. (kkolinko)
      </add>
    </changelog>
  </subsection>
</section>
<section name="Tomcat 9.0.15 (markt)" rtext="not released">
  <subsection name="Catalina">
    <changelog>
      <fix>
        <bug>54741</bug>: Add a new method,
        <code>Tomcat.addWebapp(String,URL)</code>, that allows a web application
        to be deployed from a URL when using Tomcat in embedded mode. (markt)
      </fix>
      <fix>
        <bug>63002</bug>: Fix setting rewrite qsdiscard flag. (remm)
      </fix>
      <fix>
        Implement the requirements of section 8.2.2 2c of the Servlet
        specification and prevent a web application from deploying if it has
        fragments with duplicate names and is configured to use relative
        ordering of fragments. (markt)
      </fix>
      <fix>
        Ensure that the HEAD response is consistent with the GET response when
        <code>HttpServlet</code> is relied upon to generate the HEAD response
        and the GET response uses chunking. (markt)
      </fix>
      <fix>
        Ensure that the <code>ServletOutputStream</code> implementation is
        consistent with the requirements of asynchronous I/O and that all of the
        write methods use a single write rather than multiple writes. (markt)
      </fix>
      <fix>
        Correct the Javadoc for <code>Context.getDocBase()</code> and
        <code>Context.setDocBase()</code> and remove text that indicates that a
        URL may be used for the <code>docBase</code> as this has not been the
        case for quite some time. (markt)
      </fix>
      <update>
        Add basic health check valve. (remm)
      </update>
      <fix>
        Correct a bug exposed in 9.0.14 and ensure that the Tomcat terminates in
        a timely manner when running as a service. (markt)
      </fix>
      <fix>
        Log a message when using a Connector that requires Apr without enabling
        the AprLifecycleListener first. (csutherl)
      </fix>
      <fix>
        Utility thread count for special negative or zero values will again be
        based on Runtime.getRuntime().availableProcessors(). (remm)
      </fix>
      <scode>
        Treat I/O errors during request body reads the same way as I/O errors
        during response body writes. The errors are treated as client side
        errors rather than server side errors and only logged at debug level.
        (markt)
      </scode>
      <fix>
        <bug>63038</bug>: Ensure that a <code>ClassNotFoundException</code> is
        thrown when attempting to load a class from a corrupted JAR file.
        (markt)
      </fix>
      <fix>
        <bug>63078</bug>: Ensure the utility thread pool is at least two, as the
        deployer uses a blocking pattern. (remm, markt)
      </fix>
      <add>
        Make the removal of leading and trailing whitespace from credentials
        passed to BASIC authentication configurable via a new attribute,
        <code>trimCredentials</code> on the <code>BasicAuthenticator</code>.
        (markt)
      </add>
      <fix>
        <bug>63003</bug>: Extend the <code>unloadDelay</code> attribute on a
        <code>Context</code> to include in-flight asynchronous requests. (markt)
      </fix>
      <add>
        <bug>63026</bug>: Add a new attribute, <code>forceDnHexEscape</code>, to
        the <code>JNDIRealm</code> that forces escaping in the String
        representation of a distinguished name to use the <code>\nn</code> form.
        This may avoid issues with realms using Active Directory which appears
        to be more tolerant of optional escaping when the <code>\nn</code> form
        is used. (markt)
      </add>
      <fix>
        Avoid a swallowed (and therefore ignored) access failure during web
        application class loading when running under a
        <code>SecurityManager</code>. (markt)
      </fix>
      <update>
        Add SSL configuration options to the JMX remote listener using the
        <code>SSLHostConfig</code> framework. (remm)
      </update>
      <update>
        Update the recommended minimum Tomcat Native version to 1.2.21. (markt)
      </update>
      <fix>
        <bug>63137</bug>: If the resources for a web application have been
        configured with multiple locations mapped to
        <code>/WEB-INF/classes</code>, ensure that all of those locations are
        used when building the web application class path. Patch provided by
        Marcin Gołębski. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Coyote">
    <changelog>
      <add>
        <bug>63009</bug>: Include the optional <code>content-length</code>
        header in HTTP/2 responses where an appropriate value is available.
        (markt)
      </add>
      <fix>
        <bug>63022</bug>: Do not use the socket open state when using the
        wrapper isClosed method for NIO and NIO2, as it will disable all
        further processing. (remm)
      </fix>
      <fix>
        Fix socket close discrepancies for NIO2, now the wrapper close
        is used everywhere except for socket accept problems. (remm)
      </fix>
      <fix>
        Fix use of write timeout instead of read timeout for HTTP/2 NIO2
        frame read. (remm)
      </fix>
      <fix>
        Fix incorrect APR sendfile thread stop. (remm)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Jasper">
    <changelog>
      <fix>
        <bug>63056</bug>: Correct a regression in the fix for <bug>53737</bug>
        that did not correctly scan the web application directory structure for
        JSPs. (markt)
      </fix>
      <fix>
        Update the performance optimisation for using expressions in tags that
        depend on uninitialised tag attributes with implied scope to make the
        performance optimisation aware of the new public class
        (<code>java.lang.Enum$EnumDesc</code>) added in Java 12. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="WebSocket">
    <changelog>
      <fix>
        <bug>57974</bug>: Ensure implementation of
        <code>Session.getOpenSessions()</code> returns correct value for both
        client-side and server-side calls. (markt)
      </fix>
      <fix>
        <bug>63019</bug>: Use payload remaining bytes rather than limit when
        writing. Submitted by Benoit Courtilly. (remm)
      </fix>
      <fix>
        When running under a <code>SecurityManager</code>, ensure that the
        <code>ServiceLoader</code> look-up for the default
        <code>javax.websocket.server.ServerEndpointConfig.Configurator</code>
        implementation completes correctly rather than silently using the
        hard-coded fall-back. (markt)
      </fix>
      <fix>
        Ensure that the network connection is closed if the client receives an
        I/O error trying to communicate with the server. (markt)
      </fix>
      <fix>
        Ignore synthetic methods when scanning POJO methods. (markt)
      </fix>
      <fix>
        Implement the requirements of section 5.2.1 of the WebSocket 1.1
        specification and ensure that if the deployment of one Endpoint fails,
        no Endpoints are deployed for that web application. (markt)
      </fix>
      <fix>
        Implement the requirements of section 4.3 of the WebSocket 1.1
        specification and ensure that the deployment of an Endpoint fails if
        <code>@PathParam</code> is used with an invalid parameter type. (markt)
      </fix>
      <fix>
        Ensure a <code>DeploymentException</code> rather than an
        <code>IllegalArgumentException</code> is thrown if a method annotated
        with <code>@OnMessage</code> does not conform to the requirements set
        out in the Javadoc. (markt)
      </fix>
      <fix>
        Improve algorithm that determines if two <code>@OnMessage</code>
        annotations have been added for the same message type. Prior to this
        change some matches were missed. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Web applications">
    <changelog>
      <fix>
        <bug>63103</bug>: Remove the unused source.jsp file and associated tag
        from the examples web application as it is no longer used. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Tribes">
    <changelog>
      <update>
        Add dns-ping support to enumerate cluster members. This is much simpler
        than getting the pod list but it does not indicate pod status.
        Submitted by Maxime Beck. (remm)
      </update>
      <fix>
        Never expire the local member from a Membership. (remm)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Other">
    <changelog>
      <update>
        Update container image with monitoring contraptions. (remm)
      </update>
      <add>
        Expand the coverage and quality of the Korean translations provided with
        Apache Tomcat. Includes contributions from woonsan and Chris Cho.
        (markt)
      </add>
      <add>
        Expand the coverage and quality of the Japanese translations provided
        with Apache Tomcat. Includes contributions from kfujino, Yujiorama and
        motohashi.yuki. (markt)
      </add>
      <add>
        Expand the coverage and quality of the French translations provided with
        Apache Tomcat. Includes contributions from remm, Ludovic Pénet and
        evernat. (markt)
      </add>
      <add>
        Expand the coverage and quality of the German translations provided
        with Apache Tomcat. Includes contributions from fschumacher, Stefan and
        burghard. (markt)
      </add>
      <add>
        Expand the coverage and quality of the Chinese (simplified) translations
        provided with Apache Tomcat. Includes contributions from winsonzhao,
        Lanranzi, shawn, Winsonzhoa, JinXiqian, RichardHo, qingshi huang,
        Greenman0007, Jim Ma, huxing, 袁宇杰 and evernat. (markt)
      </add>
      <add>
        Expand the coverage and quality of the Spanish translations provided
        with Apache Tomcat. Includes contributions from Ulises Gonzalez Horta,
        Israel, Eduardo Quintanilla and Miguel Ortega. (markt)
      </add>
      <add>
        Expand the coverage and quality of the Russian translations provided
        with Apache Tomcat. Includes contributions from Andrei Maiseyenka and
        solomax. (markt)
      </add>
      <add>
        Expand the coverage and quality of the Brazilian Portuguese translations
        provided with Apache Tomcat. Includes contributions from Victor Caetano
        and Dabilo. (markt)
      </add>
      <fix>
        <bug>63041</bug>: Correct a regression in the fix for <bug>53930</bug>
        that prevented Tomcat from working correctly with systemd. Patch
        provided by Patrik S. (markt)
      </fix>
      <update>
        <fix>63072</fix>: Remove extras (JMX remote listener and webservices
        object factories) and merge them back into the core build.
        (remm)
      </update>
      <add>
        Update the internal fork of Apache Commons FileUpload to pick up the
        changes in the Apache Commons FileUpload 1.4 release. (markt)
      </add>
      <update>
        Update the internal fork of Apache Commons DBCP 2 to de20b77
        (2019-01-29) to pick up some bug fixes and enhancements. (markt)
      </update>
      <update>
        Update the packaged version of the Tomcat Native Library to 1.2.21 to
        pick up the memory leak fixes when using NIO/NIO2 with OpenSSL. (markt)
      </update>
    </changelog>
  </subsection>
</section>
<section name="Tomcat 9.0.14 (markt)" rtext="2018-12-12">
  <subsection name="Catalina">
    <changelog>
      <fix>
        <bug>62788</bug>: Add explicit logging configuration to write log files
        using UTF-8 to align with Tomcat&apos;s use of UTF-8 by default
        elsewhere. (markt)
      </fix>
      <fix>
        The default Servlet should not override a previously set content-type.
        (remm)
      </fix>
      <fix>
        Fix storeconfig for the cluster encryption interceptor key attribute.
        (remm)
      </fix>
      <add>
        Add a scheduled executor to the Server, which can be used to
        process periodic utility tasks. The utility threads are non daemon
        by default. (remm)
      </add>
      <update>
        Refactor container background processor using the Server executor, and
        add monitoring to reschedule it in case of an unexpected error. (remm)
      </update>
      <update>
        Refactor parallel deployment threads using the Server executor. (remm)
      </update>
      <add>
        Introduce a ConfigurationSource API to standardize access to the core
        configuration resources of Tomcat. (remm)
      </add>
      <update>
        Update the Tomcat embedded API by allowing to set a configuration
        source, which will allow processing of core configuration. (remm)
      </update>
      <update>
        Refactor processing of server.xml, web.xml, context.xml, other
        configuration files and resources using the ConfigurationSource API.
        JASPIC persistent providers load and store remains file based.
        StoreConfig Tomcat configuration files storing remains file based
        at their previous default locations. (remm)
      </update>
      <add>
        <bug>62897</bug>: Provide a property
        (<code>clearReferencesThreadLocals</code>) on the standard
        <code>Context</code> implementation that enables the check for memory
        leaks via <code>ThreadLocal</code>s to be disabled because this check
        depends on the use of an API that has been deprecated in later versions
        of Java. (markt)
      </add>
      <fix>
        Fix more storeconfig issues with duplicated SSL attributes. (remm)
      </fix>
      <fix>
        <bug>62924</bug>: Fix file descriptor leak introduced in the code that
        monitors <code>tomcat-users.xml</code> for modifications. (markt)
      </fix>
      <update>
        Add periodic event notification for lifecycle listeners configured on
        the Server. (remm)
      </update>
      <fix>
        <bug>62968</bug>: Avoid unnecessary (and relatively expensive)
        <code>getResources()</code> call in the Mapper when processing rule 7.
        (markt)
      </fix>
      <update>
        Update the recommended minimum Tomcat Native version to 1.2.19. (markt)
      </update>
      <fix>
        <bug>62978</bug>: Update the RemoteIpValve to handle multiple values in
        the <code>x-forwarded-proto</code> header. Patch provided by Tom Groot.
        (markt)
      </fix>
      <fix>
        Update the RemoteIpFilter to handle multiple values in the
        <code>x-forwarded-proto</code> header. Based on a patch provided by Tom
        Groot. (markt)
      </fix>
      <scode>
        <bug>62986</bug>: Refactor the code that performs class scanning during
        web application start to make integration simpler for downstream users.
        Patch provided by rmannibucau. (markt)
      </scode>
      <fix>
        Filter out tomcat-web.xml from the watched resources list in
        storeconfig. (remm)
      </fix>
      <fix>
        <bug>62988</bug>: Fix the <code>LoadBalancerDrainingValve</code> so it
        works when the session cookie configuration is not explicitly declared.
        Based on a patch provided by Andreas Kurth. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Coyote">
    <changelog>
      <update>
        Refactor connector async timeout threads using a scheduled executor.
        (remm)
      </update>
      <update>
        Avoid using a dedicated thread for accept on the NIO2 connector, it is
        always less efficient. (remm)
      </update>
      <update>
        Load SSL configuration resources for JSSE using the ConfigurationSource
        API. OpenSSL use requires actual files. (remm)
      </update>
      <fix>
        <bug>62899</bug>: Prevent the incorrect timing out of connections when
        Servlet non-blocking I/O is used to read a request body over an HTTP/2
        stream. (markt)
      </fix>
      <fix>
        Avoid bad SSLHostConfig JMX registrations before init. (remm)
      </fix>
      <fix>
        Avoid a potential hang when a client connects using TLS 1.0 to a Tomcat
        HTTPS connector configured to use NIO or NIO2 with OpenSSL 1.1.1 or
        later. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Jasper">
    <changelog>
      <update>
        Update the Eclipse Compiler for Java to 4.9. Additional patch by Lukasz
        Jader. (markt)
      </update>
      <add>
        <bug>53737</bug>: Extend JspC, the precompilation tool, to include
        support for resource JARs. (markt)
      </add>
      <fix>
        <bug>62976</bug>: Avoid an <code>IllegalStateException</code> when using
        background compilation when tag files are packaged in JAR files. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Web applications">
    <changelog>
      <add>
        <bug>53553</bug>: Add the ability to specify a context.xml from the
        server to use when uploading a web application for deployment with the
        Manager web application. Patch provided by Anton Lindström. (markt)
      </add>
      <fix>
        <bug>62918</bug>: Filter out subtype mbeans to avoid breaking the
        connector status page. (remm)
      </fix>
      <fix>
        Unify letter case of the word 'How-To' in the webapps (csutherl)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Tribes">
    <changelog>
      <update>
        Refactor various operations performed in tribes using a scheduled
        executor. When tribes is not running standalone, it will use the
        executor from the Catalina Server. If running independently, the
        Channel will provide the executor. (remm)
      </update>
      <fix>
        Make EncryptInterceptor thread-safe. This makes this interceptor
        actually usable. (schultz/markt)
      </fix>
      <add>
        Add support for GCM mode to EncryptInterceptor. (schultz)
      </add>
    </changelog>
  </subsection>
  <subsection name="Other">
    <changelog>
      <fix>
        Prevent an error when running in a Cygwin shell and the
        <code>JAVA_ENDORSED_DIRS</code> system property is empty. Patch provided
        by Zemian Deng. (markt)
      </fix>
      <add>
        Expand the coverage and quality of the French translations provided with
        Apache Tomcat. Includes contributions from remm, soliplaya, Ludovic
        Pénet, David, NicolasG and bdelacretaz. (markt)
      </add>
      <add>
        Add Simplified Chinese translations to the translations to Apache
        Tomcat. Includes contributions from Darren Luo, syseal, Winsonzhao,
        袁宇杰, Lanranzi, ZhangJieWen, Jerry, yinzhili001, 安柏诚, shawn, lavender,
        Zheng Feng, zengwc, RichardHo, mm, gingshi huang, Bob, geekwang, zheng,
        Deanzhg, Tianfengjingjing, Panblack, oking, Dave Newman, Cnfnss, Jim Ma,
        852394875, huxing and Greenman0007. (markt)
      </add>
      <add>
        Add Korean translations to Apache Tomcat. Includes contributions from
        woonsan, JunSang Park, song choe and OhChan. (markt)
      </add>
      <add>
        Expand the coverage and quality of the Spanish translations provided
        with Apache Tomcat. Includes contributions from Ulises Gonzalez Horta,
        Israel, Eduardo Quintanilla and Miguel suarez. (markt)
      </add>
      <add>
        Expand the coverage and quality of the Russian translations provided
        with Apache Tomcat. Includes contributions from solomax, Rafael Sachakov
        and Andrei Maiseyenka. (markt)
      </add>
      <add>
        Expand the coverage and quality of the German translations provided
        with Apache Tomcat. Includes contributions from Matk80, burghard,
        Daniel Wehringer and Felix Schumacher. (markt)
      </add>
      <add>
        Expand the coverage and quality of the Japanese translations provided
        with Apache Tomcat. Includes contributions from Yujiorama,
        motohashi.yuki and kfujino. (markt)
      </add>
      <add>
        Add Brazilian Portuguese translations to Apache Tomcat. Includes
        contributions from geraldo netto. (markt)
      </add>
      <fix>
        Include Brazilian Portuguese translations in the standard Tomcat
        distribution. (markt)
      </fix>
      <fix>
        Include Simplified Chinese translations in the standard Tomcat
        distribution. (markt)
      </fix>
      <fix>
        Include Korean translations in the standard Tomcat distribution. (markt)
      </fix>
      <add>
        Add a packaging method for Tomcat using Maven, as well as a container
        build file for it. (remm)
      </add>
      <fix>
        Add XML Namespace to the project element of all POM files so that the
        XML files are Well Formed and Valid. (csutherl)
      </fix>
      <add>
        <bug>53930</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 Casey Lucas. (markt)
      </add>
      <update>
        Update the packaged version of the Tomcat Native Library to 1.2.19 to
        pick up the latest Windows binaries built with APR 1.6.5 and OpenSSL
        1.1.1a. (markt)
      </update>
      <update>
        Add i18n to many strings that lacked it. (remm)
      </update>
    </changelog>
  </subsection>
</section>
<section name="Tomcat 9.0.13 (markt)" rtext="2018-11-07">
  <subsection name="Catalina">
    <changelog>
      <add>
        <bug>58590</bug>: Add the ability for a UserDatabase to monitor the
        backing XML file for changes and reload the source file if a change in
        the last modified time is detected. This is enabled by default meaning
        that changes to <code>$CATALINA_BASE/conf/tomcat-users.xml</code> will
        now take effect a short time after the file is saved. (markt)
      </add>
      <add>
        <bug>61171</bug>: Add the <code>portOffset</code> attribute to the
        <code>Server</code> element which is added to the configured shutdown
        and <code>Connector</code> ports. Based on a patch by Marek Czernek.
        (markt)
      </add>
      <add>
        <bug>61692</bug>: Add the ability to control which HTTP methods are
        handled by the CGI Servlet via a new initialization parameter
        <code>cgiMethods</code>. (markt)
      </add>
      <fix>
        <bug>62687</bug>: Expose content length information for resources
        when using a compressed war. (remm)
      </fix>
      <fix>
        <bug>62737</bug>: Fix rewrite substitutions parsing of {} nesting.
        (remm)
      </fix>
      <fix>
        Add rewrite flags output when getting the rewrite configuration back.
        (remm)
      </fix>
      <fix>
        Add missing qsdiscard flag to the rewrite flags as a cleaner way to
        discard the query string. (remm)
      </fix>
      <add>
        <bug>62755</bug>: Add ability to opt out of adding the default web.xml
        config when embedding Tomcat and adding a context via
        <code>addWebapp()</code>. Call
        <code>setAddDefaultWebXmlToWebapp(false)</code> to prevent the automatic
        config. (isapir)
      </add>
      <fix>
        Add documentation about the files <code>context.xml.default</code> and
        <code>web.xml.default</code> that can be used to customize
        <code>conf/context.xml</code> and <code>conf/web.xml</code> on a per
        host basis. (fschumacher)
      </fix>
      <fix>
        Ensure that a canonical path is always used for the docBase of a Context
        to ensure consistent behaviour. (markt)
      </fix>
      <fix>
        <bug>62803</bug>: Fix SSL connector configuration processing
        in storeconfig. (remm)
      </fix>
      <fix>
        <bug>62797</bug>: Pass throwable to keep client aborts with status 200
        rather than 500. Patch submitted by zikfat. (remm)
      </fix>
      <fix>
        <bug>62802</bug>: Restore the <code>appContextProtection</code>
        attribute to the <code>JreMemoryLeakPreventionListener</code> as
        application code may still trigger this memory leak. (markt)
      </fix>
      <fix>
        <bug>62809</bug>: Correct a regression in the implementation of DIGEST
        authentication support for the Deployer Ant tasks (bug <bug>45832</bug>)
        that prevented the <code>DeployTask</code> from working when
        authentication was required. (markt)
      </fix>
      <update>
        Update the recommended minimum Tomcat Native version to 1.2.18. (markt)
      </update>
      <add>
        Ignore an attribute named <code>source</code> on <code>Context</code>
        elements provided by <code>StandardContext</code>. This is to suppress
        warnings generated by the Eclipse / Tomcat integration provided by
        Eclipse. Based on a patch by mdfst13. (markt)
      </add>
      <add>
        <bug>62830</bug>: Added <code>JniLifeCycleListener</code> and static
        methods <code>Library.loadLibrary(libraryName)</code> and
        <code>Library.load(filename)</code> to load a native library by a
        shared class loader so that more than one Webapp can use it. (isapir)
      </add>
      <scode>
        Refactor the <code>Connector</code> so that the port is obtained from
        the <code>Endpoint</code> rather than a local field that could end up
        out of sync. (markt)
      </scode>
      <fix>
        Correct a typo in the Spanish resource files. Patch provided by Diego
        Agulló. (markt)
      </fix>
      <fix>
        <bug>62868</bug>: Order the <code>Enumeration&lt;URL&gt;</code> provided
        by <code>WebappClassLoaderBase.getResources(String)</code> according to
        the setting of the delegate flag. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Coyote">
    <changelog>
      <add>
        Add TLSv1.3 to the default protocols and to the <code>all</code>
        alias for JSSE based TLS connectors when running on a JVM that
        supports TLS version 1.3. One such JVM is OpenJDK version 11. (rjung)
      </add>
      <fix>
        <bug>62685</bug>: Correct an error in host name validation parsing that
        did not allow a fully qualified domain name to terminate with a period.
        Patch provided by AG. (markt)
      </fix>
      <fix>
        Make PEM file parser a public utility class. (remm)
      </fix>
      <fix>
        <bug>62739</bug>: Do not reject requests with an empty HTTP Host header.
        Such requests are unusual but not invalid. Patch provided by Michael
        Orr. (markt)
      </fix>
      <add>
        <bug>62748</bug>: Add TLS 1.3 support for the APR/Native connector and
        the NIO/NIO2 connector when using the OpenSSL backed JSSE
        implementation. (schultz/markt)
      </add>
      <fix>
        <bug>62791</bug>: Remove an unnecessary check in the NIO TLS
        implementation that prevented from secure WebSocket connections from
        being established. (markt)
      </fix>
      <fix>
        Fix server initiated TLS renegotiation to obtain a client certificate
        when using NIO/NIO2 and the OpenSSL backed JSSE TLS implementation.
        (markt)
      </fix>
      <fix>
        Ensure open sockets etc. are cleaned up if the socket binding process
        fails. (markt)
      </fix>
      <fix>
        <bug>62871</bug>: Improve MBeans for Endpoint instances (type
        <code>ThreadPool</code> in JMX) by using explicit declaration of
        attributes and operations rather than relying on introspection. Add a
        new MBean to expose the <code>Socketproperties</code> values. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Jasper">
    <changelog>
      <fix>
        Correct parsing of XML whitespace in TLD function signatures that
        incorrectly only looked for the space character. (markt)
      </fix>
      <fix>
        <bug>62674</bug>: Correct a regression in the stand-alone JSP compiler
        utility, <code>JspC</code>, caused by the fix for <bug>53492</bug>, that
        caused the JSP compiler to hang. (markt)
      </fix>
      <fix>
        <bug>62721</bug>: Correct generation of web.xml header when using JspC.
        (markt)
      </fix>
      <fix>
        <bug>62757</bug>: Correct a regression in the fix for <bug>62603</bug>
        that caused <code>NullPointerException</code>s when compiling tag files
        on first access when development mode was disabled and background
        compilation was enabled. Based on a patch by Jordi Llach. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="WebSocket">
    <changelog>
      <fix>
        <bug>62731</bug>: Make the URI returned by
        <code>HandshakeRequest.getRequestURI()</code> and
        <code>Session.getRequestURI()</code> absolute so that the scheme, host
        and port are accessible. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Web applications">
    <changelog>
      <fix>
        <bug>62676</bug>: Expand the CORS filter documentation to make it clear
        that explicit configuration is required to enable support for
        cross-origin requests. (markt)
      </fix>
      <fix>
        <bug>62712</bug>: Correct NPE in Manager application when attempting to
        view configured certificates for an APR/native TLS connector. (markt)
      </fix>
      <fix>
        <bug>62761</bug>: Correct the advanced CORS example in the Filter
        documentation to use a valid configuration. (markt)
      </fix>
      <fix>
        <bug>62786</bug>: Add a note to the Context documentation to explain
        that, by default, settings for a Context element defined in server.xml
        will be overwritten by settings specified in a default context file such
        as <code>conf/context.xml</code>. (markt)
      </fix>
      <fix>
        Create a little visual separation between the Undeploy button and the
        other buttons in the Manager application. Patch provided by Łukasz
        Jąder. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Tribes">
    <changelog>
      <add>
        Add <code>setMembershipService</code> method to the
        <code>MembershipProvider</code>. (kfujino)
      </add>
      <add>
        Experimental Kubernetes aware cloud membership provider, based on code
        by Maxime Beck. Contains code derived from jgroups. (remm/kfujino)
      </add>
      <fix>
        Move the event notification <code>ThreadPoolExecutor</code> to
        <code>MembershipProviderBase</code>. (kfujino)
      </fix>
      <fix>
        Even if all members have already disappeared and PING can not be sent,
        ensure that members will be expired. (kfujino)
      </fix>
      <fix>
        Ensure that remove the member from suspect list when member added.
        (kfujino)
      </fix>
      <add>
        Add EncryptInterceptor to the portfolio of available clustering
        interceptors. This adds symmetric encryption of session data
        to Tomcat clustering regardless of the type of cluster manager
        or membership being used. (schultz)
      </add>
    </changelog>
  </subsection>
  <subsection name="Other">
    <changelog>
      <fix>
        Port DBCP transaction synchronization registry fix
        (commit d49d45e). (remm)
      </fix>
      <update>
        Update the internal fork of Apache Commons Pool 2 to d4e0e88
        (2018-09-12) to pick up some bug fixes and enhancements. (markt)
      </update>
      <add>
        <bug>62705</bug>: Added a fail fast check for minimum required Apache
        Ant version 1.9.8 when building Tomcat. (isapir)
      </add>
      <add>
        Added ant target ide-intellij to create an IntelliJ IDEA project. (isapir)
      </add>
      <add>
        Utility JSON parser generated from a public domain javacc grammar
        written by Robert Fischer. (remm)
      </add>
      <update>
        Update the packaged version of the Tomcat Native Library to 1.2.18 to
        pick up the latest Windows binaries built with APR 1.6.5 and OpenSSL
        1.1.1. (markt)
      </update>
    </changelog>
  </subsection>
</section>
<section name="Tomcat 9.0.12 (markt)" rtext="2018-09-10">
  <subsection name="Catalina">
    <changelog>
      <fix>
        Improve the handling of path parameters when working with
        RequestDispatcher objects. (markt)
      </fix>
      <fix>
        <bug>62664</bug>: Process requests with content type
        <code>multipart/form-data</code> to servlets with a
        <code>@MultipartConfig</code> annotation regardless of HTTP method.
        (markt)
      </fix>
      <fix>
        <bug>62667</bug>: Add recursion to rewrite substitution parsing. (remm)
      </fix>
      <fix>
        <bug>62669</bug>: When using the SSIFilter and a resource does not
        specify a content type, do not force the content type to
        <code>application/x-octet-stream</code>. (markt)
      </fix>
      <fix>
        <bug>62670</bug>: Adjust the memory leak protection for the
        <code>DriverManager</code> so that JDBC drivers located in
        <code>$CATALINA_HOME/lib</code> and <code>$CATALINA_BASE/lib</code> are
        loaded via the service loader mechanism when the protection is enabled.
        (markt)
      </fix>
      <fix>
        When generating a redirect to a directory in the Default Servlet, avoid
        generating a protocol relative redirect. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Coyote">
    <changelog>
      <fix>
        Fix potential deadlocks when using asynchronous Servlet processing with
        HTTP/2 connectors. (markt)
      </fix>
      <fix>
        <bug>62620</bug>: Fix corruption of response bodies when writing large
        bodies using asynchronous processing over HTTP/2. (markt)
      </fix>
      <fix>
        <bug>62628</bug>: Additional fixes for output corruption of response
        bodies when writing large bodies using asynchronous processing over
        HTTP/2. (markt)
      </fix>
      <scode>
        Support for Netware in the <code>org.apache.tomcat.jni</code> package
        has been removed as there has not been a supported Netware platform for
        a number of years. (markt)
      </scode>
    </changelog>
  </subsection>
  <subsection name="Jasper">
    <changelog>
      <fix>
        Correct the JSP version in the X-PoweredBy HTTP header generated when
        the xpoweredBy option is enabled. (markt)
      </fix>
      <fix>
        <bug>62662</bug>: Fix the corruption of web.xml output during JSP
        compilation caused by the fix for <bug>53492</bug>. Patch provided by
        Bernhard Frauendienst. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Web applications">
    <changelog>
      <add>
        Expand the information in the documentation web application regarding
        the use of <code>CATALINA_HOME</code> and <code>CATALINA_BASE</code>.
        Patch provided by Marek Czernek. (markt)
      </add>
      <fix>
        <bug>62652</bug>: Make it clearer that the version of DBCP that is
        packaged in Tomcat 9.0.x is DBCP 2. Correct the names of some DBCP 2
        configuration attributes that changed between 1.x and 2.x. (markt)
      </fix>
      <add>
        <bug>62666</bug>: Expand internationalisation support in the Manager
        application to include the server status page and provide Russian
        translations in addition to English. Patch provided by Artem Chebykin.
        (markt)
      </add>
    </changelog>
  </subsection>
  <subsection name="Other">
    <changelog>
      <fix>
        Switch the build script to use http for downloads from an ASF mirror
        using the closer.lua script to avoid failures due to HTTPS to HTTP
        redirects. (rjung)
      </fix>
    </changelog>
  </subsection>
</section>
<section name="Tomcat 9.0.11 (markt)" rtext="2018-08-17">
  <subsection name="Catalina">
    <changelog>
      <add>
        Make the <code>isLocked()</code> method of the <code>LockOutRealm</code>
        public and expose the method via JMX. (markt)
      </add>
      <add>
        <bug>53387</bug>: Add support for regular expression capture groups to
        the SSI servlet and filter. (markt)
      </add>
      <fix>
        <bug>53411</bug>: Improve the handling of HTTP requests that do not
        explicitly specify a host name when no default host is configured. Also
        improve the tracking of changes to the default host as hosts are added
        and removed while Tomcat is running. (markt)
      </fix>
      <fix>
        Ensure that the HTTP Vary header is set correctly when using the CORS
        filter and improve the cacheability of requests that pass through the
        COPRS filter. (markt)
      </fix>
      <fix>
        <bug>62527</bug>: Revert restriction of JNDI to the <code>java:</code>
        namespace. (remm)
      </fix>
      <add>
        Introduce a new class - <code>MultiThrowable</code> - to report
        exceptions when multiple actions are taken where each action may throw
        an exception but all actions are taken before any errors are reported.
        Use this new class when reporting multiple container (e.g. web
        application) failures during start. (markt)
      </add>
      <fix>
        Correctly decode URL paths (<code>+</code> should not be decoded to a
        space in the path) in the <code>RequestDispatcher</code> and the web
        application class loader. (markt)
      </fix>
      <add>
        Make logout more robust if JASPIC subject is unexpectedly unavailable.
        (markt)
      </add>
      <fix>
        <bug>62547</bug>: JASPIC <code>cleanSubject()</code> was not called on
        logout when the authenticator was configured to cache the authenticated
        Principal. Patch provided by Guillermo González de Agüero. (markt)
      </fix>
      <add>
        <bug>62559</bug>: Add <code>jaxb-*.jar</code> to the list of JARs
        ignored by <code>StandardJarScanner</code>. (markt)
      </add>
      <add>
        <bug>62560</bug>: Add <code>oraclepki.jar</code> to the list of JARs
        ignored by <code>StandardJarScanner</code>. (markt)
      </add>
      <add>
        <bug>62607</bug>: Return a non-zero exit code from
        <code>catalina.[bat|sh] run</code> if Tomcat fails to start. (markt)
      </add>
      <fix>
        Use short circuit logic to prevent potential NPE in CorsFilter. (fschumacher)
      </fix>
      <scode>
        Simplify construction of appName from container name in JAASRealm. (fschumacher)
      </scode>
      <scode>
        Remove <code>ServletException</code> from declaration of
        <code>Tomcat.addWebapp(String,String)</code> since it is never thrown.
        Patch provided by Tzafrir. (markt)
      </scode>
    </changelog>
  </subsection>
  <subsection name="Coyote">
    <changelog>
      <scode>
        Refactor HTTP date creation and parsing to reduce code duplication,
        reduce the use of ThreadLocals and to increase the use of caching.
        (markt)
      </scode>
      <fix>
        <bug>56676</bug>: Add a default location for the native library, as
        ${catalina.home}/bin, which the testsuite already uses. (remm)
      </fix>
      <update>
        <bug>60560</bug>: Add support for using an inherited channel to
        the NIO connector. Based on a patch submitted by Thomas Meyer with
        testing and suggestions by Coty Sutherland. (remm)
      </update>
      <fix>
        <bug>62507</bug>: Ensure that JSSE based TLS connectors work correctly
        with a DKS keystore. (markt)
      </fix>
      <fix>
        Refactor code that adds an additional header name to the
        <code>Vary</code> HTTP response header to use a common utility method
        that addresses several additional edge cases. (markt)
      </fix>
      <fix>
        <bug>62515</bug>: When a connector is configured (via setting
        <code>bindOnInit</code> to <code>false</code>) to bind/unbind the server
        socket during start/stop, close the socket earlier in the stop process
        so new connections do not sit in the TCP backlog during the shutdown
        process only to be dropped as stop completes. In this scenario new
        connections will now be refused immediately. (markt)
      </fix>
      <fix>
        <bug>62526</bug>: Correctly handle PKCS12 format key stores when the key
        store password is configured to be the empty string. (markt)
      </fix>
      <fix>
        <bug>62605</bug>: Ensure <code>ReadListener.onDataAvailable()</code> is
        called when the initial request body data arrives after the request
        headers when using asynchronous processing over HTTP/2. (markt)
      </fix>
      <fix>
        <bug>62614</bug>: Ensure that
        <code>WriteListener.onWritePossible()</code> is called after
        <code>isReady()</code> returns <code>false</code> and the window size is
        subsequently incremented when using asynchronous processing over HTTP/2.
        (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Jasper">
    <changelog>
      <add>
        <bug>53492</bug>: Make the Java file generation process multi-threaded.
        By default, one thread will be used per core. Based on a patch by Dan
        Fabulich. (markt)
      </add>
      <add>
        <bug>62453</bug>: Add a performance optimisation for using expressions
        in tags that depend on uninitialised tag attributes with implied scope.
        Generally, using an explicit scope with tag attributes in EL is the best
        way to avoid various potential performance issues. (markt)
      </add>
      <fix>
        Correctly decode URL paths (<code>+</code> should not be decoded to a
        space in the path) in the Jasper class loader. (markt)
      </fix>
      <fix>
        <bug>62603</bug>: Fix a potential race condition when development mode
        is disabled and background compilation checks are enabled. It was
        possible that some updates would not take effect and/or
        <code>ClassNotFoundException</code>s would occur. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="WebSocket">
    <changelog>
      <fix>
        <bug>62596</bug>: Remove the limit on the size of the initial HTTP
        upgrade request used to establish the web socket connection. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Web applications">
    <changelog>
      <add>
        <bug>62558</bug>: Add Russian translations for the Manager and Host
        Manager web applications. Based on a patch by Ivan Krasnov. (markt)
      </add>
      <add>
        Add documents for Static Membership service. (kfujino)
      </add>
      <add>
        <bug>62561</bug>: Add advanced class loader configuration information
        regarding the use of the Server and Shared class loaders to the
        documentation web application. (markt)
      </add>
    </changelog>
  </subsection>
  <subsection name="Tribes">
    <changelog>
      <fix>
        Ensures that the specified <code>rxBufSize</code> is correctly set to
        receiver buffer size. (kfujino)
      </fix>
      <fix>
        Correct the stop order of the Channel components. It stops in the
        reverse order to that at startup. (kfujino)
      </fix>
      <add>
        Added new StaticMembership implementation. This implementation does not
        require any additional configuration of other
        <code>ChannelInterceptors</code>. It works only with membership service.
        (kfujino)
      </add>
    </changelog>
  </subsection>
  <subsection name="Other">
    <changelog>
      <update>
        Support building with Java 9+ while preserving the Java 8 compatibility
        at runtime (requires Ant 1.9.8 or later). (ebourg)
      </update>
      <update>
        Update WSDL4J library to version 1.6.3 (from 1.6.2). (kkolinko)
      </update>
      <update>
        Update JUnit library to version 4.12 (from 4.11). (kkolinko)
      </update>
      <update>
        Downgrade CGLib library used for testing with EasyMock to version
        2.2.2 (from 2.2.3) as version 2.2.3 is not available from Maven Central.
        (markt)
      </update>
      <add>
        Implement checksum checks when downloading dependencies that are used
        to build Tomcat. (kkolinko)
      </add>
      <fix>
        Fixed spelling. Patch provided by Jimmy Casey via GitHub. (violetagg)
      </fix>
      <update>
        Update the internal fork of Apache Commons Pool 2 to 3e02523
        (2018-08-09) to pick up some bug fixes and enhancements. (markt)
      </update>
      <update>
        Update the internal fork of Apache Commons DBCP 2 to abc0484
        (2018-08-09) to pick up some bug fixes and enhancements. (markt)
      </update>
      <fix>
        Correct various spelling errors throughout the source code and
        documentation. Patch provided by Kazuhiro Sera. (markt)
      </fix>
    </changelog>
  </subsection>
</section>
<section name="Tomcat 9.0.10 (markt)" rtext="2018-06-25">
  <subsection name="Catalina">
    <changelog>
      <fix>
        <bug>62476</bug>: Use GMT timezone for the value of
        <code>Expires</code> header as required by HTTP specification
        (RFC 7231, 7234). (kkolinko)
      </fix>
    </changelog>
  </subsection>
</section>
<section name="Tomcat 9.0.9 (markt)" rtext="not released">
  <subsection name="Catalina">
    <changelog>
      <fix>
        Treat the <code>&lt;mapped-name&gt;</code> element of a
        <code>&lt;env-entry&gt;</code> in web.xml in the same way as the
        <code>mappedName</code> element of the equivalent <code>@Resource</code>
        annotation. Both now attempt to set the <code>mappedName</code> property
        of the resource. (markt)
      </fix>
      <fix>
        Correct the processing of resources with
        <code>&lt;injection-target&gt;</code>s defined in web.xml. First look
        for a match using JavaBean property names and then, only if a match is
        not found, look for a match using fields. (markt)
      </fix>
      <fix>
        When restoring a saved request with a request body after FORM
        authentication, ensure that calls to the <code>HttpServletRequest</code>
        methods <code>getRequestURI()</code>, <code>getQueryString()</code> and
        <code>getProtocol()</code> are not corrupted by the processing of the
        saved request body. (markt)
      </fix>
      <fix>
        JNDI resources that are defined with injection targets but no value are
        now treated as if the resource is not defined. (markt)
      </fix>
      <fix>
        Ensure that JNDI names used for <code>&lt;lookup-name&gt;</code> entries
        in web.xml and for <code>lookup</code> elements of
        <code>@Resource</code> annotations specify a name with an explicit
        <code>java:</code> namespace. (markt)
      </fix>
      <fix>
        <bug>50019</bug>: Add support for <code>&lt;lookup-name&gt;</code>.
        Based on a patch by Gurkan Erdogdu. (markt)
      </fix>
      <add>
        Add the <code>AuthenticatedUserRealm</code> for use with CLIENT-CERT and
        SPNEGO when just the authenticated user name is required. (markt)
      </add>
      <fix>
        <bug>50175</bug>: Add a new attribute to the standard context
        implementation, <code>skipMemoryLeakChecksOnJvmShutdown</code>, that
        allows the user to configure Tomcat to skip the memory leak checks
        usually performed during web application stop if that stop is triggered
        by a JVM shutdown. (markt)
      </fix>
      <add>
        <bug>51497</bug>: Add an option, <code>ipv6Canonical</code>, to the
        <code>AccessLogValve</code> that causes IPv6 addresses to be output in
        canonical form defined by RFC 5952. (ognjen/markt)
      </add>
      <add>
        <bug>51953</bug>: Add the <code>RemoteCIDRFilter</code> and
        <code>RemoteCIDRValve</code> that can be used to allow/deny requests
        based on IPv4 and/or IPv6 client address where the IP ranges are defined
        using CIDR notation. Based on a patch by Francis Galiegue. (markt)
      </add>
      <fix>
        <bug>62343</bug>: Make CORS filter defaults more secure. This is the fix
        for CVE-2018-8014. (markt)
      </fix>
      <fix>
        Ensure that the web application resources implementation does not
        incorrectly cache results for resources that are only visible as class
        loader resources. (markt)
      </fix>
      <fix>
        <bug>62387</bug>: Do not log a warning message if the file based
        persistent session store fails to delete the file for a session when the
        session is invalidated because the file has not been created yet.
        (markt)
      </fix>
      <fix>
        Make all loggers associated with Tomcat provided Filters non-static to
        ensure that log messages are not lost when a web application is
        reloaded. (markt)
      </fix>
      <fix>
        Correct the manifest for the annotations-api.jar. The JAR implements the
        Common Annotations API 1.3 and the manifest should reflect that. (markt)
      </fix>
      <fix>
        Switch to non-static loggers where there is a possibility of a logger
        becoming associated with a web application class loader causing log
        messages to be lost if the web application is stopped. (markt)
      </fix>
      <add>
        <bug>62389</bug>: Add the IPv6 loopback address to the default
        <code>internalProxies</code> regular expression. Patch by Craig Andrews.
        (markt)
      </add>
      <fix>
        In the <code>RemoteIpValve</code> and <code>RemoteIpFilter</code>,
        correctly handle the case when the request passes through one or more
        <code>trustedProxies</code> but no <code>internalProxies</code>. Based
        on a patch by zhanhb. (markt)
      </fix>
      <fix>
        Correct the logic in <code>MBeanFactory.removeConnector()</code> to
        ensure that the correct Connector is removed when there are multiple
        Connectors using different addresses but the same port. (markt)
      </fix>
      <fix>
        Make <code>JAASRealm</code> mis-configuration more obvious by requiring
        the authenticated Subject to include at least one Principal of a type
        specified by <code>userClassNames</code>. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Coyote">
    <changelog>
      <fix>
        Correct a regression in the error page handling that prevented error
        pages from issuing redirects or taking other action that required the
        response status code to be changed. (markt)
      </fix>
      <fix>
        Consistent exception propagation for NIO2 SSL close. (remm)
      </fix>
      <fix>
        Followup sync fix for NIO2 async IO blocking read/writes. (remm)
      </fix>
      <fix>
        Log an error message if the AJP connector detects that the reverse proxy
        is sending AJP messages that are too large for the configured
        <code>packetSize</code>. (markt)
      </fix>
      <fix>
        Relax Host validation by removing the requirement that the final
        component of a FQDN must be alphabetic. (markt)
      </fix>
      <fix>
        <bug>62371</bug>: Improve logging of Host validation failures. (markt)
      </fix>
      <fix>
        Fix a couple of unlikely edge cases in the shutting down of the
        APR/native connector. (markt)
      </fix>
      <fix>
        Add missing handshake timeout for NIO2. (remm)
      </fix>
      <fix>
        Correctly handle a digest authorization header when the user name
        contains an escaped character. (markt)
      </fix>
      <fix>
        Correctly handle a digest authorization header when one of the hex
        field values ends the header with in an invalid character. (markt)
      </fix>
      <fix>
        Correctly handle an invalid quality value in an
        <code>Accept-Language</code> header. (markt)
      </fix>
      <docs>
        <bug>62423</bug>: Fix SSL docs CRL attribute typo. (remm)
      </docs>
      <fix>
        Improve IPv6 validation by ensuring that IPv4-Mapped IPv6 addresses do
        not contain leading zeros in the IPv4 part. Based on a patch by Katya
        Stoycheva. (markt)
      </fix>
      <fix>
        Fix <code>NullPointerException</code> thrown from <code>
        replaceSystemProperties()</code> when trying to log messages. (csutherl)
      </fix>
      <fix>
        Avoid unnecessary processing of async timeouts. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Jasper">
    <changelog>
      <add>
        <bug>50234</bug>: Add the capability to generate a web-fragment.xml file
        to JspC. (markt)
      </add>
      <fix>
        <bug>62080</bug>: Ensure that all reads of the current thread's context
        class loader made by the UEL API and implementation are performed via a
        <code>PrivilegedAction</code> to ensure that a
        <code>SecurityException</code> is not triggered when running under a
        <code>SecurityManager</code>. (mark)
      </fix>
      <fix>
        <bug>62350</bug>: Refactor
        <code>org.apache.jasper.runtime.BodyContentImpl</code> so a
        <code>SecurityException</code> is not thrown when running under a
        SecurityManger and additional permissions are not required in the
        <code>catalina.policy</code> file. This is a follow-up to the fix for
        <bug>43925</bug>. (kkolinko/markt)
      </fix>
      <fix>
        Enable JspC from Tomcat 9 to work with Maven JspC compiler plug-ins
        written for Tomcat 8.5.x. Patch provided by Pavel Cibulka. (markt)
      </fix>
      <fix>
        Update web.xml, web-fragment.xml and web.xml extracts generated by JspC
        to use the Servlet 4.0 version of the relevant schemas. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Cluster">
    <changelog>
      <fix>
        Remove duplicate calls when creating a replicated session to reduce the
        time taken to create the session and thereby reduce the chances of a
        subsequent session update message being ignored because the session does
        not yet exist. (markt)
      </fix>
      <add>
        Add the method to send a message with a specified sendOptions. (kfujino)
      </add>
      <fix>
        When sending the <code>GET_ALL_SESSIONS</code> message, make sure that
        sends with asynchronous option in order to avoid ack timeout. Waiting to
        receive the <code>ALL_SESSION_DATA</code> message should be done with
        <code>waitForSendAllSessions</code> instead of ACK. (kfujino)
      </fix>
    </changelog>
  </subsection>
  <subsection name="WebSocket">
    <changelog>
      <update>
        Use NIO2 API for websockets writes. (remm)
      </update>
      <fix>
        When decoding of path parameter failed, make sure to throw
        <code>DecodeException</code> instead of throwing
        <code>ArrayIndexOutOfBoundsException</code>. (kfujino)
      </fix>
      <fix>
        Improve the handling of exceptions during TLS handshakes for the
        WebSocket client. (markt)
      </fix>
      <fix>
        Enable host name verification when using TLS with the WebSocket client.
        (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Web applications">
    <changelog>
      <fix>
        <bug>62395</bug>: Clarify the meaning of the connector attribute
        <code>minSpareThreads</code> in the documentation web application.
        (markt)
      </fix>
      <fix>
        Correct the documentation for the <code>allowHostHeaderMismatch</code>
        attribute of the standard HTTP Connector implementations. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Tribes">
    <changelog>
      <fix>
        Ensure that the correct default value is returned when retrieve unset
        properties in <code>McastService</code>. (kfujino)
      </fix>
      <add>
        Make <code>MembershipService</code> more easily extensible. (kfujino)
      </add>
    </changelog>
  </subsection>
  <subsection name="jdbc-pool">
    <changelog>
      <fix>
        When <code>logValidationErrors</code> is set to true, the connection
        validation error is logged as <code>SEVERE</code> instead of
        <code>WARNING</code>. (kfujino)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Other">
    <changelog>
      <fix>
        Ensure that Apache Tomcat may be built from source with Java 11. (markt)
      </fix>
      <add>
        <bug>52381</bug>: Add OSGi metadata to JAR files. (markt)
      </add>
      <fix>
        <bug>62391</bug>: Remove references to <code>javaw.exe</code> as this
        file is not required by Tomcat and the references prevent the use of the
        Server JRE. (markt)
      </fix>
      <update>
        Update the packaged version of the Tomcat Native Library to 1.2.17 to
        pick up the latest Windows binaries built with APR 1.6.3 and OpenSSL
        1.0.2o. (markt)
      </update>
      <update>
        <bug>62458</bug>: Update the internal fork of Commons Pool 2 to dfef97b
        (2018-06-18) to pick up some bug fixes and enhancements. (markt)
      </update>
      <update>
        Update the internal fork of Commons DBCP 2 to 2.4.0. (markt)
      </update>
    </changelog>
  </subsection>
</section>
<section name="Tomcat 9.0.8 (markt)" rtext="2018-05-03">
  <subsection name="Catalina">
    <changelog>
      <fix>
        <bug>62263</bug>: Avoid a <code>NullPointerException</code> when the
        <code>RemoteIpValve</code> processes a request for which no Context can
        be found. (markt)
      </fix>
      <add>
        <bug>62258</bug>: Don't trigger the standard error page mechanism when
        the error has caused the connection to the client to be closed as no-one
        will ever see the error page. (markt)
      </add>
      <fix>
        Register MBean when DataSource Resource <code>
        type="javax.sql.XADataSource"</code>. Patch provided by Masafumi Miura.
        (csutherl)
      </fix>
      <fix>
        Fix a rare edge case that is unlikely to occur in real usage. This edge
        case meant that writing long streams of UTF-8 characters to the HTTP
        response that consisted almost entirely of surrogate pairs could result
        in one surrogate pair being dropped. (markt)
      </fix>
      <add>
        Update the internal fork of Apache Commons BCEL to r1829827 to add early
        access Java 11 support to the annotation scanning code. (markt)
      </add>
      <fix>
        <bug>62297</bug>: Enable the <code>CrawlerSessionManagerValve</code> to
        correctly handle bots that crawl multiple hosts and/or web applications
        when the Valve is configured on a Host or an Engine. (fschumacher)
      </fix>
      <fix>
        <bug>62309</bug>: Fix a <code>SecurityException</code> when using JASPIC
        under a <code>SecurityManager</code> when authentication is not
        mandatory. (markt)
      </fix>
      <fix>
        <bug>62329</bug>: Correctly list resources in JAR files when directories
        do not have dedicated entries. Patch provided by Meelis Müür. (markt)
      </fix>
      <add>
        Collapse multiple leading <code>/</code> characters to a single
        <code>/</code> in the return value of
        <code>HttpServletRequest#getContextPath()</code> to avoid issues if the
        value is used with <code>HttpServletResponse#sendRedirect()</code>. This
        behaviour is enabled by default and configurable via the new Context
        attribute <code>allowMultipleLeadingForwardSlashInPath</code>. (markt)
      </add>
      <fix>
        Improve handling of overflow in the UTF-8 decoder with supplementary
        characters. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Coyote">
    <changelog>
      <fix>
        Correct off-by-one error in thread pool that allowed thread pools to
        increase in size to one more than the configured limit. Patch provided
        by usc. (markt)
      </fix>
      <fix>
        Prevent unexpected TLS handshake failures caused by errors during a
        previous handshake that were not correctly cleaned-up when using the NIO
        or NIO2 connector with the <code>OpenSSLImplementation</code>. (markt)
      </fix>
      <add>
        <bug>62273</bug>: Implement configuration options to work-around
        specification non-compliant user agents (including all the major
        browsers) that do not correctly %nn encode URI paths and query strings
        as required by RFC 7230 and RFC 3986. (markt)
      </add>
      <fix>
        Fix sync for NIO2 async IO blocking read/writes. (remm)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Jasper">
    <changelog>
      <update>
        Update the Eclipse Compiler for Java to 4.7.3a. (markt)
      </update>
      <update>
        Allow <code>9</code> to be used to specify Java 9 as the compiler source
        and/or compiler target for JSP compilation. The Early Access value of
        <code>1.9</code> is still supported. (markt)
      </update>
      <add>
        Add support for specifying Java 10 (with the value <code>10</code>) as
        the compiler source and/or compiler target for JSP compilation. (markt)
      </add>
      <fix>
        <bug>62287</bug>: Do not rely on hash codes to test instances of
        <code>ValueExpressionImpl</code> for equality. Patch provided by Mark
        Struberg. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="WebSocket">
    <changelog>
      <fix>
        <bug>62301</bug>: Correct a regression in the fix for <bug>61491</bug>
        that didn't correctly handle a final empty message part in all
        circumstances when using <code>PerMessageDeflate</code>. (markt)
      </fix>
      <fix>
        <bug>62332</bug>: Ensure WebSocket connections are closed after an I/O
        error is experienced reading from the client. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Other">
    <changelog>
      <fix>
        Avoid warning when running under Cygwin when the
        <code>JAVA_ENDORSED_DIRS</code> environment variable is not set. Patch
        provided by Zemian Deng. (markt)
      </fix>
    </changelog>
  </subsection>
</section>
<section name="Tomcat 9.0.7 (markt)" rtext="2018-04-07">
  <subsection name="Catalina">
    <changelog>
      <fix>
        <bug>51195</bug>: Avoid a false positive report of a web application
        memory leak by clearing <code>ObjectStreamClass$Caches</code> of classes
        loaded by the web application when the web application is stopped.
        (markt)
      </fix>
      <fix>
        <bug>52688</bug>: Add support for the <code>maxDays</code> attribute to
        the <code>AccessLogValve</code> and <code>ExtendedAccessLogValve</code>.
        This allows the maximum number of days for which rotated access logs
        should be retained before deletion to be defined. (markt)
      </fix>
      <fix>
        Ensure the MBean names for the <code>SSLHostConfig</code> and
        <code>SSLHostConfigCertificate</code> are correctly formed when the
        <code>Connector</code> is bound to a specific IP address. (markt)
      </fix>
      <fix>
        <bug>62168</bug>: When using the <code>PersistentManager</code> honor a
        value of <code>-1</code> for <code>minIdleSwap</code> and do not swap
        out sessions to keep the number of active sessions under
        <code>maxActive</code>. Patch provided by Holger Sunke. (markt)
      </fix>
      <fix>
        <bug>62172</bug>: Improve Javadoc for
        <code>org.apache.catalina.startup.Constants</code> and ensure that the
        constants are correctly used. (markt)
      </fix>
      <fix>
        <bug>62175</bug>: Avoid infinite recursion, when trying to validate
        a session while loading it with <code>PersistentManager</code>.
        (fschumacher)
      </fix>
      <fix>
        Ensure that <code>NamingContextListener</code> instances are only
        notified once of property changes on the associated naming resources.
        (markt)
      </fix>
      <add>
        <bug>62224</bug>: Disable the <code>forkJoinCommonPoolProtection</code>
        of the <code>JreMemoryLeakPreventionListener</code> when running on Java
        9 and above since the underlying JRE bug has been fixed. (markt)
      </add>
    </changelog>
  </subsection>
  <subsection name="Coyote">
    <changelog>
      <fix>
        Avoid potential loop in APR/Native poller. (markt)
      </fix>
      <fix>
        Ensure streams that are received but not processed are excluded from the
        tracking of maximum ID of processed streams. (markt)
      </fix>
      <fix>
        Refactor the check for a paused connector to consistently prevent new
        streams from being created after the connector has been paused. (markt)
      </fix>
      <fix>
        Improve debug logging for HTTP/2 pushed streams. (markt)
      </fix>
      <fix>
        The OpenSSL engine SSL session will now ignore invalid accesses. (remm)
      </fix>
      <fix>
        <bug>62177</bug>: Correct two protocol errors with HTTP/2
        <code>PUSH_PROMISE</code> frames. Firstly, the HTTP/2 protocol only
        permits pushes to be sent on peer initiated requests. Secondly, pushes
        must be sent in order of increasing stream ID. These restriction were
        not being enforced leading to protocol errors at the client. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Web applications">
    <changelog>
      <add>
        Add document for <code>FragmentationInterceptor</code>. (kfujino)
      </add>
      <add>
        Document how the roles for an authenticated user are determined when the
        <code>CombinedRealm</code> is used. (markt)
      </add>
      <fix>
        <bug>62163</bug>: Correct the Tomcat Setup documentation that
        incorrectly referred to Java 7 as the minimum version rather than Java
        8. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Tribes">
    <changelog>
      <fix>
        Add JMX support for <code>FragmentationInterceptor</code> in order to
        prevent warning of startup. (kfujino)
      </fix>
    </changelog>
  </subsection>
  <subsection name="jdbc-pool">
    <changelog>
      <fix>
        Ensure that <code>SQLWarning</code> has been cleared when connection
        returns to the pool. (kfujino)
      </fix>
      <add>
        Enable clearing of <code>SQLWarning</code> via JMX. (kfujino)
      </add>
      <fix>
        Ensure that parameters have been cleared when
        <code>PreparedStatement</code> and/or <code>CallableStatement</code> are
        cached. (kfujino)
      </fix>
      <fix>
        Enable PoolCleaner to be started even if <code>validationQuery</code>
        is not set. (kfujino)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Other">
    <changelog>
      <update>
        Update the build script so MD5 hashes are no longer generated for
        releases as per the change in the ASF distribution policy. (markt)
      </update>
      <fix>
        <bug>62164</bug>: Switch the build script to use TLS for downloads from
        SourceForge and Maven Central to avoid failures due to HTTP to HTTPS
        redirects. (markt)
      </fix>
      <add>
        Always report the OS's umask when launching the JVM. (schultz)
      </add>
      <add>
        Add managed connections package to the package renamed DBCP 2 to provide
        a complete DBCP 2 in Tomcat. (remm)
      </add>
    </changelog>
  </subsection>
</section>
<section name="Tomcat 9.0.6 (markt)" rtext="2018-03-08">
  <subsection name="Catalina">
    <changelog>
      <fix>
        <bug>43866</bug>: Add additional attributes to the Manager to provide
        control over which listeners are called when an attribute is added to
        the session when it has already been added under the same name. This is
        to aid clustering scenarios where <code>setAttribute()</code> is often
        called to signal that the attribute value has been mutated and needs to
        be replicated but it may not be required, or even desired, for the
        associated listeners to be triggered. The default behaviour has not been
        changed. (markt)
      </fix>
      <fix>
        Minor optimization when calling class transformers. (rjung)
      </fix>
      <add>
        Pass errors triggered by invalid requests or unavailable services to the
        application provided error handling and/or the container provided error
        handling (<code>ErrorReportValve</code>) as appropriate. (markt)
      </add>
      <add>
        <bug>41007</bug>: Add the ability to specify static HTML responses for
        specific error codes and/or exception types with the
        <code>ErrorReportValve</code>. (markt)
      </add>
      <fix>
        Prevent Tomcat from applying gzip compression to content that is already
        compressed with brotli compression. Based on a patch provided by burka.
        (markt)
      </fix>
      <fix>
        <bug>62090</bug>: Null container names are not allowed. (remm)
      </fix>
      <fix>
        <bug>62104</bug>: Fix programmatic login regression as the
        NonLoginAuthenticator has to be set for it to work (if no login method
        is specified). (remm)
      </fix>
      <fix>
        <bug>62117</bug>: Improve error message in <code>catalina.sh</code> when
        calling <code>kill -0 &lt;pid&gt;</code> fails. Based on a suggestion
        from Mark Morschhaeuser. (markt)
      </fix>
      <fix>
        <bug>62118</bug>: Correctly create a JNDI <code>ServiceRef</code> using
        the specified interface rather than the concrete type. Based on a
        suggestion by Ángel Álvarez Páscua. (markt)
      </fix>
      <fix>
        Fix for <code>RequestDumperFilter</code> log attribute. Patch provided
        by Kirill Romanov via Github. (violetagg)
      </fix>
      <fix>
        <bug>62123</bug>: Avoid <code>ConcurrentModificationException</code>
        when attempting to clean up application triggered RMI memory leaks on
        web application stop. (markt)
      </fix>
      <add>
        When a deployment descriptor is deployed that includes a
        <code>path</code> attribute, log a warning that the <code>path</code>
        attribute will be ignored. (markt)
      </add>
      <add>
        When a deployment descriptor is deployed that references an external
        <code>docBase</code> and, as a result, a <code>docBase</code> under the
        <code>appBase</code> will be ignored, log a warning. (markt)
      </add>
      <fix>
        Correct a regression in the fix for <bug>60276</bug> that meant that
        compression was applied to all MIME types. Patch provided by Stefan
        Knoblich. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Coyote">
    <changelog>
      <add>
        Add async HTTP/2 parser for NIO2. (remm)
      </add>
      <fix>
        Add minor HPACK fixes, based on fixes by Stuart Douglas. (remm)
      </fix>
      <fix>
        <bug>61751</bug>: Follow up fix so that OpenSSL engine returns
        underflow when unwrapping if no bytes were produced and the input is
        empty. (remm)
      </fix>
      <fix>
        Minor OpenSSL engine cleanups. (remm)
      </fix>
      <fix>
        NIO SSL handshake should throw an exception on overflow status, like
        NIO2 SSL. (remm)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Web applications">
    <changelog>
      <add>
        <bug>47467</bug>: When deploying a web application via the manager
        application and a path is not explicitly specified, derive it from the
        provided deployment descriptor or, if that is not present, the WAR or
        DIR. (markt)
      </add>
      <add>
        <bug>48672</bug>: Add documentation for the Host Manager web
        application. Patch provided by Marek Czernek. (markt)
      </add>
      <add>
        Add support for specifying the application version when deploying an
        application via the Manager application HTML interface. (markt)
      </add>
      <add>
        Work-around a known, non-specification compliant behaviour in some
        versions of IE that can allow XSS when the Manager application generates
        a plain text response. Based on a suggestion from Muthukumar Marikani.
        (markt)
      </add>
    </changelog>
  </subsection>
</section>
<section name="Tomcat 9.0.5 (markt)" rtext="2018-02-11">
  <subsection name="Catalina">
    <changelog>
      <fix>
        Prevent a stack trace being written to standard out when running on Java
        10 due to changes in the <code>LogManager</code> implementation. (markt)
      </fix>
      <fix>
        Avoid duplicate load attempts if one has been made already. (remm)
      </fix>
      <fix>
        Avoid NPE in ThreadLocalLeakPreventionListener if there is no Engine.
        (remm)
      </fix>
      <fix>
        <bug>62000</bug>: When a JNDI reference cannot be resolved, ensure that
        the root cause exception is reported rather than swallowed. (markt)
      </fix>
      <fix>
        <bug>62036</bug>: When caching an authenticated user Principal in the
        session when the web application is configured with the
        <code>NonLoginAuthenticator</code>, cache the internal Principal object
        rather than the user facing Principal object as Tomcat requires the
        internal object to correctly process later authorization checks. (markt)
      </fix>
      <add>
        Refactor error handling to enable errors that occur before processing is
        passed to the application to be handled by the application provided
        error handling and/or the container provided error handling
        (<code>ErrorReportValve</code>) as appropriate. (markt)
      </add>
      <add>
        Pass 404 errors triggered by a missing ROOT web application to the
        container error handling to generate the response body. (markt)
      </add>
      <add>
        Pass 400 errors triggered by invalid request targets to the container
        error handling to generate the response body. (markt)
      </add>
      <fix>
        Provide a correct <code>Allow</code> header when responding to an HTTP
        <code>TRACE</code> request for a JSP with a 405 status code. (markt)
      </fix>
      <fix>
        When using Tomcat embedded, only perform Authenticator configuration
        once during web application start. (markt)
      </fix>
      <fix>
        <bug>62067</bug>: Correctly apply security constraints mapped to the
        context root using a URL pattern of <code>&quot;&quot;</code>. (markt)
      </fix>
      <fix>
        Process all <code>ServletSecurity</code> annotations at web application
        start rather than at servlet load time to ensure constraints are applied
        consistently. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Coyote">
    <changelog>
      <fix>
        <bug>61751</bug>: Fix truncated request input streams when using NIO2
        with TLS. (markt)
      </fix>
      <fix>
        <bug>62023</bug>: Log error reporting multiple SSLHostConfig elements
        when using the APR Connector instead of crashing Tomcat. (csutherl)
      </fix>
      <fix>
        <bug>62032</bug>: Fix NullPointerException when certificateFile is not
        defined on an SSLHostConfig and unify the behavior when a
        certificateFile is defined but the file does not exist for both
        JKS and PEM file types. (csutherl)
      </fix>
      <fix>
        Ensure that the <code>toString()</code> method behaves consistently for
        <code>ByteChunk</code> and <code>CharChunk</code> and that
        <code>null</code> is returned when <code>toString()</code> is called
        both on newly created objects and immediately after a call to
        <code>recycle()</code>. This should not impact typical Tomcat users. It
        may impact users who use these classes directly in their own code.
        (markt)
      </fix>
      <fix>
        Ensure that the <code>toString()</code>, <code>toBytes()</code> and
        <code>toChars()</code> methods of <code>MessageBytes</code> behave
        consistently and do not throw a <code>NullPointerException</code> both
        on newly created objects and immediately after a call to
        <code>recycle()</code>. This should not impact typical Tomcat users. It
        may impact users who use these classes directly in their own code.
        (markt)
      </fix>
      <fix>
        When processing an HTTP 1.0 request in the HTTP connector and no host
        information is provided in the request, obtain the server port from the
        local port rather than the connector configuration since the configured
        value maybe zero. (markt)
      </fix>
      <add>
        Enable strict validation of the provided host name and port for all
        connectors. Requests with invalid host names and/or ports will be
        rejected with a 400 response. (markt)
      </add>
      <fix>
        Update the host validation to permit host names and components of domain
        names (excluding top-level domains) to start with a number and to ensure
        that top-level domains are fully alphabetic. (markt)
      </fix>
      <fix>
        <bug>62053</bug>: Fix NPE when writing push headers with HTTP/2 NIO2.
        Patch submitted by Holger Sunke. (remm)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Jasper">
    <changelog>
      <fix>
        Include an HTTP <code>Allow</code> header when a JSP generates a
        405 response due to a request with an unsupported method. (markt)
      </fix>
      <add>
        Add support for the HTTP <code>OPTION</code> method to JSPs. The
        JSP specification explicitly states that the behaviour for this
        method is undefined for JSPs so this is a Tomcat specific
        behaviour. (markt)
      </add>
    </changelog>
  </subsection>
  <subsection name="WebSocket">
    <changelog>
      <fix>
        <bug>62024</bug>: When closing a connection with an abnormal close,
        close the socket immediately rather than waiting for a close message
        from the client that may never arrive. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Webapps">
    <changelog>
      <fix>
        <bug>62049</bug>: Fix missing class from manager 404 JSP error page.
        (remm)
      </fix>
    </changelog>
  </subsection>
  <subsection name="jdbc-pool">
    <changelog>
      <add>
        Enhance the JMX support for jdbc-pool in order to expose
        <code>PooledConnection</code> and <code>JdbcInterceptors</code>.
        (kfujino)
      </add>
      <add>
        Add MBean for <code>PooledConnection</code>. (kfujino)
      </add>
      <add>
        <bug>62011</bug>: Add MBean for <code>StatementCache</code>. (kfujino)
      </add>
      <add>
        Expose the cache size for each connection via JMX in
        <code>StatementCache</code>. (kfujino)
      </add>
      <add>
        Add MBean for <code>ResetAbandonedTimer</code>. (kfujino)
      </add>
    </changelog>
  </subsection>
  <subsection name="Other">
    <changelog>
      <update>
        Update the list with the public interfaces in the RELEASE-NOTES.
        (violetagg)
      </update>
      <update>
        Update the NSIS Installer used to build the Windows installer to version
        3.03. (kkolinko)
      </update>
    </changelog>
  </subsection>
</section>
<section name="Tomcat 9.0.4 (markt)" rtext="2018-01-22">
  <subsection name="Catalina">
    <changelog>
      <fix>
        Correct a regression in the previous fix for <bug>61916</bug> that meant
        that any call to <code>addHeader()</code> would have been replaced with
        a call to <code>setHeader()</code> for all requests mapped to the
        <code>AddDefaultCharsetFilter</code>. (markt)
      </fix>
      <fix>
        <bug>61999</bug>: maxSavePostSize set to 0 should disable saving POST
        data during authentication. (remm)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Coyote">
    <changelog>
      <fix>
        Fix NIO2 HTTP/2 sendfile. (remm)
      </fix>
      <fix>
        <bug>61993</bug>: Improve handling for <code>ByteChunk</code> and
        <code>CharChunk</code> instances that grow close to the maximum size
        allowed by the JRE. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Jasper">
    <changelog>
      <add>
        <bug>43925</bug>: Add a new system property
        (<code>org.apache.jasper.runtime.BodyContentImpl.BUFFER_SIZE</code>) to
        control the size of the buffer used by Jasper when buffering tag bodies.
        (markt)
      </add>
    </changelog>
  </subsection>
  <subsection name="Web applications">
    <changelog>
      <fix>
        <bug>62006</bug>: Document the new <code>JvmOptions9</code> command line
        parameter for <code>tomcat9.exe</code>. (markt)
      </fix>
    </changelog>
  </subsection>
</section>
<section name="Tomcat 9.0.3 (markt)" rtext="not released">
  <subsection name="Catalina">
    <changelog>
      <add>
        <bug>57619</bug>: Implement a small optimisation to how JAR URLs are
        processed to reduce the storage of duplicate String objects in memory.
        Patch provided by Dmitri Blinov. (markt)
      </add>
      <fix>
        Add some missing NPEs to ServletContext. (remm)
      </fix>
      <fix>
        Update the Java EE 8 XML schema to the released versions. (markt)
      </fix>
      <fix>
        Minor HTTP/2 push fixes. (remm)
      </fix>
      <fix>
        <bug>61916</bug>: Extend the <code>AddDefaultCharsetFilter</code> to add
        a character set when the content type is set via
        <code>setHeader()</code> or <code>addHeader()</code> as well as when it
        is set via <code>setContentType()</code>. (markt)
      </fix>
      <fix>
        When using WebDAV to copy a file resource to a destination that requires
        a collection to be overwritten, ensure that the operation succeeds
        rather than fails (with a 500 response). This enables Tomcat to pass two
        additional tests from the Litmus WebDAV test suite. (markt)
      </fix>
      <update>
        Modify the Default and WebDAV Servlets so that a 405 status code is
        returned for <code>PUT</code> and <code>DELETE</code> requests when
        disabled via the <code>readonly</code> initialisation parameter.
      </update>
      <fix>
        Align the contents of the <code>Allow</code> header with the response
        code for the Default and WebDAV Servlets. For any given resource a
        method that returns a 405 status code will not be listed in the
        <code>Allow</code> header and a method listed in the <code>Allow</code>
        header will not return a 405 status code. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Coyote">
    <changelog>
      <add>
        <bug>60276</bug>: Implement GZIP compression support for responses
        served over HTTP/2. (markt)
      </add>
      <fix>
        Do not call onDataAvailable without any data to read. (remm)
      </fix>
      <fix>
        Correctly handle EOF when <code>ServletInputStream.isReady()</code> is
        called. (markt)
      </fix>
      <fix>
        <bug>61886</bug>: Log errors on non-container threads at
        <code>DEBUG</code> rather than <code>INFO</code>. The exception will be
        made available to the application via the asynchronous error handling
        mechanism. (markt)
      </fix>
      <fix>
        <bug>61914</bug>: Possible NPE with Java 9 when creating an SSL engine.
        Patch submitted by Evgenij Ryazanov. (remm)
      </fix>
      <fix>
        <bug>61918</bug>: Fix connectionLimitLatch counting when closing an
        already closed socket. Based on a patch by Ryan Fong. (remm)
      </fix>
      <add>
        Add support for the OpenSSL ARIA ciphers to the OpenSSL to JSSE
        cipher mapping. (markt)
      </add>
      <fix>
        <bug>61932</bug>: Allow a call to <code>AsyncContext.dispatch()</code>
        to terminate non-blocking I/O. (markt)
      </fix>
      <fix>
        <bug>61948</bug>: Improve the handling of malformed ClientHello messages
        in the code that extracts the SNI information from a TLS handshake for
        the JSSE based NIO and NIO2 connectors. (markt)
      </fix>
      <fix>
        Fix NIO2 handshaking with a full input buffer. (remm)
      </fix>
      <add>
        Return a simple, plain text error message if a client attempts to make a
        plain text HTTP connection to a TLS enabled NIO or NIO2 Connector.
        (markt)
      </add>
    </changelog>
  </subsection>
  <subsection name="Jasper">
    <changelog>
      <fix>
        <bug>61854</bug>: When using sets and/or maps in EL expressions, ensure
        that Jasper correctly parses the expression. Patch provided by Ricardo
        Martin Camarero. (markt)
      </fix>
      <fix>
        Improve the handling of methods with varargs in EL expressions. In
        particular, the calling of a varargs method with no parameters now works
        correctly. Based on a patch by Nitkalya (Ing) Wiriyanuparb. (markt)
      </fix>
      <fix>
        <bug>61945</bug>: Fix prototype mode used to compile tags. (remm)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Web applications">
    <changelog>
      <add>
        <bug>61223</bug>: Add the mbeans-descriptors.dtd file to the custom
        MBean documentation so users have a reference to use when constructing
        mbeans-descriptors.xml files for custom components. (markt)
      </add>
      <add>
        <bug>61565</bug>: Add the ability to trigger a reloading of TLS host
        configuration (certificate and key files, server.xml is not re-parsed)
        via the Manager web application. (markt)
      </add>
      <add>
        <bug>61566</bug>: Expose the currently in use certificate chain and list
        of trusted certificates for all virtual hosts configured using the JSSE
        style (keystore) TLS configuration via the Manager web application.
        (markt)
      </add>
      <fix>
        Partial fix for <bug>61886</bug>. Ensure that multiple threads do not
        attempt to complete the <code>AsyncContext</code> if an I/O error occurs
        in the stock ticker example Servlet. (markt)
      </fix>
      <fix>
        <bug>61886</bug>: Prevent <code>ConcurrentModificationException</code>
        when running the asynchronous stock ticker in the examples web
        application. (markt)
      </fix>
      <fix>
        <bug>61886</bug>: Prevent <code>NullPointerException</code> and other
        errors if the stock ticker example is running when the examples web
        application is stopped. (markt)
      </fix>
      <fix>
        <bug>61910</bug>: Clarify the meaning of the <code>allowLinking</code>
        option in the documentation web application. (markt)
      </fix>
      <add>
        Add OCSP configuration information to the SSL How-To. Patch provided by
        Marek Czernek. (markt)
      </add>
    </changelog>
  </subsection>
  <subsection name="jdbc-pool">
    <changelog>
      <fix>
        <bug>61312</bug>: Prevent <code>NullPointerException</code> when using
        the statement cache of connection that has been closed. (kfujino)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Other">
    <changelog>
      <fix>
        Add an additional system property for the system property replacement.
        (remm)
      </fix>
      <fix>
        Add missing SHA-512 hash for release artifacts to the build script.
        (markt)
      </fix>
      <update>
        Update the internal fork of Commons Pool 2 to 2.4.3. (markt)
      </update>
      <update>
        Update the internal fork of Commons DBCP 2 to 8a71764 (2017-10-18) to
        pick up some bug fixes and enhancements. (markt)
      </update>
      <update>
        Update the internal fork of Commons FileUpload to 6c00d57 (2017-11-23)
        to pick up some code clean-up. (markt)
      </update>
      <update>
        Update the internal fork of Commons Codec to r1817136 to pick up some
        code clean-up. (markt)
      </update>
      <fix>
        The native source bundles (for Commons Daemon and Tomcat Native) are no
        longer copied to the bin directory for the deploy target. They are now
        only copied to the bin directory for the release target. (markt)
      </fix>
    </changelog>
  </subsection>
</section>
<section name="Tomcat 9.0.2 (markt)" rtext="2017-11-30">
  <subsection name="Catalina">
    <changelog>
      <fix>
        Fix possible <code>SecurityException</code> when using TLS related
        request attributes. (markt)
      </fix>
      <fix>
        <bug>61597</bug>: Extend the <code>StandardJarScanner</code> to scan
        JARs on the module path when running on Java 9 and class path scanning
        is enabled. (markt)
      </fix>
      <fix>
        <bug>61601</bug>: Add support for multi-release JARs in JAR scanning and
        web application class loading. (markt)
      </fix>
      <fix>
        <bug>61681</bug>: Allow HTTP/2 push when using request wrapping. (remm)
      </fix>
      <add>
        Provide the <code>SessionInitializerFilter</code> that can be used to
        ensure that an HTTP session exists when initiating a WebSocket
        connection. Patch provided by isapir. (markt)
      </add>
      <fix>
        <bug>61682</bug>: When re-prioritising HTTP/2 streams, ensure that both
        parent and children fields are correctly updated to avoid a possible
        <code>StackOverflowError</code>. (markt)
      </fix>
      <fix>
        Improve concurrency by reducing the scope of the synchronisation for
        <code>javax.security.auth.message.config.AuthConfigFactory</code> in the
        JASPIC API implementation. Based on a patch by Pavan Kumar. (markt)
      </fix>
      <fix>
        Avoid a possible <code>NullPointerException</code> when timing out
        <code>AsyncContext</code> instances during shut down. (markt)
      </fix>
      <fix>
        <bug>61777</bug>: Avoid a <code>NullPointerException</code> when
        detaching a JASPIC <code>RegistrationListener</code>. Patch provided by
        Lazar. (markt)
      </fix>
      <fix>
        <bug>61778</bug>: Correct the return value when detaching a JASPIC
        <code>RegistrationListener</code>. Patch provided by Lazar. (markt)
      </fix>
      <fix>
        <bug>61779</bug>: Avoid a <code>NullPointerException</code> when a
        <code>null</code> <code>RegistrationListener</code> is passed to
        <code>AuthConfigFactory.getConfigProvider()</code>. Patch provided by
        Lazar. (markt)
      </fix>
      <fix>
        <bug>61780</bug>: Only include the default JASPIC registration ID in the
        return value for a call to
        <code>AuthConfigFactory.getRegistrationIDs()</code> if a
        <code>RegistrationContext</code> has been registered using the default
        registration ID. Patch provided by Lazar. (markt)
      </fix>
      <fix>
        <bug>61781</bug>: Enable JASPIC provider registrations to be persisted
        when the layer and/or application context are <code>null</code>. Patch
        provided by Lazar. (markt)
      </fix>
      <fix>
        <bug>61782</bug>: When calling
        <code>AuthConfigFactory.doRegisterConfigProvider()</code> and the
        requested JASPIC config provider class is found by the web application
        class loader, do not attempt to load the class with the class loader
        that loaded the JASPIC API. Patch provided by Lazar. (markt)
      </fix>
      <fix>
        <bug>61783</bug>: When calling
        <code>AuthConfigFactory.removeRegistration()</code> and the registration
        is persistent, it should be removed from the persistent store. Patch
        provided by Lazar. (markt)
      </fix>
      <fix>
        <bug>61784</bug>: Correctly handle the case when
        <code>AuthConfigFactoryImpl.registerConfigProvider()</code> is called
        with a provider name of <code>null</code>. Patch provided by Lazar.
        (markt)
      </fix>
      <add>
        <bug>61795</bug>: Add a property to the <code>Authenticator</code>
        implementations to enable a custom JASPIC <code>CallbackHandler</code>
        to be specified. Patch provided by Lazar. (markt)
      </add>
    </changelog>
  </subsection>
  <subsection name="Coyote">
    <changelog>
      <fix>
        <bug>61568</bug>: Avoid a potential <code>SecurityException</code> when
        using the NIO2 connector and a new thread is added to the pool. (markt)
      </fix>
      <fix>
        <bug>61583</bug>: Correct a further regression in the fix to enable the
        use of Java key stores that contained multiple keys that did not all
        have the same password. This fixes PKCS11 key store handling with
        multiple keys selected with an alias. (markt)
      </fix>
      <fix>
        Improve NIO2 syncing for async IO operations. (remm)
      </fix>
      <add>
        Sendfile support for HTTP/2 and NIO2. (remm)
      </add>
      <fix>
        Reduce default HTTP/2 stream concurrent execution within a connection
        from 200 to 20. (remm)
      </fix>
      <fix>
        <bug>61668</bug>: Avoid a possible NPE when calling
        <code>AbstractHttp11Protocol.getSSLProtocol()</code>. (markt)
      </fix>
      <fix>
        <bug>61673</bug>: Avoid a possible
        <code>ConcurrentModificationException</code> when working with the
        streams associated with a connection. (markt)
      </fix>
      <fix>
        <bug>61719</bug>: Avoid possible NPE calling
        InputStream.setReadListener with HTTP/2. (remm)
      </fix>
      <fix>
        <bug>61736</bug>: Improve performance of NIO connector when clients
        leave large time gaps between network packets. Patch provided by Zilong
        Song. (markt)
      </fix>
      <fix>
        <bug>61740</bug>: Correct an off-by-one error in the Hpack header index
        validation that caused intermittent request failures when using HTTP/2.
        (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Jasper">
    <changelog>
      <fix>
        <bug>61604</bug>: Fix SMAP generation for JSPs that generate no output.
        (markt)
      </fix>
      <fix>
        <bug>61816</bug>: Invalid expressions in attribute values or template
        text should trigger a translation (compile time) error, not a run time
        error. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="WebSocket">
    <changelog>
      <fix>
        <bug>61604</bug>: Add support for authentication in the websocket
        client. Patch submitted by J Fernandez. (remm)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Web applications">
    <changelog>
      <fix>
        Correct Javadoc links to point to Java SE 8 and Java EE 8. (markt)
      </fix>
      <fix>
        Enable Javadoc to be built with Java 9. (markt)
      </fix>
      <fix>
        <bug>61603</bug>: Add XML filtering for the status servlet output where
        needed. (remm)
      </fix>
      <fix>
        Correct the description of how the CGI servlet maps a request to a
        script in the CGI How-To. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Tribes">
    <changelog>
      <fix>
        Fix incorrect behavior that attempts to resend channel messages more
        than the actual setting value of <code>maxRetryAttempts</code>.
        (kfujino)
      </fix>
      <fix>
        Ensure that the remaining Sender can send channel messages by avoiding
        unintended <code>ChannelException</code> caused by comparing the number
        of failed members and the number of remaining Senders. (kfujino)
      </fix>
      <fix>
        Ensure that remaining SelectionKeys that were not handled by throwing a
        <code>ChannelException</code> during SelectionKey processing are
        handled. (kfujino)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Other">
    <changelog>
      <fix>
        Improve the fix for <bug>61439</bug> and exclude the JPA, JAX-WS and EJB
        annotations completely from the Tomcat distributions. (markt)
      </fix>
      <fix>
        Improve handling of endorsed directories. The endorsed directory
        mechanism will only be used if the <code>JAVA_ENDORSED_DIRS</code>
        system property is explicitly set or if
        <code>$CATALINA_HOME/endorsed</code> exists. When running on Java 9, any
        such attempted use of the endorsed directory mechanism will trigger an
        error and Tomcat will fail to start. (rjung)
      </fix>
      <add>
        <bug>51496</bug>: When using the Windows installer, check if the
        requested service name already exists and, if it does, prompt the user
        to select an alternative service name. Patch provided by Ralph
        Plawetzki. (markt)
      </add>
      <fix>
        <bug>61590</bug>: Enable <code>service.bat</code> to recognise when
        <code>JAVA_HOME</code> is configured for a Java 9 JDK. (markt)
      </fix>
      <fix>
        <bug>61598</bug>: Update the Windows installer to search the new (as of
        Java 9) registry locations when looking for a JRE. (markt)
      </fix>
      <add>
        Add generation of a SHA-512 hash for release artifacts to the build
        script. (markt)
      </add>
      <fix>
        <bug>61658</bug>: Update MIME mappings for fonts to use
        <code>font/*</code> as per RFC8081. (markt)
      </fix>
      <update>
        Update the packaged version of the Tomcat Native Library to 1.2.16 to
        pick up the latest Windows binaries built with APR 1.6.3 and OpenSSL
        1.0.2m. (markt)
      </update>
      <update>
        Update the NSIS Installer used to build the Windows installer to version
        3.02.1. (kkolinko)
      </update>
      <update>
        Update the Windows installer to use "The Apache Software Foundation" as
        the Publisher when Tomcat is displayed in the list of installed
        applications in Microsoft Windows. (kkolinko)
      </update>
      <fix>
        <bug>61803</bug>: Remove outdated SSL information from the Security
        documentation. (remm)
      </fix>
    </changelog>
  </subsection>
</section>
<section name="Tomcat 9.0.1 (markt)" rtext="2017-09-30">
  <subsection name="Catalina">
    <changelog>
      <fix>
        Use the correct path when loading the JVM <code>logging.properties</code>
        file for Java 9. (rjung)
      </fix>
      <fix>
        Add additional validation to the resource handling required to fix
        CVE-2017-12617 on Windows. The checks were being performed elsewhere but
        adding them to the resource handling ensures that the checks are always
        performed. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Other">
    <changelog>
      <fix>
        <bug>61563</bug>: Correct typos in Spanish translation. Patch provided by
        Gonzalo Vásquez. (csutherl)
      </fix>
    </changelog>
  </subsection>
</section>
<section name="Tomcat 9.0.0 (markt)" rtext="not released">
  <subsection name="Catalina">
    <changelog>
      <fix>
        <bug>61542</bug>: Fix CVE-2017-12617 and prevent JSPs from being
        uploaded via a specially crafted request when HTTP PUT was enabled.
        (markt)
      </fix>
      <fix>
        <bug>61554</bug>: Exclude test files in unusual encodings and markdown
        files intended for display in GitHub from RAT analysis. Patch provided
        by Chris Thistlethwaite. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Coyote">
    <changelog>
      <add>
        <bug>60762</bug>: Add the ability to make changes to the TLS
        configuration of a connector at runtime without having to restart the
        Connector. (markt)
      </add>
      <add>
        Add an option to reject requests that contain HTTP headers with invalid
        (non-token) header names with a 400 response and reject such requests by
        default. (markt)
      </add>
      <fix>
        Implement the requirements of RFC 7230 (and RFC 2616) that HTTP/1.1
        requests must include a <code>Host</code> header and any request that
        does not must be rejected with a 400 response. (markt)
      </fix>
      <fix>
        Implement the requirements of RFC 7230 that any HTTP/1.1 request that
        specifies a host in the request line, must specify the same host in the
        <code>Host</code> header and that any such request that does not, must
        be rejected with a 400 response. This check is optional but enabled by
        default. It may be disabled with the
        <code>allowHostHeaderMismatch</code> attribute of the Connector. (markt)
      </fix>
      <fix>
        Implement the requirements of RFC 7230 that any HTTP/1.1 request that
        contains multiple <code>Host</code> headers is rejected with a 400
        response. (markt)
      </fix>
      <update>
        Add a way to set the property source in embedded mode. (remm)
      </update>
      <fix>
        <bug>61557</bug>: Correct a further regression in the fix to enable the
        use of Java key stores that contain multiple keys that do not all have
        the same password. The regression broke support for some FIPS compliant
        key stores. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="jdbc-pool">
    <changelog>
      <fix>
        <bug>61545</bug>: Correctly handle invocations of methods defined in the
        <code>PooledConnection</code> interface when using pooled XA
        connections. Patch provided by Nils Winkler. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Other">
    <changelog>
      <fix>
        Update fix for <bug>59904</bug> so that values less than zero are accepted
        instead of throwing a NegativeArraySizeException. (remm)
      </fix>
      <add>
        Complete the implementation of the Servlet 4.0 specification. (markt)
      </add>
    </changelog>
  </subsection>
</section>
<section name="Tomcat 9.0.0.M27 (markt)" rtext="2017-09-19">
  <subsection name="Catalina">
    <changelog>
      <fix>
        Before generating an error page in the <code>ErrorReportValve</code>,
        check to see if I/O is still permitted for the associated connection
        before generating the error page so that the page generation can be
        skipped if the page is never going to be sent. (markt)
      </fix>
      <add>
        <bug>61189</bug>: Add the ability to set environment variables for
        individual CGI scripts. Based on a patch by jm009. (markt)
      </add>
      <fix>
        <bug>61210</bug>: When running under a SecurityManager, do not print a
        warning about not being able to read a logging configuration file when
        that file does not exist. (markt)
      </fix>
      <add>
        <bug>61280</bug>: Add RFC 7617 support to the
        <code>BasicAuthenticator</code>. Note that the default configuration
        does not change the existing behaviour. (markt)
      </add>
      <fix>
        <bug>61424</bug>: Avoid a possible <code>StackOverflowError</code> when
        running under a <code>SecurityManager</code> and using
        <code>Subject.doAs()</code>. (markt)
      </fix>
      <add>
        When running under Java 9 or later, and the
        <code>urlCacheProtection</code> option of the
        <code>JreMemoryLeakPreventionListener</code> is enabled, use the API
        added in Java 9 to only disable the caching for JAR URL connections.
        (markt)
      </add>
      <add>
        <bug>61489</bug>: When using the CGI servlet, make the generation of
        command line arguments from the query string (as per section 4.4 of RFC
        3875) optional and disabled by default. Based on a patch by jm009.
        (markt)
      </add>
      <fix>
        <bug>61503</bug>: This corrects a potential regression in the fix for
        <bug>60940</bug> with an alternative solution that adds the
        <code>JarEntry</code> objects normally skipped by a
        <code>JarInputStream</code> only if those entries exist. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Coyote">
    <changelog>
      <update>
        The minimum required Tomcat Native version has been increased to 1.2.14.
        This version includes a new API needed for correct client certificate
        support when using a Java connector with OpenSSL TLS implementation and
        support for the <code>SSL_CONF</code> OpenSSL API. (rjung)
      </update>
      <add>
        Add support for the OpenSSL <code>SSL_CONF</code> API when using
        TLS with OpenSSL implementation. It can be used by adding
        <code>OpenSSLConf</code> elements underneath <code>SSLHostConfig</code>.
        The new element contains a list of <code>OpenSSLConfCmd</code> elements,
        each with the attributes <code>name</code> and <code>value</code>.
        (rjung)
      </add>
      <fix>
        When using a Java connector in combination with the OpenSSL TLS
        implementation, do not configure each SSL connection object via
        the OpenSSLEngine. For OpenSSL the SSL object inherits its
        settings from the SSL_CTX which we have already configured.
        (rjung)
      </fix>
      <fix>
        When using JSSE TLS configuration with the OpenSSL implementation and
        client certificates: include client CA subjects in the TLS handshake
        so that the client can choose an appropriate client certificate to
        present. (rjung)
      </fix>
      <fix>
        If an invalid option is specified for the
        <code>certificateVerification</code> attribute of an
        <code>SSLHostConfig</code> element, treat it as <code>required</code>
        which is the most secure / restrictive option in addition to reporting
        the configuration error. (markt)
      </fix>
      <fix>
        Improve the handling of client disconnections during the TLS
        renegotiation handshake. (markt)
      </fix>
      <fix>
        Prevent exceptions being thrown during normal shutdown of NIO
        connections. This enables TLS connections to close cleanly. (markt)
      </fix>
      <fix>
        Fix possible race condition when setting IO listeners on an upgraded
        connection. (remm)
      </fix>
      <fix>
        Ensure that the APR/native connector uses blocking I/O for TLS
        renegotiation. (markt)
      </fix>
      <fix>
        <bug>48655</bug>: Enable Tomcat to shutdown cleanly when using sendfile,
        the APR/native connector and a multi-part download is in progress.
        (markt)
      </fix>
      <fix>
        <bug>58244</bug>: Handle the case when OpenSSL resumes a TLS session
        using a ticket and the full client certificate chain is not available.
        In this case the client certificate without the chain will be presented
        to the application. (markt)
      </fix>
      <fix>
        Improve the warning message when JSSE and OpenSSL configuration styles
        are mixed on the same <code>SSLHostConfig</code>. (markt)
      </fix>
      <fix>
        <bug>61415</bug>: Fix TLS renegotiation with OpenSSL based connections
        and session caching. (markt)
      </fix>
      <fix>
        Delay checking that the configured attributes for an
        <code>SSLHostConfig</code> instance are consistent with the configured
        SSL implementation until <code>Connector</code> start to avoid incorrect
        warnings when the SSL implementation changes during initialisation.
        (markt)
      </fix>
      <fix>
        <bug>61450</bug>: Fix default key alias algorithm. (remm)
      </fix>
      <fix>
        <bug>61451</bug>: Correct a regression in the fix to enable the use of
        Java key stores that contained multiple keys that did not all have the
        same password. The regression broke support for any key store that did
        not store keys in PKCS #8 format such as hardware key stores and Windows
        key stores. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="WebSocket">
    <changelog>
      <fix>
        <bug>60523</bug>: Reduce the number of packets used to send WebSocket
        messages by not flushing between the header and the payload when the
        two are written together. (markt)
      </fix>
      <fix>
        <bug>61491</bug>: When using the <code>permessage-deflate</code>
        extension, correctly handle the sending of empty messages after
        non-empty messages to avoid the <code>IllegalArgumentException</code>.
        (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Web applications">
    <changelog>
      <fix>
        Show connector cipher list in the manager web application in the
        correct cipher order. (rjung)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Tribes">
    <changelog>
      <fix>
        To avoid unexpected session timeout notification from backup session,
        update the access time when receiving the map member notification
        message. (kfujino)
      </fix>
      <fix>
        Add member info to the log message when the failure detection check
        fails in <code>TcpFailureDetector</code>. (kfujino)
      </fix>
      <fix>
        Avoid Ping timeout until the added map member by receiving
        <code>MSG_START</code> message is completely started. (kfujino)
      </fix>
      <fix>
        When sending a channel message, make sure that the Sender has connected.
        (kfujino)
      </fix>
      <fix>
        Correct the backup node selection logic that node 0 is returned twice
        consecutively. (kfujino)
      </fix>
      <fix>
        Fix race condition of <code>responseMap</code> in
        <code>RpcChannel</code>. (kfujino)
      </fix>
    </changelog>
  </subsection>
  <subsection name="jdbc-pool">
    <changelog>
      <fix>
        <bug>61391</bug>: Ensure that failed queries are logged if the
        <code>SlowQueryReport</code> interceptor is configured to do so and the
        connection has been abandoned. Patch provided by Craig Webb. (markt)
      </fix>
      <fix>
        <bug>61425</bug>: Ensure that transaction of idle connection has
        terminated  when the <code>testWhileIdle</code> is set to
        <code>true</code> and <code>defaultAutoCommit</code> is set to
        <code>false</code>. Patch provided by WangZheng. (kfujino)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Other">
    <changelog>
      <fix>
        <bug>61419</bug>: Replace a Unix style comment in the DOS bat file
        <code>catalina.bat</code> with the correct <code>rem</code> markup.
        (rjung)
      </fix>
      <fix>
        <bug>61439</bug>: Remove the Java Annotation API classes from
        tomcat-embed-core.jar and package them in a separate JAR in the
        embedded distribution to provide end users with greater flexibility to
        handle potential conflicts with the JRE and/or other JARs. (markt)
      </fix>
      <fix>
        <bug>61441</bug>: Improve the detection of <code>JAVA_HOME</code> by the
        <code>daemon.sh</code> script when running on a platform where Java has
        been installed from an RPM. (rjung)
      </fix>
      <update>
        Update the packaged version of the Tomcat Native Library to 1.2.14 to
        pick up the latest Windows binaries built with APR 1.6.2 and OpenSSL
        1.0.2l. (markt)
      </update>
      <update>
        <bug>61599</bug>: Update to Commons Daemon 1.1.0 for improved Java 9
        support. (markt)
      </update>
    </changelog>
  </subsection>
</section>
<section name="Tomcat 9.0.0.M26 (markt)" rtext="2017-08-08">
  <subsection name="Catalina">
    <changelog>
      <fix>
        Correct multiple regressions in the fix for <bug>49464</bug> that could
        corrupt static content served by the <code>DefaultServlet</code>.(markt)
      </fix>
      <fix>
        Correct a bug in the <code>PushBuilder</code> implementation that
        meant push URLs containing <code>%nn</code> sequences were not correctly
        decoded. Identified by FindBugs. (markt)
      </fix>
      <add>
        <bug>61164</bug>: Add support for the <code>%X</code> pattern in the
        <code>AccessLogValve</code> that reports the connection status at the
        end of the request. Patch provided by Zemian Deng. (markt)
      </add>
      <fix>
        <bug>61351</bug>: Correctly handle %nn decoding of URL patterns in
        web.xml and similar locations that may legitimately contain characters
        that are not permitted by RFC 3986. (markt)
      </fix>
      <add>
        <bug>61366</bug>: Add a new attribute, <code>localDataSource</code>, to
        the <code>JDBCStore</code> that allows the Store to be configured to use
        a DataSource defined by the web application rather than the default of
        using a globally defined DataSource. Patch provided by Jonathan
        Horowitz. (markt)
      </add>
    </changelog>
  </subsection>
  <subsection name="Coyote">
    <changelog>
      <fix>
        <bug>61086</bug>: Ensure to explicitly signal an empty request body for
        HTTP 205 responses. Additional fix to r1795278. Based on a patch
        provided by Alexandr Saperov. (violetagg)
      </fix>
      <update>
        <bug>61345</bug>: Add a server listener that can be used to do system
        property replacement from the property source configured in the
        digester. (remm)
      </update>
      <add>
        Add additional logging to record problems that occur while waiting for
        the NIO pollers to stop during the Connector stop process. (markt)
      </add>
    </changelog>
  </subsection>
  <subsection name="Jasper">
    <changelog>
      <fix>
        <bug>61364</bug>: Ensure that files are closed after detecting encoding
        of JSPs so that files do not remain locked by the file system. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="WebSocket">
    <changelog>
      <add>
        <bug>57767</bug>: Add support to the WebSocket client for following
        redirects when attempting to establish a WebSocket connection. Patch
        provided by J Fernandez. (markt)
      </add>
    </changelog>
  </subsection>
</section>
<section name="Tomcat 9.0.0.M25 (markt)" rtext="2017-07-28">
  <subsection name="Catalina">
    <changelog>
      <fix>
        Performance improvements for service loader look-ups (and look-ups of
        other class loader resources) when the web application is deployed in a
        packed WAR file. (markt)
      </fix>
      <fix>
        <bug>60963</bug>: Add <code>ExtractingRoot</code>, a new
        <code>WebResourceRoot</code> implementation that extracts JARs to the
        work directory for improved performance when deploying packed WAR files.
        (markt)
      </fix>
      <fix>
        <bug>61253</bug>: Add warn message when Digester.updateAttributes
        throws an exception instead of ignoring it. (csutherl)
      </fix>
      <fix>
        Correct a further regression in the fix for <bug>49464</bug> that could
        cause an byte order mark character to appear at the start of content
        included by the <code>DefaultServlet</code>. (markt)
      </fix>
      <fix>
        <bug>61313</bug>: Make the read timeout configurable in the
        <code>JNDIRealm</code> and ensure that a read timeout will result in an
        attempt to fail over to the alternateURL. Based on patches by Peter
        Maloney and Felix Schumacher. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Web applications">
    <changelog>
      <fix>
        Correct the documentation for how <code>StandardRoot</code> is
        configured. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Other">
    <changelog>
      <fix>
        <bug>61316</bug>: Fix corruption of UTF-16 encoded source files in
        released source distributions. (markt)
      </fix>
    </changelog>
  </subsection>
</section>
<section name="Tomcat 9.0.0.M24 (markt)" rtext="not released">
  <subsection name="Catalina">
    <changelog>
      <add>
        <bug>52924</bug>: Add support for a Tomcat specific deployment
        descriptor, <code>/WEB-INF/tomcat-web.xml</code>. This descriptor has an
        identical format to <code>/WEB-INF/web.xml</code>. The Tomcat descriptor
        takes precedence over any settings in <code>conf/web.xml</code> but does
        not take precedence over any settings in <code>/WEB-INF/web.xml</code>.
        (markt)
      </add>
      <fix>
        <bug>61232</bug>: When log rotation is disabled only one separator will
        be used when generating the log file name. For example if the prefix is
        <code>catalina.</code> and the suffix is <code>.log</code> then the log
        file name will be <code>catalina.log</code> instead of
        <code>catalina..log</code>. Patch provided by Katya Stoycheva.
        (violetagg)
      </fix>
      <fix>
        <bug>61264</bug>: Correct a regression in the refactoring to use
        <code>Charset</code> rather than <code>String</code> to store request
        character encoding that prevented <code>getReader()</code> throwing an
        <code>UnsupportedEncodingException</code> if the user agent specifies
        an unsupported character encoding. (markt)
      </fix>
      <fix>
        Correct a regression in the fix for <bug>49464</bug> that could cause an
        incorrect <code>Content-Length</code> header to be sent by the
        <code>DefaultServlet</code> if the encoding of a static is not
        consistent with the encoding of the response. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Coyote">
    <changelog>
      <fix>
        Enable TLS connectors to use Java key stores that contain multiple keys
        where each key has a separate password. Based on a patch by Frank
        Taffelt. (markt)
      </fix>
      <fix>
        Improve the handling of HTTP/2 stream resets due to excessive headers
        when a continuation frame is used. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Jasper">
    <changelog>
      <add>
        <bug>53031</bug>: Add support for the <code>fork</code> option when
        compiling JSPs with the Jasper Ant task and javac. (markt)
      </add>
    </changelog>
  </subsection>
  <subsection name="Other">
    <changelog>
      <add>
        <bug>52791</bug>: Add the ability to set the defaults used by the
        Windows installer from a configuration file. Patch provided by Sandra
        Madden. (markt)
      </add>
    </changelog>
  </subsection>
</section>
<section name="Tomcat 9.0.0.M23 (markt)" rtext="not released">
  <subsection name="Catalina">
    <changelog>
      <fix>
        <bug>49464</bug>: Improve the Default Servlet's handling of static files
        when the file encoding is not compatible with the required response
        encoding. (markt)
      </fix>
      <fix>
        <bug>61214</bug>: Remove deleted attribute <code>servlets</code> from
        the Context MBean description. Patch provided by Alexis Hassler. (markt)
      </fix>
      <fix>
        <bug>61215</bug>: Correctly define <code>addConnectorPort</code> and
        <code>invalidAuthenticationWhenDeny</code> in the
        <code>mbean-descriptors.xml</code> file for the
        <code>org.apache.catalina.valves</code> package so that the attributes
        are accessible via JMX. (markt)
      </fix>
      <fix>
        <bug>61216</bug>: Improve layout for <code>CompositeData</code> and
        <code>TabularData</code> when viewing via the JMX proxy servlet. Patch
        provided by Alexis Hassler. (markt)
      </fix>
      <fix>
        Additional permission for deleting files is granted to JULI as it is
        required by FileHandler when running under a Security Manager. The
        thread that cleans the log files is marked as daemon thread.
        (violetagg)
      </fix>
      <fix>
        <bug>61229</bug>: Correct a regression in 9.0.0.M21 that broke WebDAV
        handling for resources with names that included a <code>&amp;</code>
        character. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Coyote">
    <changelog>
      <fix>
        Restore the ability to configure support for SSLv3. Enabling this
        protocol will trigger a warning in the logs since it is known to be
        insecure. (markt)
      </fix>
      <add>
        Add LoadBalancerDrainingValve, a Valve designed to reduce the amount of
        time required for a node to drain its authenticated users. (schultz)
      </add>
      <fix>
        Do not log a warning when a <code>null</code> session is returned for an
        OpenSSL based TLS session since this is expected when session tickets
        are enabled. (markt)
      </fix>
      <fix>
        When the access log valve logs a TLS related request attribute and the
        NIO2 connector is used with OpenSSL, ensure that the TLS attributes are
        available to the access log valve when the connection is closing.
        (markt)
      </fix>
      <fix>
        <bug>60461</bug>: Sync SSL session access for the APR connector. (remm)
      </fix>
      <fix>
        <bug>61224</bug>: Make the <code>GlobalRequestProcessor</code> MBean
        attributes read-only. Patch provided by Alexis Hassler. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Jasper">
    <changelog>
      <fix>
        <bug>49176</bug>: When generating JSP runtime error messages that quote
        the relevant JSP source code, switch from using the results of the JSP
        page parsing process to using the JSR 045 source map data to identify
        the correct part of the JSP source from the stack trace. This
        significantly reduces the memory footprint of Jasper in development
        mode, provides a small performance improvement for error page generation
        and enables source quotes to continue to be provided after a Tomcat
        restart. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Web applications">
    <changelog>
      <fix>
        Remove references to the Loader attribute
        <code>searchExternalFirst</code> from the documentation since the
        attribute is no longer supported. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Tribes">
    <changelog>
      <add>
        <bug>51513</bug>: Add support for the <code>compressionMinSize</code>
        attribute to the <code>GzipInterceptor</code>, add optional statistics
        collection and expose the Interceptor over JMX. Based on a patch by
        Christian Stöber. (markt)
      </add>
      <add>
        <bug>61127</bug>: Allow human-readable names for channelSendOptions and
        mapSendOptions. Patch provided by Igal Sapir. (schultz)
      </add>
    </changelog>
  </subsection>
  <subsection name="Other">
    <changelog>
      <scode>
        Restore the local definition of the web service annotations since the
        JRE provided versions are deprecated and Java 9 does not provide them by
        default. (markt)
      </scode>
      <fix>
        Add necessary Java 9 configuration options to the startup scripts to
        prevent warnings being generated on web application stop. (markt)
      </fix>
    </changelog>
  </subsection>
</section>
<section name="Tomcat 9.0.0.M22 (markt)" rtext="2017-06-26">
  <subsection name="Catalina">
    <changelog>
      <fix>
        <bug>48543</bug>: Add the option to specify an alternative file name for
        the <code>catalina.config</code> system property. Also document that
        relative, as well as absolute, URLs are permitted. (markt)
      </fix>
      <fix>
        <bug>61072</bug>: Respect the documentation statements that allow
        using the platform default secure random for session id generation.
        (remm)
      </fix>
      <fix>
        Correct the javadoc for
        <code>o.a.c.connector.CoyoteAdapter#parseSessionCookiesId</code>.
        Patch provided by John Andrew (XUZHOUWANG) via Github. (violetagg)
      </fix>
      <fix>
        <bug>61101</bug>: CORS filter should set Vary header in response.
        Submitted by Rick Riemer. (remm)
      </fix>
      <add>
        <bug>61105</bug>: Add a new JULI FileHandler configuration for
        specifying the maximum number of days to keep the log files. By default
        the log files will be kept 90 days as configured in
        <code>logging.properties</code>. (violetagg)
      </add>
      <update>
        Update the Servlet 4.0 implementation to add support for setting
        trailer fields for HTTP responses. (markt)
      </update>
      <fix>
        <bug>61125</bug>: Ensure that <code>WarURLConnection</code> returns the
        correct value for calls to <code>getLastModified()</code> as this is
        required for the correct detection of JSP modifications when the JSP is
        packaged in a WAR file. (markt)
      </fix>
      <fix>
        Improve the <code>SSLValve</code> so it is able to handle client
        certificate headers from Nginx. Based on a patch by Lucas Ventura Carro.
        (markt)
      </fix>
      <fix>
        <bug>61134</bug>: Do not use '[' and ']' symbols around substituted
        text fragments when generating the default error pages. Patch provided
        by Katya Todorova. (violetagg)
      </fix>
      <fix>
        <bug>61154</bug>: Allow the Manager and Host Manager web applications to
        start by default when running under a security manager. This was
        accomplished by adding a custom permission,
        <code>org.apache.catalina.security.DeployXmlPermission</code>, that
        permits an application to use a <code>META-INF/context.xml</code> file
        and then granting that permission to the Manager and Host Manager.
        (markt)
      </fix>
      <fix>
        <bug>61173</bug>: Polish the javadoc for
        <code>o.a.catalina.startup.Tomcat</code>. Patch provided by
        peterhansson_se. (violetagg)
      </fix>
      <add>
        A new configuration property <code>crawlerIps</code> is added to the
        <code>o.a.catalina.valves.CrawlerSessionManagerValve</code>. Using this
        property one can specify a regular expression that will be used to
        identify crawlers based on their IP address. Based on a patch provided
        by Tetradeus. (violetagg)
      </add>
      <fix>
        <bug>61180</bug>: Log a warning message rather than an information
        message if it takes more than 100ms to initialised a
        <code>SecureRandom</code> instance for a web application to use to
        generate session identifiers. Patch provided by Piotr Chlebda. (markt)
      </fix>
      <fix>
        <bug>61185</bug>: When an asynchronous request is dispatched via
        <code>AsyncContext.dispatch()</code> ensure that
        <code>getRequestURI()</code> for the dispatched request matches that of
        the original request. (markt)
      </fix>
      <fix>
        <bug>61197</bug>: Ensure that the charset name used in the
        <code>Content-Type</code> header has exactly the same form as that
        provided by the application. This reverts a behavioural change in
        9.0.0.M21 that caused problems for some clients. (markt)
      </fix>
      <fix>
        <bug>61201</bug>: Ensure that the <code>SCRIPT_NAME</code> environment
        variable for CGI executables is populated in a consistent way regardless
        of how the CGI servlet is mapped to a request. (markt)
      </fix>
      <fix>
        Ensure to send a space between trailer field name and field value
        for HTTP responses trailer fields. (huxing)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Coyote">
    <changelog>
      <fix>
        <bug>61086</bug>: Explicitly signal an empty request body for HTTP 205
        responses. (markt)
      </fix>
      <fix>
        <bug>61120</bug>: Do not ignore path parameters when processing HTTP/2
        requests. (markt)
      </fix>
      <fix>
        Revert a change introduced in the fix for bug <bug>60718</bug> that
        changed the status code recorded in the access log when the client
        dropped the connection from 200 to 500. (markt)
      </fix>
      <fix>
        Make asynchronous error handling more robust. In particular ensure that
        <code>onError()</code> is called for any registered
        <code>AsyncListener</code>s after an I/O error on a non-container
        thread. (markt)
      </fix>
      <fix>
        Add additional syncs to the SSL session object provided by the OpenSSL
        engine so that a concurrent destruction cannot cause a JVM crash.
        (remm)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Jasper">
    <changelog>
      <fix>
        <bug>44787</bug>: Improve error message when JSP compiler configuration
        options are not valid. (markt)
      </fix>
      <add>
        <bug>45931</bug>: Extend Jasper's <code>timeSpaces</code> option to add
        support for <code>single</code> which replaces template text that
        consists entirely of whitespace with a single space character. Based on
        a patch by Meetesh Karia. (markt)
      </add>
      <fix>
        <bug>53011</bug>: When pre-compiling with JspC, report all compilation
        errors rather than stopping after the first error. A new option
        <code>-failFast</code> can be used to restore the previous behaviour of
        stopping after the first error. Based on a patch provided by Marc Pompl.
        (markt)
      </fix>
      <fix>
        <bug>61137</bug>: <code>j.s.jsp.tagext.TagLibraryInfo#uri</code> and
        <code>j.s.jsp.tagext.TagLibraryInfo#prefix</code> fields should not be
        final. Patch provided by Katya Todorova. (violetagg)
      </fix>
    </changelog>
  </subsection>
  <subsection name="WebSocket">
    <changelog>
      <fix>
        Correct the log message when a <code>MessageHandler</code> for
        <code>PongMessage</code> does not implement
        <code>MessageHandler.Whole</code>. (rjung)
      </fix>
      <fix>
        Improve thread-safety of <code>Future</code>s used to report the result
        of sending WebSocket messages. (markt)
      </fix>
      <fix>
        <bug>61183</bug>: Correct a regression in the previous fix for
        <bug>58624</bug> that could trigger a deadlock depending on the locking
        strategy employed by the client code. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Web applications">
    <changelog>
      <fix>
        Better document the meaning of the trimSpaces option for Jasper. (markt)
      </fix>
      <fix>
        <bug>61150</bug>: Configure the Manager and Host-Manager web
        applications to permit serialization and deserialization of
        CRSFPreventionFilter related session objects to avoid warning messages
        and/or stack traces on web application stop and/or start when running
        under a security manager. (markt)
      </fix>
      <fix>
        Correct the TLS configuration documentation to remove SSLv2 and SSLv3
        from the list of supported protocols. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Other">
    <changelog>
      <add>
        <bug>45832</bug>: Add HTTP DIGEST authentication support to the Catalina
        Ant tasks used to communicate with the Manager application. (markt)
      </add>
      <fix>
        <bug>45879</bug>: Add the <code>RELEASE-NOTES</code> file to the root of
        the installation created by the Tomcat installer for Windows to make it
        easier for users to identify the installed Tomcat version. (markt)
      </fix>
      <fix>
        <bug>61055</bug>: Clarify the code comments in the rewrite valve to make
        clear that there are no plans to provide proxy support for this valve
        since Tomcat does not have proxy capabilities. (markt)
      </fix>
      <fix>
        <bug>61076</bug>: Document the <code>altDDName</code> attribute for the
        <code>Context</code> element. (markt)
      </fix>
      <fix>
        Correct typo in Jar Scan Filter Configuration Reference.
        Issue reported via comments.apache.org. (violetagg)
      </fix>
      <fix>
        Correct the requirement for the minimum Java SE version in Application
        Developer's Guide. Issue reported via comments.apache.org. (violetagg)
      </fix>
      <fix>
        <bug>61145</bug>: Add missing <code>@Documented</code> annotation to
        annotations in the annotations API. Patch provided by Katya Todorova.
        (markt)
      </fix>
      <fix>
        <bug>61146</bug>: Add missing <code>lookup()</code> method to
        <code>@EJB</code> annotation in the annotations API. Patch provided by
        Katya Todorova. (markt)
      </fix>
      <fix>
        Correct typo in Context Container Configuration Reference.
        Patch provided by Katya Todorova. (violetagg)
      </fix>
    </changelog>
  </subsection>
</section>
<section name="Tomcat 9.0.0.M21 (markt)" rtext="2017-05-10">
  <subsection name="General">
    <changelog>
      <add>
        Allow to exclude JUnit test classes using the build property
        <code>test.exclude</code> and document the property in
        BUILDING.txt. (rjung)
      </add>
    </changelog>
  </subsection>
  <subsection name="Catalina">
    <changelog>
      <fix>
        Review those places where Tomcat re-encodes a URI or URI component and
        ensure that the correct encoding (path differs from query string) is
        applied and that the encoding is applied consistently. (markt)
      </fix>
      <fix>
        Avoid a <code>NullPointerException</code> when reading attributes for a
        initialised HTTP connector where TLS is enabled. (markt)
      </fix>
      <fix>
        Always quote the <code>hostName</code> of an <code>SSLHostConfig</code>
        element when using it as part of the JMX object name to avoid errors that
        prevent the associated TLS connector from starting if a wild card
        <code>hostName</code> is configured (because <code>*</code> is a
        reserved character for JMX object names). (markt)
      </fix>
      <update>
        Update the default <code>URIEncoding</code> for a <code>Connector</code>
        to <code>UTF-8</code> as required by the Servlet 4.0 specification.
        (markt)
      </update>
      <scode>
        Switch to using <code>Charset</code> rather than <code>String</code> to
        store encoding settings (including for configuration and for the
        <code>Content-Type header</code>) to reduce the number of places the
        associated <code>Charset</code> needs to be looked up. (markt)
      </scode>
      <fix>
        Use a more reliable mechanism for the <code>DefaultServlet</code> when
        determining if the current request is for custom error page or not.
        (markt)
      </fix>
      <fix>
        Ensure that when the Default or WebDAV servlets process an error
        dispatch that the error resource is processed via the
        <code>doGet()</code> method irrespective of the method used for the
        original request that triggered the error. (markt)
      </fix>
      <fix>
        If a static custom error page is specified that does not exist or cannot
        be read, ensure that the intended error status is returned rather than a
        404 or 403. (markt)
      </fix>
      <fix>
        When the WebDAV servlet is configured and an error dispatch is made to a
        custom error page located below <code>WEB-INF</code>, ensure that the
        target error page is displayed rather than a 404 response. (markt)
      </fix>
      <update>
        Update the Servlet 4.0 implementation to add support for obtaining
        trailer fields from chunked HTTP requests. (markt)
      </update>
      <add>
        <bug>61047</bug>: Add MIME mapping for woff2 fonts in the default
        web.xml. Patch provided by Justin Williamson. (violetagg)
      </add>
      <fix>
        Correct the logic that selects the encoding to use to decode the query
        string in the <code>SSIServletExternalResolver</code> so that the
        <code>useBodyEncodingForURI</code> attribute of the
        <code>Connector</code> is correctly taken into account. (markt)
      </fix>
      <fix>
        Within the Expires filter, make the content type value specified with the
        <code>ExpiresByType</code> parameter, case insensitive. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Coyote">
    <changelog>
      <fix>
        When a <code>TrustManager</code> is configured that does not support
        <code>certificateVerificationDepth</code> only log a warning about that
        lack of support when <code>certificateVerificationDepth</code> has been
        explicitly set. (markt)
      </fix>
      <fix>
        <bug>60970</bug>: Extend the fix for large headers to push requests.
        (markt)
      </fix>
      <fix>
        Do not include a <code>Date</code> header in HTTP/2 responses with
        status codes less than 200. (markt)
      </fix>
      <fix>
        When sending an HTTP/2 push promise with the NIO2 connector, the pushed
        stream ID should only be included with the initial push promise frame
        and not any subsequent continuation frames. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Jasper">
    <changelog>
      <fix>
        When no BOM is present and an encoding is detected, do not skip the
        bytes used to detect the encoding since they are not part of a BOM.
        (markt)
      </fix>
      <update>
        <bug>61057</bug>: Update to Eclipse JDT Compiler 4.6.3. (violetagg)
      </update>
      <fix>
        <bug>61065</bug>: Ensure that once the class is resolved by
        <code>javax.el.ImportHandler#resolveClass</code> it will be cached with
        the proper name. (violetagg)
      </fix>
    </changelog>
  </subsection>
  <subsection name="WebSocket">
    <changelog>
      <add>
        Introduce new API <code>o.a.tomcat.websocket.WsSession#suspend</code>/
        <code>o.a.tomcat.websocket.WsSession#resume</code> that can be used to
        suspend/resume reading of the incoming messages. (violetagg)
      </add>
      <fix>
        <bug>61003</bug>: Ensure the flags for reading/writing in
        <code>o.a.t.websocket.AsyncChannelWrapperSecure</code> are correctly
        reset even if some exceptions occurred during processing. (markt/violetagg)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Web Applications">
    <changelog>
      <add>
        Add documents for <code>maxIdleTime</code> attribute to Channel Receiver
        docs. (kfujino)
      </add>
    </changelog>
  </subsection>
  <subsection name="Tribes">
    <changelog>
      <add>
        Add features to get the statistics of the thread pool of the
        <code>Receiver</code> component and
        <code>MessageDispatchInterceptor</code>. These statistics information
        can be acquired via JMX. (kfujino)
      </add>
      <add>
        Add <code>maxIdleTime</code> attribute to <code>NioReceiverMBean</code>
        in order to expose to JMX. (kfujino)
      </add>
      <add>
        Add JMX support for <code>Channel Interceptors</code>. The Interceptors
        that implement JMX support are <code>TcpFailureDetector</code>,
        <code>ThroughputInterceptor</code>, <code>TcpPingInterceptor</code>,
        <code>StaticMembershipInterceptor</code>,
        <code>MessageDispatchInterceptor</code> and
        <code>DomainFilterInterceptor</code>. (kfujino)
      </add>
    </changelog>
  </subsection>
  <subsection name="Other">
    <changelog>
      <add>
        Modify the Ant build script used to publish to a Maven repository so
        that it no longer requires artifacts to be GPG signed. This is make it
        possible for the CI system to upload snapshot builds to the ASF Maven
        repository. (markt)
      </add>
    </changelog>
  </subsection>
</section>
<section name="Tomcat 9.0.0.M20 (markt)" rtext="2017-04-18">
  <subsection name="Catalina">
    <changelog>
      <update>
        Update the Servlet 4.0 API implementation to reflect the change in
        method name from <code>getPushBuilder()</code> to
        <code>newPushBuilder()</code>. (markt)
      </update>
      <fix>
        Correct various edge cases in the new HTTP Host header validation
        parser. Patch provided by Katya Todorova. (martk)
      </fix>
      <fix>
        Correct a regression in the X to comma refactoring that broke JMX
        operations that take parameters. (markt)
      </fix>
      <fix>
        Avoid a <code>NullPointerException</code> when reading attributes for a
        running HTTP connector where TLS is not enabled. (markt)
      </fix>
      <fix>
        <bug>47214</bug>: Refactor code so that explicitly referenced inner
        classes are given explicit names rather than being anonymous. (markt)
      </fix>
      <fix>
        <bug>59825</bug>: Log a message that lists the components in the
        processing chain that do not support async processing when a call to
        <code>ServletRequest.startAsync()</code> fails. (markt)
      </fix>
      <fix>
        <bug>60940</bug>: Improve the handling of the <code>META-INF/</code> and
        <code>META-INF/MANIFEST.MF</code> entries for Jar files located in
        <code>/WEB-INF/lib</code> when running a web application from a packed
        WAR file. (markt)
      </fix>
      <fix>
        Pre-load the <code>ExceptionUtils</code> class. Since the class is used
        extensively in error handling, it is prudent to pre-load it to avoid any
        failure to load this class masking the true problem during error
        handling. (markt)
      </fix>
      <fix>
        Avoid potential <code>NullPointerException</code>s related to access
        logging during shutdown, some of which have been observed when running
        the unit tests. (markt)
      </fix>
      <fix>
        When there is no <code>javax.servlet.WriteListener</code> registered
        then a call to <code>javax.servlet.ServletOutputStream#isReady</code>
        will return <code>false</code> instead of throwing
        <code>IllegalStateException</code>. (violetagg)
      </fix>
      <fix>
        When there is no <code>javax.servlet.ReadListener</code> registered
        then a call to <code>javax.servlet.ServletInputStream#isReady</code>
        will return <code>false</code> instead of throwing
        <code>IllegalStateException</code>. (violetagg)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Coyote">
    <changelog>
      <fix>
        Align cipher configuration parsing with current OpenSSL master. (markt)
      </fix>
      <fix>
        <bug>60970</bug>: Fix infinite loop if application tries to write a
        large header to the response when using HTTP/2. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Jasper">
    <changelog>
      <fix>
        <bug>47214</bug>: Refactor code so that explicitly referenced inner
        classes are given explicit names rather than being anonymous. (markt)
      </fix>
      <fix>
        <bug>60925</bug>: Improve the handling of access to properties defined
        by interfaces when a <code>BeanELResolver</code> is used under a
        <code>SecurityManager</code>. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Tribes">
    <changelog>
      <add>
        Add JMX support for Tribes components. (kfujino)
      </add>
    </changelog>
  </subsection>
  <subsection name="jdbc-pool">
    <changelog>
      <scode>
        Refactor the creating a constructor for a proxy class to reduce
        duplicate code. (kfujino)
      </scode>
      <fix>
        In <code>StatementFacade</code>, the method call on the statements that
        have been closed throw <code>SQLException</code> rather than
        <code>NullPointerException</code>. (kfujino)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Other">
    <changelog>
      <fix>
        <bug>60932</bug>: Correctly escape single quotes when used in i18n
        messages. Based on a patch by Michael Osipov. (markt)
      </fix>
      <scode>
        Review i18n property files, remove unnecessary escaping and consistently
        use <code>[...]</code> to delimit inserted values. (markt)
      </scode>
      <fix>
        Update the custom Ant task that integrates with the Symantec code
        signing service to use the now mandatory 2-factor authentication.
        (markt)
      </fix>
      <scode>
        Refactoring in preparation for Java 9. Refactor to avoid using some
        methods that will be deprecated in Java 9 onwards. (markt)
      </scode>
    </changelog>
  </subsection>
</section>
<section name="Tomcat 9.0.0.M19 (markt)" rtext="2017-03-30">
  <subsection name="Catalina">
    <changelog>
      <add>
        <bug>54618</bug>: Add support to the
        <code>HttpHeaderSecurityFilter</code> for the HSTS preload parameter.
        (markt)
      </add>
      <fix>
        Correct a bug in the implementation of the Servlet 4.0 feature that
        allows specifying a default request and/or response character encoding
        per web application. <code>null</code> values passed via the
        programmatic interface no longer trigger a
        <code>NullPointerException</code>. (markt)
      </fix>
      <fix>
        Correct a potential exception during shutdown when one or more
        Containers are configured with a value of 1 for startStopThreads.
        (markt)
      </fix>
      <fix>
        <bug>60853</bug>: Expose the <code>SSLHostConfig</code> and
        <code>SSLHostConfigCertificate</code> objects via JMX. (markt)
      </fix>
      <fix>
        <bug>60876</bug>: Ensure that <code>Set-Cookie</code> headers generated
        by the <code>Rfc6265CookieProcessor</code> are aligned with the
        specification. Patch provided by Jim Griswold. (markt)
      </fix>
      <fix>
        <bug>60882</bug>: Fix a <code>NullPointerException</code> when obtaining
        a <code>RequestDispatcher</code> for a request that will not have any
        pathInfo associated with it. This was a regression in the changes in
        9.0.0.M18 for the Servlet 4.0 API changes. (markt)
      </fix>
      <update>
        Align <code>PushBuilder</code> API with changes from the Servlet expert
        group. (markt)
      </update>
      <update>
        Align web.xml parsing rules with changes from the Servlet expert group
        for <code>&lt;request-character-encoding&gt;</code> and
        <code>&lt;response-character-encoding&gt;</code>. (markt)
      </update>
      <scode>
        Refactor the various implementations of X to comma separated list to a
        single utility class and update the code to use the new utility class.
        (markt)
      </scode>
      <fix>
        <bug>60911</bug>: Ensure NPE will not be thrown when looking for SSL
        session ID. Based on a patch by Didier Gutacker. (violetagg)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Coyote">
    <changelog>
      <fix>
        Add async based IO groundwork for HTTP/2. (remm)
      </fix>
      <fix>
        Fix HTTP/2 incorrect input unblocking on EOF. (remm)
      </fix>
      <fix>
        Close the connection sooner if an event occurs for a current connection
        that is not consistent with the current state of that connection.
        (markt)
      </fix>
      <fix>
        Speed up shutdown when using multiple acceptor threads by ensuring that
        the code that unlocks the acceptor threads correctly handles the case
        where there are multiple threads. (markt)
      </fix>
      <fix>
        <bug>60851</bug>: Add <code>application/xml</code> and
        <code>application/json</code> to the default list of compressible MIME
        types. Patch by Michael Osipov. (markt)
      </fix>
      <fix>
        <bug>60852</bug>: Correctly spell compressible when used in
        configuration attributes and internal code. Based on a patch by Michael
        Osipov. (markt)
      </fix>
      <fix>
        <bug>60900</bug>: Avoid a <code>NullPointerException</code> in the APR
        Poller if a connection is closed at the same time as new data arrives on
        that connection. (markt)
      </fix>
      <fix>
        Improve HPACK specification compliance by fixing some test failures
        reported by the h2spec tool written by Moto Ishizawa. (markt)
      </fix>
      <fix>
        Improve HTTP/2 specification compliance by fixing some test failures
        reported by the h2spec tool written by Moto Ishizawa. (markt)
      </fix>
      <fix>
        <bug>60918</bug>: Fix sendfile processing error that could lead to
        subsequent requests experiencing an <code>IllegalStateException</code>.
        (markt)
      </fix>
      <fix>
        Improve sendfile handling when requests are pipelined. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Jasper">
    <changelog>
      <fix>
        <bug>60844</bug>: Correctly handle the error when fewer parameter values
        than required by the method are used to invoke an EL method expression.
        Patch provided by Daniel Gray. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="jdbc-pool">
    <changelog>
      <fix>
        <bug>60764</bug>: Implement <code>equals()</code> and
        <code>hashCode()</code> in the <code>StatementFacade</code> in order to
        enable these methods to be called on the closed statements if any
        statement proxy is set. This behavior can be changed with
        <code>useStatementFacade</code> attribute. (kfujino)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Other">
    <changelog>
      <fix>
        Refactor the build script and the NSIS installer script so that either
        NSIS 2.x or NSIS 3.x can be used to build the installer. This is
        primarily to re-enable building the installer on the Linux based CI
        system where the combination of NSIS 3.x and wine leads to failed
        installer builds. (markt)
      </fix>
    </changelog>
  </subsection>
</section>
<section name="Tomcat 9.0.0.M18 (markt)" rtext="2017-03-13">
  <subsection name="Catalina">
    <changelog>
      <fix>
        <bug>60469</bug>: Refactor <code>RealmBase</code> for better code re-use
        when implementing Realms that use a custom <code>Principal</code>.
        (markt)
      </fix>
      <fix>
        <bug>60490</bug>: Various formatting and layout improvements for the
        <code>ErrorReportValve</code>. Patch provided by Michael Osipov. (markt)
      </fix>
      <fix>
        <bug>60573</bug>: Remove the reason phrase when sending a
        <code>100</code> response status for consistency with other response
        status lines. Patch provided by Michael Osipov. (markt)
      </fix>
      <update>
        <bug>60596</bug>: Improve performance of DefaultServlet when sendfile
        feature is disabled on connector. (kkolinko)
      </update>
      <scode>
        Make it easier for sub-classes of <code>Tomcat</code> to modify the
        default web.xml settings by over-riding
        <code>getDefaultWebXmlListener()</code>. Patch provided by Aaron
        Anderson. (markt)
      </scode>
      <fix>
        Reduce the contention in the default <code>InstanceManager</code>
        implementation when multiple threads are managing objects and need to
        reference the annotation cache. (markt)
      </fix>
      <fix>
        <bug>60623</bug>: When startStopThreads is 1 (or a special value that
        is equivalent to 1) then rather than using an
        <code>ExecutorService</code> to start the children of the current
        component, the children will be started on the current thread. (markt)
      </fix>
      <scode>
        <bug>60674</bug>: Remove <code>final</code> marker from
        <code>CorsFilter</code> to enable sub-classing. (markt)
      </scode>
      <fix>
        <bug>60683</bug>: Security manager failure causing NPEs when doing IO
        on some JVMs. (csutherl)
      </fix>
      <fix>
        <bug>60688</bug>: Update the internal fork of Apache Commons BCEL to
        r1782855 to add early access Java 9 support to the annotation scanning
        code. (markt)
      </fix>
      <fix>
        <bug>60694</bug>: Prevent NPE during authentication when no JASPIC
        <code>AuthConfigFactory</code> is available. (markt)
      </fix>
      <fix>
        <bug>60697</bug>: When HTTP TRACE requests are disabled on the
        Connector, ensure that the HTTP OPTIONS response from custom servlets
        does not include TRACE in the returned Allow header. (markt)
      </fix>
      <fix>
        <bug>60718</bug>: Improve error handling for asynchronous processing and
        correct a number of cases where the <code>requestDestroyed()</code>
        event was not being fired and an entry wasn't being made in the access
        logs. (markt)
      </fix>
      <fix>
        <bug>60720</bug>: Replace "WWW-Authenticate" literal with static final
        AUTH_HEADER_NAME in SpnegoAuthenticator. Patch provided by Michael
        Osipov. (violetagg)
      </fix>
      <fix>
        The default JASPIC <code>AuthConfigFactory</code> now correctly notifies
        registered <code>RegistrationListener</code>s when a new
        <code>AuthConfigProvider</code> is registered. (markt)
      </fix>
      <scode>
        Improve the performance of <code>AuthenticatorBase</code> when there is
        no JASPIC configuration available. (violetagg)
      </scode>
      <fix>
        When HTTP TRACE requests are disabled on the Connector, ensure that the
        HTTP OPTIONS response from the WebDAV servlet does not include
        TRACE in the returned Allow header. (markt)
      </fix>
      <fix>
        <bug>60722</bug>: Take account of the
        <strong>dispatchersUseEncodedPaths</strong> setting on the current
        <strong>Context</strong> when generating paths for dispatches triggered
        by <code>AsyncContext.dispatch()</code>. (markt)
      </fix>
      <fix>
        <bug>60728</bug>: Make the separator Tomcat uses in the Tomcat specific
        <code>war:file:...</code> URL protocol customizable via a system
        property. The separator is equivalent to the use of the <code>!</code>
        character in <code>jar:file:...</code> URLs. The default separator of
        <code>*</code> remains unchanged. (markt)
      </fix>
      <update>
        Update the Servlet 4.0 API implementation to align with the latest
        proposals from the Servlet 4.0 expert group. This includes updates to
        the new Servlet mapping API, new methods on the
        <code>ServletContext</code> to make the available API more equivalent to
        the deployment descriptor, updates to the HTTP push API and the ability
        to set default request and response character encoding per web
        application. Note that the Servlet 4.0 API is still a work in progress
        and further changes are likely. (markt)
      </update>
      <fix>
        <bug>60798</bug>: Correct a bug in the handling of JARs in unpacked WARs
        that meant multiple attempts to read the same entry from a JAR in
        succession would fail for the second and subsequent attempts. (markt)
      </fix>
      <fix>
        <bug>60808</bug>: Ensure that the <code>Map</code> returned by
        <code>ServletRequest.getParameterMap()</code> is fully immutable. Based
        on a patch provided by woosan. (markt)
      </fix>
      <fix>
        <bug>60824</bug>: Correctly cache the <code>Subject</code> in the
        session - if there is a session - when running under a
        <code>SecurityManager</code>. Patch provided by Jan Engehausen. (markt)
      </fix>
      <fix>
        Ensure request and response facades are used when firing application
        listeners. (markt/remm)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Coyote">
    <changelog>
      <fix>
        Improve handling of case when an HTTP/2 client sends more data that is
        subject to flow control than the current window size allows. (markt)
      </fix>
      <fix>
        Improve NIO2 look-ahead parsing of TLS client hello for SNI with large
        client hello messages. (markt)
      </fix>
      <add>
        Enable ALPN and also, therefore, HTTP/2 for the NIO and NIO2 HTTP
        connectors when using the JSSE implementation for TLS when running on
        Java 9. (markt)
      </add>
      <fix>
        Restore Java 9 direct byte buffer compatibility. (remm)
      </fix>
      <fix>
        <bug>59807</bug>: Provide a better error message when there is no
        <strong>SSLHostConfig</strong> defined with a <code>hostName</code> that
        matches the <code>defaultSSLHostConfigName</code> for the associated
        <strong>Connector</strong>. (markt)
      </fix>
      <fix>
        <bug>60627</bug>: Modify the <code>Rfc6265CookieProcessor</code> so that
        in addition to cookie headers that start with an explicit RFC 2109
        <code>$Version=1</code>, cookies that start with <code>$Version=0</code>
        are also parsed as RFC 2109 cookies. (markt)
      </fix>
      <fix>
        Include the value of <code>SslHostConfig.truststoreAlgorithm</code> when
        warning that the algorithm does not support the
        <code>certificateVerificationDepth</code> configuration option. (markt)
      </fix>
      <fix>
        Ensure that executor thread pools used with connectors pre-start the
        configured minimum number of idle threads. (markt)
      </fix>
      <fix>
        <bug>60716</bug>: Add a new JSSE specific attribute,
        <code>revocationEnabled</code>, to <code>SSLHostConfig</code> to permit
        JSSE provider revocation checks to be enabled when no
        <code>certificateRevocationListFile</code> has been configured. The
        expectation is that configuration will be performed via a JSSE provider
        specific mechanisms. (markt)
      </fix>
      <fix>
        Modify the cookie header generated by the
        <code>Rfc6265CookieProcessor</code> so it always sends an
        <code>Expires</code> attribute as well as a <code>Max-Age</code>
        attribute to avoid problems with Microsoft browsers that do not support
        the <code>Max-Age</code> attribute. (markt)
      </fix>
      <fix>
        <bug>60761</bug>: Expose a protected getter and setter for
        <code>NioEndpoint.stopLatch</code> to make the class easier to extend.
        (markt)
      </fix>
      <fix>
        Prevent blocking reads after a stream exception occurs with HTTP/2.
        (remm)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Jasper">
    <changelog>
      <fix>
        Follow up to the fix for <bug>58178</bug>. When creating the
        <code>ELContext</code> for a tag file, ensure that any registered
        <code>ELContextListener</code>s are fired. (markt)
      </fix>
      <fix>
        Refactor code generated for JSPs to reduce the size of the code required
        for tags. (markt)
      </fix>
      <fix>
        Improve the error handling for simple tags to ensure that the tag is
        released and destroyed once used. (remm, violetagg)
      </fix>
      <fix>
        <bug>60769</bug>: Correct a regression in the XML encoding detection
        refactoring carried out for 9.0.0.M16 that incorrectly always used the
        detected BOM encoding in preference to any encoding specified in the
        prolog. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Cluster">
    <changelog>
      <add>
        Make the <code>accessTimeout</code> configurable in
        <code>BackupManager</code> and <code>ClusterSingleSignOn</code>. The
        <code>accessTimeout</code> is used as a timeout period for PING in
        replication map. (kfujino)
      </add>
      <fix>
        <bug>60806</bug>: To avoid <code>ClassNotFoundException</code>, make
        sure that the web application class loader is passed to
        <code>ReplicatedContext</code>. (kfujino)
      </fix>
    </changelog>
  </subsection>
  <subsection name="WebSocket">
    <changelog>
      <fix>
        <bug>60617</bug>: Correctly create a <code>CONNECT</code> request when
        establishing a WebSocket connection via a proxy. Patch provided by
        Svetlin Zarev. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Tribes">
    <changelog>
      <add>
        Add log message that PING message has received beyond the timeout
        period. (kfujino)
      </add>
      <fix>
        When a PING message that beyond the time-out period has been received,
        make sure that valid member is added to the map membership. (kfujino)
      </fix>
      <fix>
        Ensure that <code>NoRpcChannelReply</code> messages are not received on
        <code>RpcCallback</code>. (kfujino)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Web Applications">
    <changelog>
      <fix>
        Add Specification and Javadoc references for JASPIC to the Docs
        application. (csutherl)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Other">
    <changelog>
      <fix>
        Spelling corrections provided by Josh Soref. (violetagg)
      </fix>
      <scode>
        Remove local definition of web service annotations since these are
        provided by the JRE. (markt)
      </scode>
      <update>
        Update the packaged version of the Tomcat Native Library to 1.2.12 to
        pick up the latest Windows binaries built with OpenSSL 1.0.2k. (violetagg)
      </update>
      <add>
        <bug>60784</bug>: Update all unit tests that test the HTTP status line
        to check for the required space after the status code. Patch provided by
        Michael Osipov. (markt)
      </add>
    </changelog>
  </subsection>
</section>
<section name="Tomcat 9.0.0.M17 (markt)" rtext="2017-01-16">
  <subsection name="Catalina">
    <changelog>
      <add>
        <bug>60620</bug>:
        Extend the <code>JreMemoryLeakPreventionListener</code> to provide
        protection against <code>ForkJoinPool.commonPool()</code> related memory
        leaks. (markt)
      </add>
    </changelog>
  </subsection>
  <subsection name="Coyote">
    <changelog>
      <fix>
        Ensure UpgradeProcessor instances associated with closed connections are
        removed from the map of current connections to Processors. (markt)
      </fix>
      <fix>
        Remove a workaround for a problem previously reported with WebSocket,
        TLS and APR that treated some error conditions as not errors. The
        original problem cannot be reproduced with the current code and the
        work-around is now causing problems. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Jasper">
    <changelog>
      <fix>
        <bug>60497</bug>: Follow up fix using a better variable name for the
        tag reuse flag. (remm)
      </fix>
      <fix>
        Revert use of try/finally for simple tags. (remm)
      </fix>
    </changelog>
  </subsection>
  <subsection name="WebSocket">
    <changelog>
      <fix>
        Prevent potential processing loop on unexpected WebSocket connection
        closure. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="jdbc-pool">
    <changelog>
      <add>
        Enable reset the statistics without restarting the pool. (kfujino)
      </add>
    </changelog>
  </subsection>
  <subsection name="Other">
    <changelog>
      <update>
        Update the NSIS Installer used to build the Windows installer to version
        3.01. (markt)
      </update>
      <fix>
        Spelling corrections provided by Josh Soref. (violetagg)
      </fix>
    </changelog>
  </subsection>
</section>
<section name="Tomcat 9.0.0.M16 (markt)" rtext="not released">
  <subsection name="Catalina">
    <changelog>
      <add>
        <bug>53602</bug>: Add HTTP status code 451 (RFC 7725) to the list of
        HTTP status codes recognised by the ErrorReportValve. (markt)
      </add>
      <fix>
        <bug>60446</bug>: Handle the case where the stored user credential uses
        a different key length than the length currently configured for the
        <code>CredentialHandler</code>. Based on a patch by Niklas Holm. (markt)
      </fix>
      <update>
        Update the warnings that reference required options for running on Java
        9 to use the latest syntax for those options. (markt)
      </update>
      <fix>
        <bug>60513</bug>: Fix thread safety issue with RMI cleanup code. (remm)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Coyote">
    <changelog>
      <fix>
        Expand the search process for a server certificate when OpenSSL is used
        with a JSSE connector and an explicit alias has not been configured.
        (markt)
      </fix>
      <scode>
        Extract the common Acceptor code from each Endpoint into a new Acceptor
        class that is used by all Endpoints. (markt)
      </scode>
      <fix>
        <bug>60450</bug>: Improve the selection algorithm for the default trust
        store type for a TLS Virtual Host. In particular, don't use
        <code>PKCS12</code> as a default trust store type. Better document how
        the default trust store type is selected for a TLS virtual host. (markt)
      </fix>
      <fix>
        <bug>60451</bug>: Correctly handle HTTP/2 header values that contain
        characters with unicode code points in the range 128 to 255. Reject
        with a clear error message HTTP/2 header values that contain characters
        with unicode code points above 255. (markt)
      </fix>
      <fix>
        Improve the logic that selects an address to use to unlock the Acceptor
        to take account of platforms what do not listen on all local addresses
        when configured with an address of <code>0.0.0.0</code> or
        <code>::</code>. (markt)
      </fix>
      <fix>
        Correct a regression in the refactoring to make wider use of
        <code>ByteBuffer</code> that caused an intermittent failure in the unit
        tests. (markt)
      </fix>
      <fix>
        <bug>60482</bug>: HTTP/2 shouldn't do URL decoding on the query string.
        (remm)
      </fix>
      <fix>
        Fix an HTTP/2 compression error. Once a new size has been agreed for the
        dynamic HPACK table, the next header block must begin with a dynamic
        table update. (markt)
      </fix>
      <fix>
        <bug>60508</bug>: Set request start time for HTTP/2. (remm)
      </fix>
      <fix>
        The default output buffer size for AJP connectors is now based on the
        configured AJP packet size rather than the minimum permitted AJP packet
        size. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Jasper">
    <changelog>
      <update>
        Implement a simpler JSP file encoding detector that delegates XML prolog
        encoding detection to the JRE rather than using a custom XML parser.
        (markt)
      </update>
      <fix>
        <bug>60497</bug>: Restore previous tag reuse behavior following the use
        of try/finally. (remm)
      </fix>
      <fix>
        Improve the error handling for simple tags to ensure that the tag is
        released and destroyed once used. (remm)
      </fix>
    </changelog>
  </subsection>
  <subsection name="WebSocket">
    <changelog>
      <fix>
        Correctly handle blocking WebSocket writes when the write times out just
        before the write is attempted. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Web Applications">
    <changelog>
      <fix>
        <bug>60344</bug>: Add a note to BUILDING.txt regarding using the source
        bundle with the correct line endings. (markt)
      </fix>
      <fix>
        <bug>60467</bug>: remove problematic characters from XML documentation.
        Based upon a patch by Michael Osipov. (schultz)
      </fix>
      <add>
        In the documentation web application, be explicit that clustering
        requires a secure network for all of the cluster network traffic.
        (markt)
      </add>
      <update>
        Update the ASF logos to the new versions.
      </update>
      <fix>
        <bug>60468</bug>: Correct the format of the sample ISO-8601 date used
        to report the build date for the documentation. Patch provided by
        Michael Osipov. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Other">
    <changelog>
      <update>
        Update the ASF logos used in the Apache Tomcat installer for Windows to
        use the new versions.
      </update>
    </changelog>
  </subsection>
</section>
<section name="Tomcat 9.0.0.M15 (markt)" rtext="2016-12-08">
  <subsection name="Other">
    <changelog>
      <scode>
        Increment version due a local build configuration error with 9.0.0.M14
        that wasn't caught until after digital signing had been completed
        Signing requires unique names so a new tag was required. (markt)
      </scode>
    </changelog>
  </subsection>
</section>
<section name="Tomcat 9.0.0.M14 (markt)" rtext="not released">
  <subsection name="Catalina">
    <changelog>
      <update>
        <bug>60202</bug>: Add an available flag to realms, to indicate the
        state, or the realm backend. Update lockout realm to only register
        auth failures if the realm is available. (remm)
      </update>
      <fix>
        <bug>60340</bug>: Readability improvements for CSS used in
        DefaultServlet and ErrorReportValve. Patch provided by Michael
        Osipov. (violetagg)
      </fix>
      <fix>
        <bug>60351</bug>: Delay creating <code>META-INF/war-tracker</code> file
        until after the WAR has been expanded to address the case where the
        Tomcat process terminates during the expansion. (markt)
      </fix>
      <fix>
        Correctly generate URLs for resources located inside JARs that are
        themselves located inside a packed WAR file. (markt)
      </fix>
      <fix>
        Correctly handle the <code>configClass</code> attribute of a Host when
        embedding Tomcat. (markt)
      </fix>
      <update>
        <bug>60368</bug>: Stop creating a default connector on start in
        embedded mode. (remm)
      </update>
      <fix>
        <bug>60379</bug>: Dispose of the GSS credential once it is no longer
        required. Patch provided by Michael Osipov. (markt)
      </fix>
      <fix>
        <bug>60380</bug>: Ensure that a call to
        <code>HttpServletRequest#logout()</code> triggers a call to
        <code>TomcatPrincipal#logout()</code>. Based on a patch by Michael
        Osipov. (markt)
      </fix>
      <fix>
        <bug>60381</bug>: Provide a standard <code>toString()</code>
        implementation for components that implement <code>Contained</code>.
        (markt)
      </fix>
      <fix>
        <bug>60387</bug>: Correct the javadoc for
        <code>o.a.catalina.AccessLog.setRequestAttributesEnabled</code>.
        The default value is different for the different implementations.
        (violetagg)
      </fix>
      <scode>
        <bug>60393</bug>: Use consistent parameter naming in implementations of
        <code>Realm#authenticate(GSSContext, boolean)</code>. (markt)
      </scode>
      <scode>
        Refactor the <code>org.apache.naming</code> package to reduce duplicate
        code. Duplicate code identified by the Simian tool. (markt)
      </scode>
      <scode>
        Refactor the implementations of
        <code>HttpServletRequest#getRequestURL()</code> to reduce duplicate
        code. Duplicate code identified by the Simian tool. (markt)
      </scode>
      <scode>
        Refactor Catalina interfaces to make wider use of the
        <code>Contained</code> interface and reduce duplication. (markt)
      </scode>
      <scode>
        Remove the <code>getName()</code> method from <code>RealmBase</code>
        along with the various constants used by the sub-classes to store the
        return value. (markt)
      </scode>
      <fix>
        <bug>60395</bug>: Log when an <code>Authenticator</code> passes an
        incomplete <code>GSSContext</code> to a Realm since it indicates a bug
        in the <code>Authenticator</code>. Patch provided by Michael Osipov.
        (markt)
      </fix>
      <fix>
        <bug>60400</bug>: When expanding the buffer used for reading the
        request body, ensure the read position will be restored to the
        original one. (violetagg)
      </fix>
      <scode>
        Refactor the MBean implementations for the internal Tomcat components
        to reduce code duplication. (markt)
      </scode>
      <fix>
        <bug>60410</bug>: Ensure that multiple calls to
        <code>JarInputStreamWrapper#close()</code> do not incorrectly trigger
        the closure of the underlying JAR or WAR file. (markt)
      </fix>
      <fix>
        <bug>60411</bug>: Implement support in the <code>RewriteValve</code> for
        symbolic names to specify the redirect code to use when returning a
        redirect response to the user agent. Patch provided by Michael Osipov.
        (markt)
      </fix>
      <fix>
        <bug>60413</bug>: In the <code>RewriteValve</code> write empty capture
        groups as the empty string rather than as <code>&quot;null&quot;</code>
        when generating the re-written URL. Based on a patch by Michael Osipov.
        (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Coyote">
    <changelog>
      <fix>
        <bug>60372</bug>: Ensure the response headers' buffer limit is reset to
        the capacity of this buffer when IOException occurs while writing the
        headers to the socket. (violetagg)
      </fix>
      <fix>
        Ensure that the availability of configured upgrade protocols that
        require ALPN is correctly reported during Tomcat start. (markt)
      </fix>
      <fix>
        <bug>60386</bug>: Implement a more sophisticated pruning algorithm for
        removing closed streams from the priority tree to ensure that the tree
        does not grow too large. (markt)
      </fix>
      <fix>
        <bug>60409</bug>: When unable to complete sendfile request, ensure the
        Processor will be added to the cache only once. (markt/violetagg)
      </fix>
      <fix>
        Ensure that the endpoint is able to unlock the acceptor thread during
        shutdown if the endpoint is configured to listen to any local address
        of a specific type such as <code>0.0.0.0</code> or <code>::</code>.
        (markt)
      </fix>
      <add>
        Add a new configuration option, <code>ipv6v6only</code> to the APR
        connectors that allows them to be configure to only accept IPv6
        connections when configured with an IPv6 address rather than the
        default which is to accept IPv4 connections as well if the operating
        system uses a dual network stack. (markt)
      </add>
      <fix>
        Improve the logic that unlocks the acceptor thread so a better choice is
        made for the address to connect to when a connector is configured for
        any local port. This reduces the likelihood of the unlock failing.
        (markt)
      </fix>
      <fix>
        <bug>60436</bug>: Avoid a potential NPE when processing async timeouts.
        (markt)
      </fix>
      <fix>
        Reduce the window in which an async request that has just started
        processing on a container thread remains eligible for an async timeout.
        (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Jasper">
    <changelog>
      <fix>
        <bug>60431</bug>: Improve handling of varargs in UEL expressions. Based
        on a patch by Ben Wolfe. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Web applications">
    <changelog>
      <fix>
        Correct a typo in Host Configuration Reference.
        Issue reported via comments.apache.org. (violetagg)
      </fix>
      <fix>
        <bug>60412</bug>: Add information on the comment syntax for the
        <code>RewriteValve</code> configuration. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Tribes">
    <changelog>
      <fix>
        Reduce the warning logs for a message received from a different domain
        in order to avoid excessive log outputs. (kfujino)
      </fix>
    </changelog>
  </subsection>
  <subsection name="WebSocket">
    <changelog>
      <fix>
        <bug>60437</bug>: Avoid possible handshake overflows in the websocket
        client. (remm)
      </fix>
    </changelog>
  </subsection>
  <subsection name="jdbc-pool">
    <changelog>
      <add>
        <bug>58816</bug>: Implement the statistics of jdbc-pool. The stats infos
        are <code>borrowedCount</code>, <code>returnedCount</code>,
        <code>createdCount</code>, <code>releasedCount</code>,
        <code>reconnectedCount</code>, <code>releasedIdleCount</code> and
        <code>removeAbandonedCount</code>. (kfujino)
      </add>
      <fix>
        <bug>60194</bug>: If <code>validationQuery</code> is not specified,
        connection validation is done by calling the <code>isValid()</code>
        method. (kfujino)
      </fix>
      <fix>
        <bug>60398</bug>: Fix testcase of <code>TestSlowQueryReport</code>.
        (kfujino)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Other">
    <changelog>
      <fix>
        Allow customization of service.bat, such as heap memory size, service
        startup mode and JVM args. Patch provided by isapir via Github.
        (violetagg)
      </fix>
      <fix>
        <bug>60366</bug>: Change <code>catalina.bat</code> to use directly
        <code>LOGGING_MANAGER</code> and <code>LOGGING_CONFIG</code> variables
        in order to configure logging, instead of modifying
        <code>JAVA_OPTS</code>. Patch provided by Petter Isberg. (violetagg)
      </fix>
      <fix>
        <bug>60383</bug>: JASPIC API is added as a dependency to the
        <code>org.apache.tomcat:tomcat-catalina</code> maven artifact.
        (violetagg)
      </fix>
      <fix>
        Update the comments associated with the TLS Connector examples in
        <code>server.xml</code>. (markt)
      </fix>
      <add>
        New property is added <code>test.verbose</code> in order to control
        whether the output of the tests is displayed on the console or not.
        Patch provided by Emmanuel Bourg. (violetagg)
      </add>
      <scode>
        <code>TestOpenSSLCipherConfigurationParser.testSpecification</code>
        - if there are test failures, provide more detailed information. Patch
        provided by Emmanuel Bourg. (violetagg)
      </scode>
    </changelog>
  </subsection>
</section>
<section name="Tomcat 9.0.0.M13 (markt)" rtext="2016-11-08">
  <subsection name="Coyote">
    <changelog>
      <fix>
        Check that threadPriority values used in AbstractProtocol are valid.
        (fschumacher)
      </fix>
    </changelog>
  </subsection>
</section>
<section name="Tomcat 9.0.0.M12 (markt)" rtext="not released">
  <subsection name="Catalina">
    <changelog>
      <fix>
        When creating a new Connector via JMX, ensure that both HTTP/1.1 and
        AJP/1.3 connectors can be created. (markt)
      </fix>
      <fix>
        Reduce multiple error messages when Connector fails to instantiate the
        associated ProtocolHandler. (markt)
      </fix>
      <fix>
        <bug>60152</bug>: Provide an option for Connector Lifecycle exceptions
        to be re-thrown rather than logged. This is controlled by the new
        <code>throwOnFailure</code> attribute of the Connector. (markt)
      </fix>
      <fix>
        Include the Context name in the log message when an item cannot be
        added to the cache. (markt)
      </fix>
      <fix>
        Exclude JAR files in <code>/WEB-INF/lib</code> from the static resource
        cache. (markt)
      </fix>
      <fix>
        When calling <code>getResourceAsStream()</code> on a directory, ensure
        that <code>null</code> is returned. (markt)
      </fix>
      <fix>
        <bug>60161</bug>: Allow creating subcategories of the container logger,
        and use it for the rewrite valve. (remm)
      </fix>
      <fix>
        Correctly test for control characters when reading the provided shutdown
        password. (markt)
      </fix>
      <fix>
        <bug>60297</bug>: Simplify connector creation in embedded mode. (remm)
      </fix>
      <fix>
        Refactor creation of containers in embedded mode for more consistency
        and flexibility. (remm)
      </fix>
      <add>
        Log a warning if running on Java 9 with the ThreadLocal memory leak
        detection enabled (the default) but without the command line option it
        now requires. (markt)
      </add>
      <fix>
        When a Connector is configured to use an executor, ensure that the
        StoreConfig component includes the executor name when writing the
        Connector configuration. (markt)
      </fix>
      <fix>
        When configuring the JMX remote listener, specify the allowed types for
        the credentials. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Coyote">
    <changelog>
      <fix>
        Correct the HPACK header table size configuration that transposed the
        client and server table sizes when creating the encoder and decoder.
        (markt)
      </fix>
      <scode>
        Review HTTP/2 implementation removing unused code, reducing visibility
        where possible and using final where appropriate. (markt)
      </scode>
      <fix>
        Don't continue to process an HTTP/2 stream if it is reset during header
        parsing. (markt)
      </fix>
      <fix>
        HTTP/2 uses separate headers for each Cookie. As required by RFC 7540,
        merge these into a single Cookie header before processing continues.
        (markt)
      </fix>
      <fix>
        Align the HTTP/2 implementation with the HTTP/1.1 implementation and
        return a 500 response when an unhandled exception occurs during request
        processing. (markt)
      </fix>
      <fix>
        Correct the HTTP header parser so that DEL is not treated as a valid
        token character. (markt)
      </fix>
      <add>
        Add checks around the handling of HTTP/2 pseudo headers. (markt)
      </add>
      <add>
        Add support for trailer headers to the HTTP/2 implementation. (markt)
      </add>
      <fix>
        <bug>60232</bug>: When processing headers for an HTTP/2 stream, ensure
        that the read buffer is large enough for the header being processed.
        (markt)
      </fix>
      <add>
        Add configuration options to the HTTP/2 implementation to control the
        maximum number of headers allowed, the maximum size of headers allowed,
        the maximum number of trailer headers allowed, the maximum size of
        trailer headers allowed and the maximum number of cookies allowed.
        (markt)
      </add>
      <fix>
        Correctly differentiate between sending and receiving a reset frame when
        tracking the state of an HTTP/2 stream. (markt)
      </fix>
      <scode>
        Remove the undocumented support for using the old Connector attribute
        names <code>backlog</code>, <code>soLinger</code> and
        <code>soTimeout</code> that were renamed several major versions ago.
        (markt)
      </scode>
      <fix>
        <bug>60319</bug>: When using an Executor, disconnect it from the
        Connector attributes <code>maxThreads</code>,
        <code>minSpareThreads</code> and <code>threadPriority</code> to enable
        the configuration settings to be consistently reported. These Connector
        attributes will be reported as <code>-1</code> when an Executor is in
        use. The values used by the executor may be set and obtained via the
        Executor. (markt)
      </fix>
      <fix>
        If an I/O error occurs during async processing on a non-container
        thread, ensure that the <code>onError()</code> event is triggered.
        (markt)
      </fix>
      <fix>
        Improve detection of I/O errors during async processing on non-container
        threads and trigger async error handling when they are detected. (markt)
      </fix>
      <add>
        Add additional checks for valid characters to the HTTP request line
        parsing so invalid request lines are rejected sooner. (markt)
      </add>
    </changelog>
  </subsection>
  <subsection name="Jasper">
    <changelog>
      <update>
        Update to the Eclipse JDT Compiler 4.6.1. (markt)
      </update>
    </changelog>
  </subsection>
  <subsection name="Web applications">
    <changelog>
      <add>
        Add HTTP/2 configuration information to the documentation web
        application. (markt)
      </add>
      <fix>
        Fix default value of <code>validationInterval</code> attribute in
        jdbc-pool. (kfujino)
      </fix>
      <fix>
        Correct a typo in CGI How-To.
        Issue reported via comments.apache.org. (violetagg)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Tribes">
    <changelog>
      <fix>
        When the proxy node sends a backup retrieve message, ensure that using
        the <code>channelSendOptions</code> that has been set rather than the
        default <code>channelSendOptions</code>. (kfujino)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Other">
    <changelog>
      <add>
        Add the JASPIC API jar to the Maven Central publication script. (markt)
      </add>
      <fix>
        Remove classes from tomcat-util-scan.jar that are duplicates of those in
        tomcat-util.jar. (markt)
      </fix>
      <add>
        Update the NSIS Installer used to build the Windows installer to version
        3.0. (markt)
      </add>
    </changelog>
  </subsection>
</section>
<section name="Tomcat 9.0.0.M11 (markt)" rtext="2016-10-10">
  <subsection name="Catalina">
    <changelog>
      <add>
        <bug>59961</bug>: Add an option to the <code>StandardJarScanner</code>
        to control whether or not JAR Manifests are scanned for additional
        class path entries. (markt)
      </add>
      <fix>
        <bug>60013</bug>: Refactor the previous fix to align the behaviour of
        the Rewrite Valve with mod_rewrite. As part of this, provide an
        implementation for the <code>B</code> and <code>NE</code> flags and
        improve the handling for the <code>QSA</code> flag. Includes multiple
        test cases by Santhana Preethiand a patch by Tiago Oliveira. (markt)
      </fix>
      <fix>
        <bug>60087</bug>: Refactor the web resources handling to use the Tomcat
        specific <code>war:file:...</code> URL protocol to refer to WAR files
        and their contents rather than the standard <code>jar:file:...</code>
        form since some components of the JRE, such as JAR verification, give
        unexpected results when the standard form is used. A side-effect of the
        refactoring is that when using packed WARs, it is now possible to
        reference a WAR and/or specific JARs within a WAR in the security policy
        file used when running under a <code>SecurityManager</code>. (markt)
      </fix>
      <fix>
        <bug>60116</bug>: Fix a problem with the rewrite valve that caused back
        references evaluated in conditions to be forced to lower case when using
        the <code>NC</code> flag. (markt)
      </fix>
      <fix>
        Ensure <code>Digester.useContextClassLoader</code> is considered in
        case the class loader is used. (violetagg)
      </fix>
      <fix>
        <bug>60117</bug>: Ensure that the name of <code>LogLevel</code> is
        localized when using <code>OneLineFormatter</code>. Patch provided by
        Tatsuya Bessho. (kfujino)
      </fix>
      <fix>
        <bug>60138</bug>: Fix the <code>SSLHostConfig</code> so that the
        <code>protocols</code> attribute is limited to the protocols supported
        by the current JSSE implementation rather than the default protocols
        used by the implementation. (markt)
      </fix>
      <fix>
        <bug>60146</bug>: Improve performance for resource retrieval by making
        calls to WebResource.getInputStream() trigger caching if the resource is
        small enough. Patch provided by mohitchugh. (markt)
      </fix>
      <add>
        <bug>60151</bug>: Improve the exception error messages when a
        <code>ResourceLink</code> fails to specify the type, specifies an
        unknown type or specifies the wrong type. (markt)
      </add>
      <fix>
        <bug>60167</bug>: Ignore empty lines in <code>/etc/passwd</code> files
        when using the <code>PasswdUserDatabase</code>. (markt)
      </fix>
      <fix>
        <bug>60170</bug>: Exclude the compressed test file
        <code>index.html.br</code> from RAT analysis. Patch provided by Gavin
        McDonald. (markt)
      </fix>
      <fix>
        When starting web resources, ensure that class resources are only
        started once. (markt)
      </fix>
      <fix>
        Improve the access checks for linked global resources to handle the case
        where the current class loader is a child of the web application class
        loader. (markt)
      </fix>
      <fix>
        <bug>60196</bug>: Ensure that the <code>isMandatory</code> flag is
        correctly set when using JASPIC authentication. (markt)
      </fix>
      <fix>
        <bug>60199</bug>: Log a warning if deserialization issues prevent a
        session attribute from being loaded. (markt)
      </fix>
      <fix>
        <bug>60208</bug>: When using RFC6265 compliant cookies, the
        <code>/</code> character should not be allowed in a cookie name since
        the RFC6265 will drop such cookies as invalid. (markt)
      </fix>
      <add>
        Introduce new methods <code>read(ByteBuffer)</code>/
        <code>write(ByteBuffer)</code> in
        <code>o.a.catalina.connector.CoyoteInputStream</code>/
        <code>o.a.catalina.connector.CoyoteOutputStream</code>. (violetagg)
      </add>
    </changelog>
  </subsection>
  <subsection name="Coyote">
    <changelog>
      <add>
        Refactor the code that implements the requirement that a call to
        <code>complete()</code> or <code>dispatch()</code> made from a
        non-container thread before the container initiated thread that called
        <code>startAsync()</code> completes must be delayed until the container
        initiated thread has completed. Rather than implementing this by
        blocking the non-container thread, extend the internal state machine to
        track this. This removes the possibility that blocking the non-container
        thread could trigger a deadlock. (markt)
      </add>
      <fix>
        Fail earlier if the client closes the connection during SNI processing.
        (markt)
      </fix>
      <fix>
        <bug>60123</bug>: Avoid potential threading issues that could cause
        excessively large values to be returned for the processing time of
        a current request. (markt)
      </fix>
      <fix>
        <bug>60174</bug>: Log instances of <code>HeadersTooLargeException</code>
        during request processing. (markt)
      </fix>
      <fix>
        <bug>60173</bug>: Allow up to 64kB HTTP/2 header table size limit. (remm)
      </fix>
      <fix>
        Java 9 compatibility of direct ByteBuffer cleaner. (remm)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Jasper">
    <changelog>
      <fix>
        <bug>60101</bug>: Remove preloading of the class that was deleted.
        (violetagg)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Web applications">
    <changelog>
      <add>
        Expand the documentation for the nested elements within a
        <code>Resources</code> element to clarify the behaviour of different
        configuration options with respect to the order in which resources are
        searched. (markt)
      </add>
      <add>
        Add an example of using the <code>classesToInitialize</code> attribute
        of the <code>JreMemoryLeakPreventionListener</code> to the documentation
        web application. Based on a patch by Cris Berneburg. (markt)
      </add>
      <fix>
        <bug>60192</bug>: Correct a typo in the status output of the Manager
        application. Patch provided by  Radhakrishna Pemmasani. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="jdbc-pool">
    <changelog>
      <fix>
        Notify jmx when returning the connection that has been marked suspect.
        (kfujino)
      </fix>
      <fix>
        Ensure that the <code>POOL_EMPTY</code> notification has been added to
        the jmx notification types. (kfujino)
      </fix>
      <fix>
        <bug>60099</bug>: Ensure that use all method arguments as a cache key
        when using <code>StatementCache</code>. (kfujino)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Other">
    <changelog>
      <fix>
        Update the download location for Objenesis. (violetagg)
      </fix>
      <fix>
        <bug>60164</bug>: Replace <code>log4j-core*.jar</code> with
        <code>log4j-web*.jar</code> since it is <code>log4j-web*.jar</code> that
        contains the <code>ServletContainerInitializer</code>. (markt)
      </fix>
      <add>
        Add documentation to the bin/catalina.bat script to remind users that
        environment variables don't affect the configuration of Tomcat when
        run as a Windows Service. Based upon a documentation patch by
        James H.H. Lampert. (schultz)
      </add>
      <update>
        Update the packaged version of the Tomcat Native Library to 1.2.10 to
        pick up the latest Windows binaries built with OpenSSL 1.0.2j. (markt)
      </update>
    </changelog>
  </subsection>
</section>
<section name="Tomcat 9.0.0.M10 (markt)" rtext="2016-09-05">
  <subsection name="Catalina">
    <changelog>
      <fix>
        <bug>59813</bug>: Ensure that circular relations of the Class-Path
        attribute from JAR manifests will be processed correctly. (violetagg)
      </fix>
      <fix>
        Ensure that reading the <code>singleThreadModel</code> attribute of a
        <code>StandardWrapper</code> via JMX does not trigger initialisation of
        the associated servlet. With some frameworks this can trigger an
        unexpected initialisation thread and if initialisation is not thread-safe
        the initialisation can then fail. (markt)
      </fix>
      <fix>
        Compatibility with rewrite from httpd for non existing headers.
        (jfclere)
      </fix>
      <fix>
        By default, treat paths used to obtain a request dispatcher as encoded.
        This behaviour can be changed per web application via the
        <code>dispatchersUseEncodedPaths</code> attribute of the Context.
        (markt)
      </fix>
      <add>
        Provide a mechanism that enables the container to check if a component
        (typically a web application) has been granted a given permission when
        running under a SecurityManager without the current execution stack
        having to have passed through the component. Use this new mechanism to
        extend SecurityManager protection to the system property replacement
        feature of the digester. (markt)
      </add>
      <add>
        When retrieving an object via a <code>ResourceLink</code>, ensure that
        the object obtained is of the expected type. (markt)
      </add>
      <fix>
        <bug>59823</bug>: Ensure that JASPIC configuration is taken into account
        when calling <code>HttpServletRequest.authenticate()</code>. (markt)
      </fix>
      <fix>
        <bug>59824</bug>: Mark the <code>RewriteValve</code> as supporting async
        processing by default. (markt)
      </fix>
      <fix>
        <bug>59839</bug>: Apply <code>roleSearchAsUser</code> to all nested
        searches in JNDIRealm. (fschumacher)
      </fix>
      <fix>
        <bug>59859</bug>: Fix resource leak in WebDAV servlet. Based on patch by
        Coty Sutherland. (fschumacher)
      </fix>
      <fix>
        <bug>59862</bug>: Allow nested jar files scanning to be filtered with
        the system property
        <code>tomcat.util.scan.StandardJarScanFilter.jarsToSkip</code>. Patch
        is provided by Terence Bandoian. (violetagg)
      </fix>
      <fix>
        <bug>59866</bug>: When scanning <code>WEB-INF/classes</code> for
        annotations, don't scan the contents of
        <code>WEB-INF/classes/META-INF</code> (if present) since classes will
        never be loaded from that location. (markt)
      </fix>
      <fix>
        <bug>59888</bug>: Correctly handle tabs and spaces in quoted version one
        cookies when using the <code>Rfc6265CookieProcessor</code>. (markt)
      </fix>
      <fix>
        A number of the JRE memory leaks addressed by the
        <code>JreMemoryLeakPreventionListener</code> have been fixed in Java 9
        so the associated protection is now disabled when running on Java 9
        onwards. (markt)
      </fix>
      <fix>
        <bug>59912</bug>: Fix an edge case in input stream handling where an
        <code>IOException</code> could be thrown when reading a POST body.
        (markt)
      </fix>
      <fix>
        <bug>59913</bug>: Correct a regression introduced with the support for
        the Servlet 4 <code>HttpServletRequest.getMapping()</code> API that
        caused the attributes for forwarded requests to be lost if requested
        from within a subsequent include. (markt)
      </fix>
      <fix>
        <bug>59966</bug>: Do not start the web application if the error page
        configuration in web.xml is invalid. (markt)
      </fix>
      <fix>
        Switch the CGI servlet to the standard logging mechanism and remove
        support for the debug attribute. (markt)
      </fix>
      <fix>
        <bug>60012</bug>: Improvements in the log messages. Based on
        suggestions by Nemo Chen. (violetagg)
      </fix>
      <fix>
        Changes to the <code>allowLinking</code> attribute of a
        <code>StandardRoot</code> instance now invalidate the cache if caching
        is enabled. (markt)
      </fix>
      <add>
        Add a new initialisation parameter, <code>envHttpHeaders</code>, to
        the CGI Servlet to mitigate <a href="https://httpoxy.org">httpoxy</a>
        (<a href="https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2016-5388"
        >CVE-2016-5388</a>) by default and to provide a mechanism that can be
        used to mitigate any future, similar issues. (markt)
      </add>
      <add>
        When adding and removing <code>ResourceLink</code>s dynamically, ensure
        that the global resource is only visible via the
        <code>ResourceLinkFactory</code> when it is meant to be. (markt)
      </add>
      <fix>
        <bug>60008</bug>: When processing CORs requests, treat any origin with a
        URI scheme of <code>file</code> as a valid origin. (markt)
      </fix>
      <fix>
        Improve handling of exceptions during a Lifecycle events triggered by a
        state transition. The exception is now caught and the component is now
        placed into the <code>FAILED</code> state. (markt)
      </fix>
      <fix>
        <bug>60013</bug>: Fix encoding issues when using the RewriteValve with
        UTF-8 query strings or UTF-8 redirect URLs. (markt)
      </fix>
      <fix>
        <bug>60022</bug>: Improve handling when a WAR file and/or the associated
        exploded directory are symlinked into the <code>appBase</code>. (markt)
      </fix>
      <fix>
        Fix a file descriptor leak when reading the global web.xml. (markt)
      </fix>
      <fix>
        Consistently decode URL patterns provided via web.xml using the encoding
        of the web.xml file where specified or UTF-8 where no explicit encoding
        is specified. (markt)
      </fix>
      <fix>
        Make timing attacks against the Realm implementations harder. (schultz)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Coyote">
    <changelog>
      <fix>
        Correct a regression in refactoring to enable injection of custom
        keystores that broke the automatic conversion of OpenSSL style PEM
        key and certificate files for use with JSSE TLS connectors. (markt)
      </fix>
      <fix>
        <bug>59910</bug>: Don't hardcode key alias value to "tomcat" for JSSE.
        When using a keystore, OpenSSL will still default to it. (remm)
      </fix>
      <fix>
        <bug>59904</bug>: Add a limit (default 200) for the number of cookies
        allowed per request. Based on a patch by gehui. (markt)
      </fix>
      <fix>
        <bug>59925</bug>: Correct regression in r1628368 and ensure that HTTP
        separators are handled as configured in the
        <code>LegacyCookieProcessor</code>. Patch provided by Kyohei Nakamura.
        (markt)
      </fix>
      <fix>
        <bug>59950</bug>: Correct log message when reporting that the current
        number of HTTP/2 streams for a connection could not be pruned to below
        the limit. (markt)
      </fix>
      <fix>
        Ensure that <code>Semaphore.release</code> is called in all cases. Even
        when there is an exception. (violetagg)
      </fix>
      <fix>
        <bug>60030</bug>: Correct a potential infinite loop in the SNI parsing
        code triggered by failing to handle an end of stream condition. (markt)
      </fix>
      <fix>
        Refactor the JSSE client certificate validation so that the
        effectiveness of the <code>certificateVerificationDepth</code>
        configuration attribute does not depend on the presence of a certificate
        revocation list. (markt)
      </fix>
      <fix>
        Small logging optimization in the <code>Rfc6265CookieProcessor</code>.
        Patch provided by Svetlin Zarev. (markt)
      </fix>
      <fix>
        OpenSSL now disables 3DES by default so reflect this when using OpenSSL
        syntax to select ciphers. (markt)
      </fix>
      <fix>
        Use the proper ERROR socket status code for async errors with NIO2.
        (remm)
      </fix>
      <fix>
        <bug>60035</bug>: Fix a potential connection leak if the client drops a
        TLS connection before the handshake completes. (markt)
      </fix>
      <add>
        Log a warning at start up if a JSSE TLS connector is configured with
        a trusted certificate that is either not yet valid or has expired.
        (markt)
      </add>
    </changelog>
  </subsection>
  <subsection name="Jasper">
    <changelog>
      <fix>
        When writing out a full web.xml file with JspC ensure that the encoding
        used in the XML prolog matches the encoding used to write the contents
        of the file. (markt)
      </fix>
      <fix>
        Improve the error handling for custom tags to ensure that the tag is
        returned to the pool or released and destroyed once used. (markt)
      </fix>
      <fix>
        <bug>60032</bug>: Fix handling of method calls that use varargs within
        EL value expressions. (markt)
      </fix>
      <fix>
        Ignore <code>engineOptionsClass</code> and <code>scratchdir</code> when
        running under a security manager. (markt)
      </fix>
      <fix>
        Fixed StringIndexOutOfBoundsException. Based on a patch provided by
        wuwen via Github. (violetagg)
      </fix>
    </changelog>
  </subsection>
  <subsection name="WebSocket">
    <changelog>
      <fix>
        <bug>59908</bug>: Ensure that a reason phrase is included in the close
        message if a session is closed due to a timeout. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Web applications">
    <changelog>
      <fix>
        <bug>59867</bug>: Correct the documentation provided by Manager's
        403.jsp. (violetagg)
      </fix>
      <fix>
        <bug>59868</bug>: Clarify the documentation for the Manager web
        application to make clearer that the host name and IP address in the
        server section are the primary host name and IP address. (markt)
      </fix>
      <fix>
        <bug>59940</bug>: Correct the name of the
        <code>truststorePassword</code> attribute of the
        <code>SSLHostConfig</code> element in the configuration documentation.
        (markt)
      </fix>
      <fix>
        MBeans Descriptors How-To is moved to
        <code>mbeans-descriptors-howto.html</code>. Patch provided by Radoslav
        Husar. (violetagg)
      </fix>
      <fix>
        Update NIO Connector configuration documentation with an information
        about <code>socket.directSslBuffer</code>. (violetagg)
      </fix>
      <fix>
        <bug>60034</bug>: Correct a typo in the Manager How-To page of the
        documentation web application. (markt)
      </fix>
      <fix>
        Correct the name of the CRL location configuration attributes in the
        documentation web application. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="jdbc-pool">
    <changelog>
      <fix>
        In order to avoid the unintended skip of <code>PoolCleaner</code>,
        remove the check code of the execution interval in the task that has
        been scheduled. (kfujino)
      </fix>
      <fix>
        <bug>59850</bug>: Ensure that the <code>ResultSet</code> is closed when
        enabling the <code>StatementCache</code> interceptor. (kfujino)
      </fix>
      <fix>
        <bug>59923</bug>: Reduce the default value of
        <code>validationInterval</code> in order to avoid the potential issue
        that continues to return an invalid connection after database restart.
        (kfujino)
      </fix>
      <fix>
        Ensure that the <code>ResultSet</code> is returned as Proxy object when
        enabling the <code>StatementDecoratorInterceptor</code>. (kfujino)
      </fix>
      <fix>
        <bug>60043</bug>: Ensure that the <code>suspectTimeout</code> works
        without removing connection when the <code>removeAbandoned</code> is
        disabled. (kfujino)
      </fix>
      <fix>
        Add log message of when returning the connection that has been marked
        suspect. (kfujino)
      </fix>
      <fix>
        Correct Javadoc for <code>ConnectionPool.suspect()</code>. Based on a
        patch by Yahya Cahyadi. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Other">
    <changelog>
      <add>
        <bug>59871</bug>: Add a property (<code>timeFormat</code>) to
        JULI&apos;s <code>OneLineFormatter</code> to enable the format of the
        time stamp used in log messages to be configured. (markt)
      </add>
      <fix>
        <bug>59899</bug>: Update Tomcat&apos;s copy of the Java Persistence
        annotations to include the changes made in 2.1 / JavaEE 7. (markt)
      </fix>
      <fix>
        Fixed typos in mbeans-descriptors.xml files. (violetagg)
      </fix>
      <update>
        Update the internal fork of Commons BCEL to r1757132 to align with the
        BCEL 6 release. (markt)
      </update>
      <update>
        Update the internal fork of Commons DBCP 2 to r1757164 to pick up a
        couple of bug fixes. (markt)
      </update>
      <update>
        Update the internal fork of Commons Codec to r1757174. Code formatting
        changes only. (markt)
      </update>
      <update>
        Update the internal fork of Commons FileUpload to afdedc9. This pulls in
        a fix to improve the performance with large multipart boundaries.
        (markt)
      </update>
    </changelog>
  </subsection>
</section>
<section name="Tomcat 9.0.0.M9 (markt)" rtext="2016-07-12">
  <subsection name="Catalina">
    <changelog>
      <fix>
        <bug>18500</bug>: Add limited support for wildcard host names and host
        aliases. Names of the form <code>*.domainname</code> are now permitted.
        Note that an exact host name match takes precedence over a wild card
        host name match. (markt)
      </fix>
      <fix>
        <bug>57705</bug>: Add debug logging for requests denied by the remote
        host and remote address valves and filters. Based on a patch by Graham
        Leggett. (markt)
      </fix>
      <fix>
        Correct a regression in the fix for <bug>58588</bug> that removed the
        entire <code>org.apache.juli</code> package from the embedded JARs
        rendering them unusable. (markt)
      </fix>
      <add>
        <bug>59399</bug>: Add a new option to the Realm implementations that
        ship with Tomcat that allows the HTTP status code used for HTTP -> HTTPS
        redirects to be controlled per Realm. (markt)
      </add>
      <fix>
        <bug>59708</bug>: Modify the LockOutRealm logic. Valid authentication
        attempts during the lock out period will no longer reset the lock out
        timer to zero. (markt)
      </fix>
      <update>
        Change the default of the
        <code>sessionCookiePathUsesTrailingSlash</code> attribute of the
        <code>Context</code> element to <code>false</code> since the problems
        caused when a Servlet is mapped to <code>/*</code> are more significant
        than the security risk of not enabling this option by default. (markt)
      </update>
      <fix>
        Follow-up to <bug>59655</bug>. Improve the documentation for configuring
        permitted cookie names. Patch provided by Kyohei Nakamura. (markt)
      </fix>
      <fix>
        Do not attempt to start web resources during a web application's
        initialisation phase since the web application is not fully configured
        at that point and the web resources may not be correctly configured.
        (markt)
      </fix>
      <fix>
        Improve error handling around user code prior to calling
        <code>InstanceManager.destroy()</code> to ensure that the method is
        executed. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Coyote">
    <changelog>
      <fix>
        Fix a cause of multiple attempts to close the same socket. (markt)
      </fix>
      <scode>
        Refactor the certificate keystore and trust store generation to make it
        easier for embedded users to inject their own key stores. (markt)
      </scode>
      <update>
        Add a <code>maxConcurrentStreamExecution</code> on the HTTP/2
        protocol handler to allow restricting the amount of concurrent stream
        that are being executed in a single connection. The default is to
        not limit it. (remm)
      </update>
      <add>
        <bug>59233</bug>: Add the ability to add TLS virtual hosts dynamically.
        (markt)
      </add>
      <fix>
        Correct a problem with <code>ServletRequest.getServerPort()</code> for
        secure HTTP/2 connections that meant an incorrect value was returned when
        using the default port. (markt)
      </fix>
      <fix>
        Improve error handling around user code prior to calling
        <code>InstanceManager.destroy()</code> to ensure that the method is
        executed. (markt)
      </fix>
      <fix>
        Document the default for the HTTP/2 configuration parameter
        <code>maxConcurrentStreamExecution</code> as 20. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Jasper">
    <changelog>
      <fix>
        Improve error handling around user code prior to calling
        <code>InstanceManager.destroy()</code> to ensure that the method is
        executed. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="WebSocket">
    <changelog>
      <scode>
        Now the WebSocket implementation is not built directly on top of the
        Servlet API and can use Tomcat internals, there is no need for the
        dedicated WebSocket Executor. It has been replaced by the use of the
        Connector/Endpoint provided Executor. (markt)
      </scode>
      <fix>
        Improve error handling around user code prior to calling
        <code>InstanceManager.destroy()</code> to ensure that the method is
        executed. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Web Applications">
    <changelog>
      <fix>
        Do not log an additional case of <code>IOException</code>s in the
        error handler for the Drawboard WebSocket example when the root cause is
        the client disconnecting since the logs add no value. (markt)
      </fix>
      <fix>
        <bug>59642</bug>: Mention the <code>localDataSource</code> in the
        <code>DataSourceRealm</code> section of the Realm How-To. (markt)
      </fix>
      <fix>
        <bug>59672</bug>: Update the security considerations page of the
        documentation web application to take account of the fact that the
        Manager and HostManager applications now have a
        <code>RemoteAddrValve</code> configured by default. (markt)
      </fix>
      <fix>
        Follow-up to the fix for <bug>59399</bug>. Ensure that the new attribute
        <code>transportGuaranteeRedirectStatus</code> is documented for all
        <strong>Realm</strong>s. Also document the <code>NullRealm</code> and
        when it is automatically created for an <strong>Engine</strong>. (markt)
      </fix>
      <fix>
        Fix the description of <code>maxAge</code> attribute in jdbc-pool doc.
        This attribute works both when a connection is returned and when a
        connection is borrowed. (kfujino)
      </fix>
      <fix>
        <bug>59774</bug>: Correct the <code>prefix</code> values in the
        documented examples for configuring the <code>AccessLogValve</code>.
        Patch provided by Mike Noordermeer. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Tribes">
    <changelog>
      <add>
        Add log message when the ping has timed-out. (kfujino)
      </add>
      <fix>
        If the ping message has been received at the
        <code>AbstractReplicatedMap#leftOver</code> method, ensure that notify
        the member is alive than ignore it. (kfujino)
      </fix>
    </changelog>
  </subsection>
  <subsection name="jdbc-pool">
    <changelog>
      <fix>
        Fix the duplicated connection release when connection verification
        failed. (kfujino)
      </fix>
      <fix>
        Ensure that do not remove the abandoned connection that has been already
        released. (kfujino)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Other">
    <changelog>
      <fix>
        Remove JULI plus log4j extras and embedded artifacts from Maven release
        script. (markt)
      </fix>
      <add>
        Use the mirror network rather than the ASF master site to download the
        current ASF dependencies. (markt)
      </add>
      <update>
        Update the packaged version of the Tomcat Native Library to 1.2.8 to
        pick up the latest fixes and make 1.2.8 the minimum recommended version.
        (markt)
      </update>
    </changelog>
  </subsection>
</section>
<section name="Tomcat 9.0.0.M8 (markt)" rtext="2016-06-13">
  <subsection name="Coyote">
    <changelog>
      <fix>
        Remove accidentally committed debug code. (markt)
      </fix>
    </changelog>
  </subsection>
</section>
<section name="Tomcat 9.0.0.M7 (markt)" rtext="not released">
  <subsection name="Catalina">
    <changelog>
      <fix>
        RMI Target related memory leaks are avoidable which makes them an
        application bug that needs to be fixed rather than a JRE bug to work
        around. Therefore, start logging RMI Target related memory leaks on web
        application stop. Add an option that controls if the check for these
        leaks is made. Log a warning if running on Java 9 with this check
        enabled but without the command line option it requires. (markt)
      </fix>
      <fix>
        Ensure NPE will not be thrown during deployment when scanning jar files
        without MANIFEST.MF file. (violetagg)
      </fix>
      <scode>
        Remove the <code>clearReferencesStatic</code> option from
        <code>StandardContext</code>. It was known to cause problems with some
        libraries (such as log4j) and was only linked to suspected memory leaks
        rather than known memory leaks. It had been disabled by default with no
        increase in the reports of memory leaks for some time. (markt)
      </scode>
      <fix>
        <bug>59604</bug>: Correct the assumption made in the URL decoding that
        the default platform encoding is always compatible with ISO-8859-1. This
        assumption is not always valid, e.g. on z/OS. (markt)
      </fix>
      <fix>
        <bug>59608</bug>: Skip over any invalid <code>Class-Path</code> attribute
        from JAR manifests. Log errors at debug level due to many bad libraries.
        (remm)
      </fix>
      <fix>
        Fix error message when failed to register MBean. (kfujino)
      </fix>
      <fix>
        <bug>59655</bug>: Configure the cookie name validation to use RFC6265
        rules by default to align it with the default cookie parser. Document
        the impact system properties have on cookie name validation. (mark)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Coyote">
    <changelog>
      <fix>
        Ensure that requests with HTTP method names that are not tokens (as
        required by RFC 7231) are rejected with a 400 response. (markt)
      </fix>
      <fix>
        When an asynchronous request is processed by the AJP connector, ensure
        that request processing has fully completed before starting the next
        request. (markt)
      </fix>
      <fix>
        Improve handling of HTTP/2 stream resets. (markt)
      </fix>
      <add>
        <bug>58750</bug>: The HTTP Server header is no longer set by default. A
        Server header may be configured by setting the <code>server</code>
        attribute on the <code>Connector</code>. A new <code>Connector</code>
        attribute, <code>serverRemoveAppProvidedValues</code> may be used to
        remove any Server header set by a web application. (markt)
      </add>
      <fix>
        <bug>59564</bug>: Correct offset when reading into HTTP/2 input buffer
        that could cause problems reading request bodies. (violetagg/markt)
      </fix>
      <fix>
        Modify the handling of read/write timeouts so that the appropriate error
        handling (<code>ReadListener.onError()</code>,
        <code>WriteListener.onError()</code> or
        <code>AsyncListener.onError()</code>) is called. (markt)
      </fix>
      <fix>
       If an async dispatch results in the completion of request processing,
       ensure that any remaining request body is swallowed before starting the
       processing of the next request else the remaining body may be read as the
       start of the next request leading to a 400 response. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Jasper">
    <changelog>
      <fix>
        <bug>59567</bug>: Fix NPE scanning webapps for TLDs when an exploded
        JAR has an empty WEB-INF/classes/META-INF folder. (remm)
      </fix>
      <fix>
        Fix a memory leak in the expression language implementation that caused
        the class loader of the first web application to use expressions to be
        pinned in memory. (markt)
      </fix>
      <fix>
        <bug>59654</bug>: Improve error message when attempting to use a TLD
        file from an invalid location. Patch provided by Huxing Zhang. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="WebSocket">
    <changelog>
      <fix>
        <bug>59659</bug>: Fix possible memory leak in WebSocket handling of
        unexpected client disconnects. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Web applications">
    <changelog>
      <fix>
        <bug>58891</bug>: Update the SSL How-To. Based on a suggestion by
        Alexander Kjäll. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Extras">
    <changelog>
      <scode>
        <bug>58588</bug>: Remove the JULI extras package from the distribution.
        It was only useful for switching Tomcat's internal logging to log4j
        1.2.x and that version of log4j is no longer supported. No additional
        Tomcat code is required if switching Tomcat's internal logging to log
        via log4j 2.x. (markt)
      </scode>
    </changelog>
  </subsection>
  <subsection name="jdbc-pool">
    <changelog>
      <fix>
        Fix a memory leak with the pool cleaner thread that retained a reference
        to the web application class loader for the first web application to use
        a connection pool. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Other">
    <changelog>
      <update>
        Update the internal fork of Commons DBCP 2 to r1743696 (2.1.1 plus
        additional fixes). (markt)
      </update>
      <update>
        Update the internal fork of Commons Pool 2 to r1743697 (2.4.2 plus
        additional fixes). (markt)
      </update>
      <update>
        Update the internal fork of Commons File Upload to r1743698 (1.3.1 plus
        additional fixes). (markt)
      </update>
      <scode>
        Use UTF-8 with a standard prolog for all XML files. (markt)
      </scode>
      <fix>
        <bug>58626</bug>: Add support for a new environment variable
        (<code>USE_NOHUP</code>) that causes <code>nohup</code> to be used when
        starting Tomcat. It is disabled by default except on HP-UX where it is
        enabled by default since it is required when starting Tomcat at boot on
        HP-UX. (markt)
      </fix>
    </changelog>
  </subsection>
</section>
<section name="Tomcat 9.0.0.M6 (markt)" rtext="2016-05-16">
  <subsection name="Catalina">
    <changelog>
      <fix>
        Ensure that annotated web components packed in web fragments will be
        processed when <code>unpackWARs</code> is enabled. (violetagg)
      </fix>
    </changelog>
  </subsection>
</section>
<section name="Tomcat 9.0.0.M5 (markt)" rtext="not released">
  <subsection name="Catalina">
    <changelog>
      <fix>
        <bug>48922</bug>: Apply a very small performance improvement to the
        date formatting in Tomcat's internal request object. Based on a patch
        provided by Ondrej Medek. (markt)
      </fix>
      <fix>
        <bug>59206</bug>: Ensure NPE will not be thrown by
        <code>o.a.tomcat.util.file.ConfigFileLoader</code> when
        <code>catalina.base</code> is not specified. (violetagg)
      </fix>
      <fix>
        <bug>59217</bug>: Remove duplication in the recycling of the path in
        <code>o.a.tomcat.util.http.ServerCookie</code>. Patch is provided by
        Kyohei Nakamura. (violetagg)
      </fix>
      <fix>
        Fixed possible NPE in
        <code>o.a.catalina.loader.WebappClassLoaderBase.getResourceAsStream</code>
        (violetagg)
      </fix>
      <fix>
        <bug>59213</bug>: Async dispatches should be based off a wrapped
        request. (remm)
      </fix>
      <fix>
        Ensure that <code>javax.servlet.ServletRequest</code> and
        <code>javax.servlet.ServletResponse</code> provided during
        <code>javax.servlet.AsyncListener</code> registration are made
        available via <code>javax.servlet.AsyncEvent.getSuppliedRequest</code>
        and <code>javax.servlet.AsyncEvent.getSuppliedResponse</code>
        (violetagg)
      </fix>
      <fix>
        <bug>59219</bug>: Ensure <code>AsyncListener.onError()</code> is called
        if an <code>Exception</code> is thrown during async processing. (markt)
      </fix>
      <fix>
        <bug>59220</bug>: Ensure that <code>AsyncListener.onComplete()</code> is
        called if the async request times out and the response is already
        committed. (markt)
      </fix>
      <fix>
        <bug>59226</bug>: Process the <code>Class-Path</code> attribute from
        JAR manifests for JARs on the class path excluding JARs packaged in
        <code>WEB-INF/lib</code>. (markt)
      </fix>
      <fix>
        <bug>59255</bug>: Fix possible NPE in mapper. (kkolinko/remm)
      </fix>
      <fix>
        <bug>59256</bug>: <code>slf4j-taglib*.jar</code> should not be excluded
        from the standard JAR scanning by default. (violetagg)
      </fix>
      <fix>
        Clarify the log message that specifying both urlPatterns and value
        attributes in @WebServlet and @WebFilter annotations is not allowed.
        (violetagg)
      </fix>
      <fix>
        Ensure the exceptions caused by Valves will be available in the log
        files so that they can be evaluated when
        <code>o.a.catalina.valves.ErrorReportValve.showReport</code> is
        disabled. Patch is provided by Svetlin Zarev. (violetagg)
      </fix>
      <fix>
        Remove unused <code>distributable</code> attribute that is defined as
        <code>TransientAttribute</code> of <code>Manager</code> in StoreConfig.
        (kfujino)
      </fix>
      <fix>
        Fix handling of Cluster Receiver in StoreConfig. The <code>bind</code>
        and <code>host</code> attributes define as
        <code>TransientAttribute</code>. (kfujino)
      </fix>
      <fix>
        <bug>59261</bug>: <code>ServletRequest.getAsyncContext()</code> now
        throws an <code>IllegalStateException</code> as required by the Servlet
        specification if the request is not in asynchronous mode when called.
        (markt)
      </fix>
      <fix>
        <bug>59269</bug>: Correct the implementation of
        <code>PersistentManagerBase</code> so that <code>minIdleSwap</code>
        functions as designed and sessions are swapped out to keep the active
        session count below <code>maxActiveSessions</code>. (markt)
      </fix>
      <update>
        Update the implementation of the proposed Servlet 4.0 API to provide
        mapping type information for the current request to reflect discussions
        within the EG. (markt)
      </update>
      <fix>
        Correctly configure the base path for a resources directory provided by
        an expanded JAR file. Patch provided by hengyunabc. (markt)
      </fix>
      <add>
        When multiple compressed formats are available and the client does not
        express a preference, use the server order to determine the preferred
        format. Based on a patch by gmokki. (markt)
      </add>
      <fix>
        <bug>59284</bug>: Allow the Tomcat provided JASPIC
        <code>SimpleServerAuthConfig</code> to pick up module configuration
        properties from either the property set passed to its constructor or
        from the properties passed in the call to <code>getAuthContext</code>.
        Based on a patch by Thomas Maslen. (markt)
      </fix>
      <fix>
        <bug>59310</bug>: Do not add a <code>Content-Length: 0</code> header for
        custom responses to <code>HEAD</code> requests that do not set a
        <code>Content-Length</code> value. (markt)
      </fix>
      <fix>
        When normalizing paths, improve the handling when paths end with
        <code>/.</code> or <code>/..</code> and ensure that input and output are
        consistent with respect to whether or not they end with <code>/</code>.
        (markt)
      </fix>
      <fix>
        <bug>59317</bug>: Ensure that
        <code>HttpServletRequest.getRequestURI()</code> returns an encoded URI
        rather than a decoded URI after a dispatch. (markt)
      </fix>
      <fix>
        Use the correct URL for the fragment when reporting errors processing
        a <code>web-fragment.xml</code> file from a JAR located in an unpacked
        WAR. (markt)
      </fix>
      <fix>
        Ensure that <code>JarScanner</code> only uses the explicit call-back to
        process <code>WEB-INF/classes</code> and only when configured to treat
        the contents of <code>WEB-INF/classes</code> as a possible exploded JAR.
        (markt)
      </fix>
      <scode>
        Remove the <code>java2DDisposerProtection</code> option from the
        <code>JreMemoryLeakPreventionListener</code>. The leak is fixed in Java
        7 onwards and Tomcat 9 requires Java 8 so the option is unnecessary.
        (markt)
      </scode>
      <scode>
        Remove the <code>securityPolicyProtection</code> option from the
        <code>JreMemoryLeakPreventionListener</code>. The leak is fixed in Java
        8 onwards and Tomcat 9 requires Java 8 so the option is unnecessary.
        (markt)
      </scode>
      <scode>
        Remove the <code>securityLoginConfigurationProtection</code> option from
        the <code>JreMemoryLeakPreventionListener</code>. The leak is fixed in
        Java 8 onwards and Tomcat 9 requires Java 8 so the option is
        unnecessary. (markt)
      </scode>
      <fix>
        Ensure that the value for the header <code>X-Frame-Options</code> is
        constructed correctly according to the specification when
        <code>ALLOW-FROM</code> option is used. (violetagg)
      </fix>
      <fix>
        Fix an <code>IllegalArgumentException</code> if the first use of an
        internal <code>Response</code> object requires JASPIC authentication.
        (markt)
      </fix>
      <fix>
        Do not trigger unnecessary session ID changes when using JASPIC and the
        user is authenticated using cached credentials. (markt)
      </fix>
      <fix>
        <bug>59437</bug>: Ensure that the JASPIC <code>CallbackHandler</code> is
        thread-safe. (markt)
      </fix>
      <fix>
        <bug>59449</bug>: In <code>ContainerBase</code>, ensure that the process
        to remove a child container is the reverse of the process to add one.
        Patch provided by Huxing Zhang. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Coyote">
    <changelog>
      <fix>
        Improves OpenSSL engine robustness when SSL allocation fails for
        some reason. (remm)
      </fix>
      <fix>
        OpenSSL engine code cleanups. (remm)
      </fix>
      <fix>
        Align cipher configuration parsing with current OpenSSL master. (markt)
      </fix>
      <update>
        Change the default for <code>honorCipherOrder</code> to
        <code>false</code>. With the current default TLS configuration, it is no
        longer necessary for this to be <code>true</code> for a reasonably
        secure configuration. (markt)
      </update>
      <add>
        Add a new environment variable <code>JSSE_OPTS</code> that is intended
        to be used to pass JVM wide configuration to the JSSE implementation.
        The default value is <code>-Djdk.tls.ephemeralDHKeySize=2048</code>
        which protects against weak Diffie-Hellman keys. (markt)
      </add>
      <fix>
        <bug>58970</bug>: Fix a connection counting bug in the NIO connector
        that meant some dropped connections were not removed from the current
        connection count. (markt)
      </fix>
      <fix>
        <bug>59289</bug>: Do not recycle upgrade processors in unexpected close
        situations. (remm)
      </fix>
      <fix>
        <bug>59295</bug>: Use <code>Locale.toLanguageTag()</code> to construct
        the <code>Content-Language</code> HTTP header to ensure the locale is
        correctly represented. Patch provided by zikfat. (markt)
      </fix>
      <update>
        <bug>59295</bug>: Add support for using pem encoded certificates with
        JSSE SSL. Submitted by Emmanuel Bourg with additional tweaks. (remm)
      </update>
      <fix>
        Make the TLS certificate chain available to clients when using
        JSSE+OpenSSL with the certificate chain stored in a Java KeyStore.
        (markt)
      </fix>
      <fix>
        Work around <a href="https://github.com/openssl/openssl/issues/188">a
        known issue in OpenSSL</a> that does not permit the TLS handshake to be
        failed if the ALPN negotiation fails. (markt)
      </fix>
      <update>
        <bug>59421</bug>: Add direct HTTP/2 connection support. (remm)
      </update>
      <fix>
        Correctly handle a call to <code>AsyncContext.complete()</code> from a
        non-container thread when non-blocking I/O is being used. (markt)
      </fix>
      <fix>
        <bug>59451</bug>: Correct Javadoc for <code>MessageBytes</code>. Patch
        provided by Kyohei Nakamura. (markt)
      </fix>
      <fix>
        <bug>59450</bug>: Correctly handle the case where the
        <code>LegacyCookieProcessor</code> is configured with
        <code>allowHttpSepsInV0</code> set to <code>false</code> and
        <code>forwardSlashIsSeparator</code> set to <code>true</code>. Patch
        provided by Kyohei Nakamura. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Jasper">
    <changelog>
      <fix>
        When scanning JARs for TLDs, correctly handle the (rare) case where a
        JAR has been exploded into <code>WEB-INF/classes</code> and the web
        application is deployed as a packed WAR. (markt)
      </fix>
      <fix>
        <bug>59640</bug>: NPEs with not found TLDs. (remm)
      </fix>
    </changelog>
  </subsection>
  <subsection name="WebSocket">
    <changelog>
      <fix>
        <bug>59189</bug>: Explicitly release the native memory held by the
        <code>Inflater</code> and <code>Deflater</code> when using
        PerMessageDeflate and the WebSocket session ends. Based on a patch by
        Henrik Olsson. (markt)
      </fix>
      <fix>
        Restore the <code>WsServerContainer.doUpgrade()</code> method which was
        accidentally removed since it is not used by Tomcat. (markt)
      </fix>
      <fix>
        Fix a regression caused by the connector refactoring and ensure that the
        thread context class loader is set to the web application
        classloader when processing WebSocket messages on the server. (markt)
      </fix>
      <fix>
        Ensure that a client disconnection triggers the error handling for the
        associated WebSocket end point. (markt)
      </fix>
      <add>
        Make WebSocket client more robust when handling errors during the close
        of a WebSocket session. (markt)
      </add>
    </changelog>
  </subsection>
  <subsection name="Web applications">
    <changelog>
      <fix>
        <bug>59218</bug>: Correct the path to <code>jaspic-providers.xml</code>
        in Jaspic How-To. Patch is provided by Tatsuya Bessho. (violetagg)
      </fix>
      <fix>
        Remove button that has accidentally been added to the host manager.
        Submitted by Coty Sutherland. (remm)
      </fix>
      <fix>
        Update in the documentation the link to the maven repository where
        Tomcat snapshot artifacts are deployed. (markt/violetagg)
      </fix>
      <fix>
        Clarify in the documentation that calls to
        <code>ServletContext.log(String, Throwable)</code> or
        <code>GenericServlet.log(String, Throwable)</code> are logged at the
        SEVERE level. (violetagg)
      </fix>
      <fix>
        Correct a typo in SSL/TLS Configuration How-To.
        Issue reported via comments.apache.org. (violetagg)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Tribes">
    <changelog>
      <fix>
        Avoid NPE when a proxy node failed to retrieve a backup entry. (kfujino)
      </fix>
      <add>
        Add the flag indicating that member is a localMember. (kfujino)
      </add>
      <fix>
        Fix potential NPE that depends on the setting order of attributes of
        static member when using the static cluster. (kfujino)
      </fix>
      <add>
        Add get/set method for the channel that is related to
        <code>ChannelInterceptor</code>. (kfujino)
      </add>
      <fix>
        As with the multicast cluster environment, in the static cluster
        environment, the local member inherits properties from the cluster
        receiver. (kfujino)
      </fix>
      <add>
        Add get/set method for the channel that is related to each Channel
        services. (kfujino)
      </add>
      <add>
        Add name to channel in order to identify channels. In tomcat cluster
        environment, it is set the cluster name + "-Channel" as default value.
        (kfujino)
      </add>
      <add>
        Add the channel name to the thread which is invoked by channel services
        in order to identify the associated channel. (kfujino)
      </add>
      <fix>
        Ensure that clear the channel instance from channel services when
        stopping channel. (kfujino)
      </fix>
      <add>
        Implement map state in the replication map. (kfujino)
      </add>
      <fix>
        Ensure that the ping is not executed during the start/stop of the
        replication map. (kfujino)
      </fix>
      <fix>
        In ping processing in the replication map, send not the
        <code>INIT</code> message but the newly introduced <code>PING</code>
        message. (kfujino)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Other">
    <changelog>
      <fix>
        <bug>59211</bug>: Add hamcrest to Eclipse classpath. Patch is provided
        by Huxing Zhang. (violetagg)
      </fix>
      <update>
        <bug>59276</bug>: Update optional Checkstyle library to 6.17.
        (kkolinko)
      </update>
      <update>
        <bug>59280</bug>: Update the NSIS Installer used to build the
        Windows Installers to version 2.51. (kkolinko)
      </update>
      <update>
        Update the packaged version of the Tomcat Native Library to 1.2.7 to
        pick up the Windows binaries that are based on OpenSSL 1.0.2h and APR
        1.5.2. (markt)
      </update>
    </changelog>
  </subsection>
</section>
<section name="Tomcat 9.0.0.M4 (markt)" rtext="2016-03-16">
  <subsection name="Catalina">
    <changelog>
      <fix>
        Ensure that <code>/WEB-INF/classes</code> is never processed as a web
        fragment. (markt)
      </fix>
      <update>
        Switch default connector when native is installed. Unless configured
        otherwise, the NIO endpoint will be used by default. If SSL is
        configured, OpenSSL will be used rather than JSSE. (remm)
      </update>
      <fix>
        Correct a regression in the fix for <bug>58867</bug>. When configuring a
        Context to use an external directory for the <code>docBase</code>, and
        that directory happens to be located along side the original WAR, use
        the directory as the <code>docBase</code> rather than expanding the
        WAR into the <code>appBase</code> and using the newly created expanded
        directory as the <code>docBase</code>. (markt)
      </fix>
      <add>
        <bug>58351</bug>: Make the server build date and server version number
        accessible via JMX. Patch provided by  Huxing Zhang. (markt)
      </add>
      <add>
        <bug>58988</bug>: Special characters in the substitutions for the
        RewriteValve can now be quoted with a backslash. (fschumacher)
      </add>
      <fix>
        <bug>58999</bug>: Fix class and resource name filtering in
        WebappClassLoader. It throws a StringIndexOutOfBoundsException if the
        name is exactly "org" or "javax". (rjung)
      </fix>
      <add>
        Add JASPIC (JSR-196) support. (markt)
      </add>
      <add>
        Make checking for var and map replacement in RewriteValve a bit stricter
        and correct detection of colon in var replacement. (fschumacher)
      </add>
      <fix>
        Refactor the web application class loader to reduce the impact of JAR
        scanning on the memory footprint of the web application. (markt)
      </fix>
      <fix>
        Fix some resource leaks in the error handling for accessing files from
        JARs and WARs. (markt)
      </fix>
      <fix>
        Refactor the JAR and JAR-in-WAR resource handling to reduce the memory
        footprint of the web application. (markt)
      </fix>
      <fix>
        Refactor the web.xml parsing so a new parser is created every time the
        web application starts rather than creating and caching the parser when
        the Context is created. This enables the parser to take account of
        modified Context configuration parameters and reduces (slightly) the
        memory footprint of a running Tomcat instance. (markt)
      </fix>
      <update>
        Switch the web application class loader to the
        <code>ParallelWebappClassLoader</code> by default. (markt)
      </update>
      <fix>
        <bug>57809</bug>: Remove the custom context attribute that held the
        effective web.xml. Components needing access to configuration
        information may access it via the Servlet API. (markt)
      </fix>
      <fix>
        Refactor JAR scanning to reduce memory footprint. (markt)
      </fix>
      <fix>
        <bug>59001</bug>: Correctly handle the case when Tomcat is installed on
        a path where one of the segments ends in an exclamation mark. (markt)
      </fix>
      <fix>
        Expand the fix for <bug>59001</bug> to cover the special sequences used
        in Tomcat&apos;s custom jar:war: URLs. (markt)
      </fix>
      <fix>
        <bug>59043</bug>: Avoid warning while expiring sessions associated with
        a single sign on if <code>HttpServletRequest.logout()</code> is used.
        (markt)
      </fix>
      <fix>
        <bug>59054</bug>: Ensure that using the
        <code>CrawlerSessionManagerValve</code> in a distributed environment
        does not trigger an error when the Valve registers itself in the
        session. (markt)
      </fix>
      <fix>
        Add socket properties support to storeconfig. (remm)
      </fix>
      <fix>
        Fix incorrect parsing of the NE and NC flags in rewrite rules. (remm)
      </fix>
      <fix>
        <bug>59065</bug>: Correct the timing of the check for colons in paths
        on non-Windows systems implemented in <code>catalina.sh</code> so it
        works correctly with Cygwin. Patch provided by Ed Randall. (markt)
      </fix>
      <fix>
        When a Host is configured with an appBase that does not exist, create
        the appBase before trying to expand an external WAR file into it.
        (markt)
      </fix>
      <fix>
       <bug>59115</bug>: When using the Servlet 3.0 file upload, the submitted
       file name may be provided as a token or a quoted-string. If a
       quoted-string, unquote the string before returning it to the user.
       (markt)
      </fix>
      <fix>
        <bug>59123</bug>: Close <code>NamingEnumeration</code> objects used by
        the <code>JNDIRealm</code> once they are no longer required.
        (fschumacher/markt)
      </fix>
      <add>
        Implement the proposed Servlet 4.0 API to provide mapping type
        information for the current request. (markt)
      </add>
      <fix>
        <bug>59138</bug>: Correct a false positive warning for ThreadLocal
        related memory leaks when the key class but not the value class has been
        loaded by the web application class loader. (markt)
      </fix>
      <add>
        <bug>59017</bug>: Make the pre-compressed file support in the Default
        Servlet generic so any compression may be used rather than just gzip.
        Patch provided by Mikko Tiihonen. (markt)
      </add>
      <fix>
        <bug>59145</bug>: Don't log an invalid warning when a user logs out of
        a session associated with SSO. (markt)
      </fix>
      <fix>
        <bug>59150</bug>: Add an additional flag on APR listener to allow
        disabling automatic use of OpenSSL. (remm)
      </fix>
      <fix>
        <bug>59151</bug>: Fix a regression in the fix for <bug>56917</bug> that
        added additional (and arguably unnecessary) validation to the provided
        redirect location. (markt)
      </fix>
      <fix>
        <bug>59154</bug>: Fix a <code>NullPointerException</code> in the
        <code>JAASMemoryLoginModule</code> resulting from the introduction of
        the <code>CredentialHandler</code> to <code>Realm</code>s.
        (schultz/markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Coyote">
    <changelog>
      <fix>
        Handle the case in the NIO2 connector where the required TLS buffer
        sizes increase after the connection has been initiated. (markt/remm)
      </fix>
      <fix>
        Bad processing of handshake errors in NIO2. (remm)
      </fix>
      <fix>
        Use JSSE session configuration options with OpenSSL. (remm)
      </fix>
      <fix>
        <bug>59015</bug>: Fix potential cause of endless APR Poller loop during
        shutdown if the Poller experiences an error during the shutdown process.
        (markt)
      </fix>
      <fix>
        Align cipher aliases for <code>kECDHE</code> and <code>ECDHE</code> with
        the current OpenSSL implementation. (markt)
      </fix>
      <fix>
        <bug>59081</bug>: Retain the user defined cipher order when defining
        ciphers. (markt)
      </fix>
      <fix>
        <bug>59089</bug>: Correctly ignore HTTP headers that include non-token
        characters in the header name. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Jasper">
    <changelog>
      <update>
        Update to the Eclipse JDT Compiler 4.5.1. (markt)
      </update>
      <fix>
        <bug>57583</bug>: Improve the performance of
        <code>javax.servlet.jsp.el.ScopedAttributeELResolver</code> when
        resolving attributes that do not exist. This improvement only works when
        Jasper is used with Tomcat's EL implementation. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="WebSocket">
    <changelog>
      <fix>
        Fix a timing issue on session close that could result in an exception
        being thrown for an incomplete message even through the message was
        completed. (markt)
      </fix>
      <fix>
        Correctly handle compression of partial messages when the final message
        fragment has a zero length payload. (markt)
      </fix>
      <fix>
        <bug>59119</bug>: Correct read logic for WebSocket client when using
        secure connections. (markt)
      </fix>
      <fix>
        <bug>59134</bug>: Correct client connect logic for secure connections
        made through a proxy. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Web applications">
    <changelog>
      <fix>
        Correct an error in the documentation of the expected behaviour for
        automatic deployment. If a WAR is updated and an expanded directory is
        present, the directory will always be deleted and recreated by expanding
        the WAR if <code>unpackWARs</code> is <code>true</code>. (markt)
      </fix>
      <fix>
        <bug>48674</bug>: Implement an option within the Host Manager web
        application to persist the current configuration. Based on a patch by
        Coty Sutherland. (markt)
      </fix>
      <fix>
        <bug>58935</bug>: Remove incorrect references in the documentation to
        using <code>jar:file:</code> URLs with the Manager application. (markt)
      </fix>
      <fix>
        Correct the description of the
        <code>ServletRequest.getServerPort()</code> in Proxy How-To.
        Issue reported via comments.apache.org. (violetagg)
      </fix>
      <add>
        The Manager and Host Manager applications are now only accessible via
        <code>localhost</code> by default. (markt)
      </add>
    </changelog>
  </subsection>
  <subsection name="Tribes">
    <changelog>
      <fix>
        If promoting a proxy node to a primary node when getting a session,
        notify the change of the new primary node to the original backup node.
        (kfujino)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Other">
    <changelog>
      <fix>
        <bug>58283</bug>: Change the default download location for libraries
        during the build process from <code>/usr/share/java</code> to
        <code>${user.home}/temp</code>. Patch provided by Ahmed Hosni. (markt)
      </fix>
      <fix>
        <bug>59031</bug>: When using the Windows uninstaller, do not remove the
        contents of any directories that have been symlinked into the Tomcat
        directory structure. (markt)
      </fix>
      <update>
        Update the packaged version of the Tomcat Native Library to 1.2.5 to
        pick up the Windows binaries that are based on OpenSSL 1.0.2g and APR
        1.5.1. (markt)
      </update>
      <update>
        Modify the default <code>tomcat-users.xml</code> file to make it harder
        for users to configure the entries intended for use with the examples
        web application for the Manager application. (markt)
      </update>
    </changelog>
  </subsection>
</section>
<section name="Tomcat 9.0.0.M3 (markt)" rtext="2016-02-05">
  <subsection name="General">
    <changelog>
      <add>
        Allow to configure multiple JUnit test class patterns with the build
        property <code>test.name</code> and document the property in
        BUILDING.txt. (rjung)
      </add>
    </changelog>
  </subsection>
  <subsection name="Catalina">
    <changelog>
      <fix>
        Protect initialization of <code>ResourceLinkFactory</code> when
        running with a SecurityManager. (kkolinko)
      </fix>
      <fix>
        Correct a thread safety issue in the filtering of session attributes
        based on the implementing class name of the value object. (markt)
      </fix>
      <fix>
        Fix class loader decision on the delegation for class loading and
        resource lookup and make it faster too. (rjung)
      </fix>
      <fix>
        <bug>58768</bug>: Log a warning if a redirect fails because of an
        invalid location. (markt)
      </fix>
      <scode>
        <bug>58827</bug>: Remove remains of JSR-77 implementation. (markt)
      </scode>
      <fix>
        <bug>58946</bug>: Ensure that the request parameter map remains
        immutable when processing via a RequestDispatcher. (markt)
      </fix>
      <fix>
        <bug>58905</bug>: Ensure that <code>Tomcat.silence()</code> silences the
        correct logger and respects the current setting. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Coyote">
    <changelog>
      <fix>
        Correct a regression in the connector refactoring in 9.0.0.M2 that broke
        TLS support for the APR/native connector. (remm)
      </fix>
      <fix>
        Correct an NPE when listing the enabled ciphers (e.g. via the Manager
        web application) for a TLS enabled APR/native connector. (markt)
      </fix>
      <add>
        New configuration option <code>ajpFlush</code> for the AJP connectors
        to disable the sending of AJP flush packets. (rjung)
      </add>
      <fix>
        Handle the case in the NIO connector where the required TLS buffer sizes
        increase after the connection has been initiated. (markt)
      </fix>
    </changelog>
  </subsection>
</section>
<section name="Tomcat 9.0.0.M2 (markt)" rtext="not released">
  <subsection name="Catalina">
    <changelog>
      <scode>
        Refactor creation of <code>MapperListener</code> to ensure that the
        <code>Mapper</code> used is the <code>Mapper</code> associated with the
        <code>Service</code> for which the listener was created. (markt)
      </scode>
      <add>
        Move the functionality that provides redirects for context roots and
        directories where a trailing <code>/</code> is added from the Mapper to
        the <code>DefaultServlet</code>. This enables such requests to be
        processed by any configured Valves and Filters before the redirect is
        made. This behaviour is configurable via the
        <code>mapperContextRootRedirectEnabled</code> and
        <code>mapperDirectoryRedirectEnabled</code> attributes of the Context
        which may be used to restore the previous behaviour. (markt)
      </add>
      <scode>
        Refactor <code>Service.getContainer()</code> to return an
        <code>Engine</code> rather than a <code>Container</code>. (markt)
      </scode>
      <fix>
        <bug>34319</bug>: Only load those keys in <code>StoreBase.processExpire</code>
        from JDBCStore, that are old enough, to be expired. Based on a patch
        by Tom Anderson. (fschumacher)
      </fix>
      <add>
        <bug>56917</bug>: As per RFC7231 (HTTP/1.1), allow HTTP/1.1 and later
        redirects to use relative URIs. This is controlled by a new attribute
        <code>useRelativeRedirects</code> on the <strong>Context</strong> and
        defaults to <code>true</code>. (markt)
      </add>
      <fix>
        <bug>58629</bug>: Allow an embedded Tomcat instance to start when the
        <code>Service</code> has no <code>Engine</code> configured. (markt)
      </fix>
      <fix>
        Correctly notify the MapperListener associated with a Service if the
        Engine for that Service is changed. (markt)
      </fix>
      <add>
        Make a web application's CredentialHandler available through a context
        attribute. This allows a web application to use the same algorithm
        for validating or generating new stored credentials from cleartext
        ones. (schultz)
      </add>
      <fix>
        <bug>58635</bug>: Enable break points to be set within agent code when
        running Tomcat with a Java agent. Based on a patch by Huxing Zhang.
        (markt)
      </fix>
      <fix>
        Fixed potential NPE in <code>HostConfig</code> while deploying an
        application. Issue reported by coverity scan. (violetagg)
      </fix>
      <fix>
        <bug>58655</bug>: Fix an <code> IllegalStateException</code> when
        calling <code>HttpServletResponse.sendRedirect()</code> with the
        <code>RemoteIpFilter</code>. This was caused by trying to correctly
        generate the absolute URI for the redirect. With the fix for
        <bug>56917</bug>, redirects may now be relative making the
        <code>sendRedirect()</code> implementation for the
        <code>RemoteIpFilter</code> much simpler. This also addresses issues
        where the redirect may not have behaved as expected when redirecting
        from http to https to from https to http. (markt)
      </fix>
      <fix>
        <bug>58657</bug>: Exceptions in a Servlet 3.1 <code>ReadListener</code>
        or <code>WriteListener</code> do not need to be immediately fatal to the
        connection. Allow an error response to be written. (markt)
      </fix>
      <fix>
        Correct implementation of
        <code>validateClientProvidedNewSessionId</code> so client provided
        session IDs may be rejected if validation is enabled. (markt)
      </fix>
      <fix>
        <bug>58701</bug>: Reset the <code>instanceInitialized</code> field in
        <code>StandardWrapper</code> when unloading a Servlet so that a new
        instance may be correctly initialized. (markt)
      </fix>
      <update>
        Add a new flag <code>aprPreferred</code> to the Apr listener. if set to
        <code>false</code>, when using the connector defaults, it will use
        NIO + OpenSSL if tomcat-native is available, rather than the APR
        connector. (remm)
      </update>
      <fix>
        Add path parameter handling to
        <code>HttpServletRequest.getContextPath()</code>. This is a follow-up to
        the fix for <bug>57215</bug>. (markt)
      </fix>
      <fix>
        <bug>58692</bug>: Make <code>StandardJarScanner</code> more robust. Log
        a warning if a class path entry cannot be scanned rather than triggering
        the failure of the web application. Includes a test case written by
         Derek Abdine. (markt)
      </fix>
      <fix>
        <bug>58702</bug>: Ensure an access log entry is generated if the client
        aborts the connection. (markt)
      </fix>
      <fix>
        Fixed various issues reported by Findbugs. (violetagg)
      </fix>
      <fix>
        <bug>58735</bug>: Add support for the <code>X-XSS-Protection</code>
        header to the <code>HttpHeaderSecurityFilter</code>. Patch provided by
        Jacopo Cappellato. (markt)
      </fix>
      <fix>
        Add the <code>StatusManagerServlet</code> to the list of Servlets that
        can only be loaded by privileged applications. (markt)
      </fix>
      <fix>
        Simplify code and fix messages in
        <code>org.apache.catalina.core.DefaultInstanceManager</code> class.
        (kkolinko)
      </fix>
      <fix>
        <bug>58751</bug>: Correctly handle the case where an
        <code>AsyncListener</code> dispatches to a Servlet on an asynchronous
        timeout and the Servlet uses <code>sendError()</code> to trigger an
        error page. Includes a test case based on code provided by Andy
        Wilkinson.(markt)
      </fix>
      <fix>
        Ensure that the proper file encoding if specified will be used when
        a readme file is served by DefaultServlet. (violetagg)
      </fix>
      <fix>
        Fix declaration of <code>localPort</code> attribute of Connector MBean:
        it is read-only. (kkolinko)
      </fix>
      <fix>
        <bug>58766</bug>: Make skipping non-class files during annotation
        scanning faster by checking the file name first. Improve debug logging.
        (kkolinko)
      </fix>
      <fix>
        <bug>58836</bug>: Correctly merge query string parameters when
        processing a forwarded request where the target includes a query string
        that contains a parameter with no value. (markt/kkolinko)
      </fix>
      <fix>
        Make sure that shared Digester is reset in an unlikely error case
        in <code>HostConfig.deployWAR()</code>. (kkolinko)
      </fix>
      <add>
        Extend the feature available in the cluster session manager
        implementations that enables session attribute replication to be
        filtered based on attribute name to all session manager implementations.
        Note that configuration attribute name has changed from
        <code>sessionAttributeFilter</code> to
        <code>sessionAttributeNameFilter</code>. Apply the filter on load as
        well as unload to ensure that configuration changes made while the web
        application is stopped are applied to any persisted data. (markt)
      </add>
      <add>
        Extend the session attribute filtering options to include filtering
        based on the implementation class of the value and optional
        <code>WARN</code> level logging if an attribute is filtered. These
        options are available for all of the Manager implementations that ship
        with Tomcat. When a <code>SecurityManager</code> is used filtering will
        be enabled by default. (markt)
      </add>
      <scode>
        Remove <code>distributable</code> and <code>maxInactiveInterval</code>
        from the <code>Manager</code> interface because the attributes are never
        used. The equivalent attributes from the <code>Context</code> always
        take precedence. (markt)
      </scode>
      <fix>
        <bug>58867</bug>: Improve checking on Host start for WAR files that have
        been modified while Tomcat has stopped and re-expand them if
        <code>unpackWARs</code> is <code>true</code>. (markt)
      </fix>
      <fix>
        <bug>58900</bug>: Correctly undeploy symlinked resources and prevent an
        infinite cycle of deploy / undeploy. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Coyote">
    <changelog>
      <fix>
        <bug>58621</bug>: The certificate chain cannot be set using the main
        certificate attribute, so restore the certificate chain property. (remm)
      </fix>
      <fix>
        Allow a new SSL config type where a connector can use either JSSE or
        OpenSSL. Both could be allowed, but it would likely create support
        issues. This type is used by the OpenSSL implementation for NIOx. (remm)
      </fix>
      <fix>
        Improve upgrade context classloader handling by using Context.bind and
        unbind. (remm)
      </fix>
      <add>
        Improve OpenSSL keystore/truststore configuration by using the code
        from the JSSE implementation. (remm, jfclere)
      </add>
      <fix>
        Fix a potential loop when a client drops the connection unexpectedly.
        (markt)
      </fix>
      <add>
        OpenSSL renegotiation support for client certificate authentication.
        (remm)
      </add>
      <fix>
        Fix NIO connector renegotiation. (remm)
      </fix>
      <fix>
        <bug>58659</bug>: Fix a potential deadlock during HTTP/2 processing when
        the connection window size is limited. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Jasper">
    <changelog>
      <fix>
        <bug>57136#c25</bug>: Change default value of
        <code>quoteAttributeEL</code> setting in Jasper to be <code>true</code>
        for better compatibility with other implementations and older versions
        of Tomcat. Add command line option <code>-no-quoteAttributeEL</code> in
        JspC. (kkolinko)
      </fix>
      <fix>
        Fix handling of missing messages in
        <code>org.apache.el.util.MessageFactory</code>. (violetagg)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Cluster">
    <changelog>
      <fix>
        Enable an explicit configuration of local member in the static cluster
        membership. (kfujino)
      </fix>
      <fix>
        Fix potential integer overflow in <code>DeltaSession</code>.
        Reported by coverity scan. (fschumacher)
      </fix>
      <fix>
        In order to avoid that the heartbeat thread and the background thread to
        run <code>Channel.heartbeat</code> simultaneously, if
        <code>heartbeatBackgroundEnabled</code> of <code>SimpleTcpCluster</code>
        set to <code>true</code>, ensure that the heartbeat thread does not
        start. (kfujino)
      </fix>
    </changelog>
  </subsection>
  <subsection name="WebSocket">
    <changelog>
      <add>
        <bug>55006</bug>: The WebSocket client now honors the
        <code>java.net.java.net.ProxySelector</code> configuration (using the
        HTTP type) when establishing WebSocket connections to servers. Based on
        a patch by Niki Dokovski. (markt)
      </add>
      <fix>
        <bug>58624</bug>: Correct a potential deadlock if the WebSocket
        connection is closed when a message write is in progress. (markt)
      </fix>
      <fix>
        <bug>57489</bug>: Ensure <code>onClose()</code> is called when a
        WebSocket connection is closed even if the sending of the close message
        fails. Includes test cases by Barry Coughlan. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Web Applications">
    <changelog>
      <fix>
        <bug>58631</bug>: Correct the continuation character use in the Windows
        Service How-To page of the documentation web application. (markt)
      </fix>
      <fix>
        Correct the SSL documentation for deprecated attributes to point to the
        correct, new location for attributes related to individual certificates.
        (markt)
      </fix>
      <fix>
        Correct some typos in the JNDI resources How-To. (markt)
      </fix>
      <fix>
        Don't create session unnecessarily in the Manager application. (markt)
      </fix>
      <fix>
        Don't create session unnecessarily in the Host Manager application.
        (markt)
      </fix>
      <fix>
        <bug>58723</bug>: Clarify documentation and error messages for the text
        interface of the manager to make clear that version must be used with
        path when referencing contexts deployed using parallel deployment.
        (markt)
      </fix>
      <add>
        Document <code>test.threads</code> option in BUILDING.txt. (kkolinko)
      </add>
    </changelog>
  </subsection>
  <subsection name="Tribes">
    <changelog>
      <fix>
        Ensure that the static member is registered to the add suspect list even
        if the static member that is registered to the remove suspect list has
        disappeared. (kfujino)
      </fix>
      <fix>
        When using a static cluster, add the members that have been cached in
        the membership service to the map members list in order to ensure that
        the map member is a static member. (kfujino)
      </fix>
      <fix>
        Add support for the startup notification of local members in the static
        cluster. (kfujino)
      </fix>
      <fix>
        Ignore the unnecessary member remove operation from different domain.
        (kfujino)
      </fix>
      <fix>
        Add support for the shutdown notification of local members in the static
        cluster. (kfujino)
      </fix>
    </changelog>
  </subsection>
  <subsection name="jdbc-pool">
    <changelog>
      <fix>
        Correct evaluation of system property
        <code>org.apache.tomcat.jdbc.pool.onlyAttemptCurrentClassLoader</code>.
        It was basically ignored before. Reported by coverity scan. (fschumacher)
      </fix>
      <fix>
        Fix potential integer overflow in <code>ConnectionPool</code> and
        <code>PooledConnection</code>. Reported by coverity scan. (fschumacher)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Other">
    <changelog>
      <update>
        Update optional Checkstyle library to 6.14.1. (kkolinko)
      </update>
      <update>
        Update the packaged version of the Tomcat Native Library to 1.2.4 to
        pick up the Windows binaries that are based on OpenSSL 1.0.2e and APR
        1.5.1. (markt)
      </update>
      <update>
        Update the NSIS Installer used to build the Windows Installers to
        version 2.50. (markt/kkolinko)
      </update>
      <update>
        Update the internal fork of Commons BCEL to r1725718 to align with the
        refactoring for BCEL 6, the next major BCEL release. (markt)
      </update>
      <update>
        Update the internal fork of Commons DBCP 2 to r1725730 (2.1.1 plus
        additional fixes). (markt)
      </update>
      <update>
        Update the internal fork of Commons Pool 2 to r1725738 (2.4.2 plus
        additional fixes). (markt)
      </update>
      <update>
        Update the internal fork of Commons Codec to r1725746 (1.9 plus
        additional fixes). (markt)
      </update>
    </changelog>
  </subsection>
</section>
<section name="Tomcat 9.0.0.M1 (markt)" rtext="2015-11-17">
  <subsection name="General">
    <changelog>
      <add>
        Make Java 8 the minimum required version to build and run Tomcat 9.
        (markt)
      </add>
      <update>
        Remove support for Comet. (markt)
      </update>
      <update>
        Tighten up the default file permissions for the <code>.tar.gz</code>
        distribution so no files or directories are world readable by default.
        Configure Tomcat to run with a default umask of <code>0027</code> which
        may be overridden by setting <code>UMASK</code> in
        <code>setenv.sh</code>. (markt)
      </update>
      <update>
        Remove native code (Windows Service Wrapper, APR/native connector)
        support for Windows Itanium. (markt)
      </update>
    </changelog>
  </subsection>
  <subsection name="Catalina">
    <changelog>
      <update>
        The default HTTP cookie parser has been changed to
        <code>org.apache.tomcat.util.http.Rfc6265CookieProcessor</code>. (markt)
      </update>
    </changelog>
  </subsection>
  <subsection name="Coyote">
    <changelog>
      <update>
        Remove support for the HTTP BIO and AJP BIO connectors. (markt)
      </update>
      <scode>
        Refactor HTTP upgrade and AJP implementations to reduce duplication.
        (markt)
      </scode>
      <add>
        Add support for HPACK header encoding and decoding, contributed
        by Stuart Douglas. (remm)
      </add>
      <add>
        <bug>57108</bug>: Add support for Server Name Indication (SNI). There
        has been significant changes to the SSL configuration in server.xml to
        support this. (markt)
      </add>
      <add>
        Add SSL engine for JSSE backed by OpenSSL. Includes ALPN support.
        Based on code contributed by Numa de Montmollin and derived from code
        developed by Twitter and Netty. (remm)
      </add>
      <fix>
        RFC 7230 states that clients should ignore reason phrases in HTTP/1.1
        response messages. Since the reason phrase is optional, Tomcat no longer
        sends it. As a result the system property
        <code>org.apache.coyote.USE_CUSTOM_STATUS_MSG_IN_HEADER</code> is no
        longer used and has been removed. (markt)
      </fix>
      <update>
        The minimum required Tomcat Native version has been increased to 1.2.2.
        The 1.2.x branch includes ALPN and SNI support which are required for
        HTTP/2. (markt)
      </update>
      <add>
        Add support for HTTP/2 including server push. (markt)
      </add>
    </changelog>
  </subsection>
  <subsection name="Tribes">
    <changelog>
      <fix>
        Clarify the handling of Copy message and Copy nodes. (kfujino)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Other">
    <changelog>
      <add>
        Support the use of the <code>threads</code> attribute on Ant&apos;s
        junit task. Note that using this with a value of greater than one will
        disable Cobertura code coverage. (markt)
      </add>
    </changelog>
  </subsection>
</section>
</body>
</document>
