<?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">
]>
<?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.

  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 8.0.29 (markt)" rtext="in development">
  <subsection name="General">
    <changelog>
      <update>
        <bug>58596</bug>: Clarify the description in RUNNING.txt of how
        environment variables are used. (markt)
      </update>
    </changelog>
  </subsection>
  <subsection name="Catalina">
    <changelog>
      <add>
        Extend the fix for <bug>57136</bug> to provide a JSP Servlet
        initialisation parameter per web application that controls whether o
        not EL in JSP attributes is processed as if it uses JSP attribute
        quoting. By default, EL does not use JSP attribute quoting. (markt)
      </add>
      <fix>
        <bug>57799</bug>: InputStream.available() was causing an IO operation
        to occur even in blocking mode, which caused problems with NIO2.
        (remm)
      </fix>
      <add>
        Extend the fix for <bug>58228</bug> to include
        <code>ServletContext.getRealPath()</code>. (markt)
      </add>
      <add>
        <bug>58486</bug>: Protect against two further possible memory leaks
        associated with XML parsing. (markt)
      </add>
      <fix>
        <bug>58490</bug>: Fixed NPE thrown when scanning for
        <code>javax.servlet.ServletContainerInitializer</code> in case the web
        application is not extracted. (violetagg)
      </fix>
      <scode>
        <bug>58497</bug>: Make <code>AbstractHttp11Processor</code> easy to
        extend. (markt)
      </scode>
      <fix>
        <bug>58508</bug>: Escape role names when generating associated MBeans in
        case the role name contains characters not permitted in an MBean name.
        (markt)
      </fix>
      <fix>
        <bug>58518</bug>: Correct a regression in the fix for <bug>56777</bug>
        that added support for URIs in config file locations. File paths on
        Windows could previously be specified with <code>\</code> or
        <code>/</code> as the separator. <bug>56777</bug> broke that. (markt)
      </fix>
      <fix>
        <bug>58519</bug>: Fix ISE thrown by web application classloader in some
        error conditions due to trying to call <code>initCause()</code> on a
        <code>ClassNotFoundException</code> which is not permitted. (markt)
      </fix>
      <fix>
        <bug>58534</bug>: Removed repeated conditional tests in
        <code>o.a.tomcat.websocket.pojo.PojoMethodMapping</code> and
        <code>o.a.tomcat.util.net.AprEndpoint</code>
        Patch provided by Anthony Whitford. (violetagg)
      </fix>
      <fix>
        <bug>58535</bug>: Use <code>Collections.reverseOrder</code>
        when a reverse ordering is needed. (violetagg)
      </fix>
      <fix>
        <bug>58537</bug>, <bug>58546</bug>: Some of the inner classes in
        <code>o.a.catalina.valves.ExtendedAccessLogValve</code>
        and <code>o.a.tomcat.util.net.SecureNio2Channel</code>
        are made static.
        Patch provided by Anthony Whitford. (violetagg)
      </fix>
      <fix>
        <bug>58540</bug>: Removed unused code from
        <code>o.a.catalina.connector.Request</code>.
        Patch provided by Anthony Whitford. (violetagg)
      </fix>
      <fix>
        <bug>58541</bug>, <bug>58544</bug>: It is more efficient to call
        <code>Integer.toString(int)</code> instead of
        <code>Integer.valueOf(int).toString()</code> when only a string
        representation of a primitive is needed. Based on a patch provided by
        Anthony Whitford. (violetagg)
      </fix>
      <fix>
        <bug>58541</bug>, <bug>58547</bug>: It is more efficient to call
        <code>valueOf(...)</code> instead of Number constructor. Based on a
        patch provided by Anthony Whitford. (violetagg)
      </fix>
      <fix>
        <bug>58545</bug>: In some use cases it is more efficient to use
        <code>Map.entrySet()</code> instead of <code>Map.keySet()</code>
        Based on a patch provided by Anthony Whitford. (violetagg)
      </fix>
      <fix>
        Ensure that <code>ServletRequest.getContentLengthLong</code> is used
        instead of <code>ServletRequest.getContentLength</code> for servlets and
        valves provided by Tomcat. The API is available since Servlet
        specification 3.1. (violetagg)
      </fix>
      <add>
        Add a new RestCsrfPreventionFilter that provides basic CSRF protection
        for REST APIs. (violetagg)
      </add>
      <fix>
        <bug>58578</bug>: Avoid NPE accessing cookies during access logging
        for request that had no context mapping. (remm)
      </fix>
      <fix>
        Avoid UnsupportedOperationException when releasing an user-provided
        URLStreamHandlerFactory. Patch provided by Cristian Talau. (violetagg)
      </fix>
      <fix>
        <bug>58581</bug>: If a custom error page fails, fall back to the
        standard error page rather than throwing an NPE. Based on a patch by
        Huxing Zhang. (markt)
      </fix>
      <fix>
        <bug>58582</bug>: Combined realm should perform background processing
        on its sub-realms. Based upon a patch provided by Aidan. (schultz)
      </fix>
      <fix>
        Handle the unlikely case where different versions of a web application
        are deployed with different session settings. (markt)
      </fix>
      <add>
        Add a new Context option, enabled by default, that enables an additional
        check that a client provided session ID is in use in at least one other
        web application before allowing it to be used as the ID for a new
        session in the current web application. (markt)
      </add>
      <add>
        Add support for DIGEST authentication to the JNDIRealm. Based on a patch
        by Alexis Hassler. (markt)
      </add>
      <fix>
        <bug>58603</bug>: Ensure that
        <code>HttpServletRequest.getRequestURL()</code> returns the correct
        value when using the <code>RemoteIpFilter</code>. (markt)
      </fix>
      <fix>
        Ensure that in an embedded Tomcat the logging configuration is
        not lost during garbage collection. (violetagg)
      </fix>
      <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>
    </changelog>
  </subsection>
  <subsection name="Coyote">
    <changelog>
      <fix>
        Cancel pending blocking IO operation following a timeout in the NIO2
        connector. (remm)
      </fix>
      <fix>
        Add instance manager support for upgrade handlers, and set context
        class loader. (remm)
      </fix>
      <update>
        Synchronize OpenSSL to JSSE cipher mapping to recent OpenSSL changes. In
        particular, <code>TLSv1.0</code> is no an alias for those ciphers that
        require TLSv1 and will no work with SDSLv3. <code>TLSv1</code> remains
        an alias for <code>SSLv3</code>. (markt)
      </update>
    </changelog>
  </subsection>
  <subsection name="Jasper">
    <changelog>
      <add>
        Deprecate the <code>STRICT_QUOTE_ESCAPING</code> system property and
        replace it with an initialisation parameter for the JSP Servlet. This
        enables per web application control of this configuration setting.
        (markt)
      </add>
    </changelog>
  </subsection>
  <subsection name="Cluster">
    <changelog>
      <fix>
        Optimize the session lock range in DeltaManager.requestCompleted.
        (kfujino)
      </fix>
      <fix>
        Enable an explicit configuration of local member in the static cluster
        membership. (kfujino)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Tribes">
    <changelog>
      <scode>
        Distinguish the handling of the shutdown payload and member verification
        clearly. When handling shutdown payload, verification completion message
        is not required. (kfujino)
      </scode>
      <fix>
        When starting the <code>StaticMembershipInterceptor</code>,
        <code>StaticMembershipInterceptor</code> checks  the required
        Interceptors. If the required Interceptor does not exist, it issues
        warning logs. (kfujino)
      </fix>
    </changelog>
  </subsection>
  <subsection name="WebSocket">
    <changelog>
      <fix>
        Use instance manager for server endpoint instances. (remm)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Web applications">
    <changelog>
      <add>
        Make it clear in the documentation for the CGI servlet that the debug
        page is not considered secure and should not be used in production.
        (markt)
      </add>
      <fix>
        The <code>domain</code> attribute of <code>StaticMember</code> is not
        required but optional. (kfujino)
      </fix>
    </changelog>
  </subsection>
  <subsection name="jdbc-pool">
    <changelog>
      <fix>
        <bug>58489</bug>: Correct QueryStatsComparator to hold up the
        general contract for Comparator. (fschumacher)
      </fix>
      <fix>
        When creating a <code>QueryStats</code> object, ensure that
        <code>maxQueries</code> is checked. If <code>maxQueries</code> is a
        value less than or equal to 0, <code>QueryStats</code> are never
        created. (kfujino)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Other">
    <changelog>
      <update>
        Update optional Checkstyle library to 6.12.1. (kkolinko)
      </update>
      <add>
        Add support for creating a FindBugs report when building Tomcat. It
        is disabled by default. (violetagg)
      </add>
    </changelog>
  </subsection>
</section>
<section name="Tomcat 8.0.28 (markt)" rtext="2015-10-12">
  <subsection name="Catalina">
    <changelog>
      <add>
        Add support for the custom <code>classpath</code> protocol in URLs. It
        an be used anywhere Tomcat accepts a URL for a configuration parameter.
        (markt)
      </add>
      <fix>
        <bug>56777</bug>: Allow file based configuration resources (user
        database, certificate revocation lists, keystores and trust stores) to
        be configured using URLs as well as files. (markt)
      </fix>
      <fix>
        Perform null-checking on input and stored credentials in all Realms
        before passing credentials off to CredentialHandlers for matching.
        (schultz)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Coyote">
    <changelog>
      <update>
        Add the new ciphers from RFC6655 and RFC7251 to the OpenSSL to JSSE
        cipher mapping. (markt)
      </update>
      <update>
        Remove DES, RC2 and RC4 from DEFAULT for the OpenSSL to JSSE cipher
        mapping to align with the OpenSSL development branch. (markt)
      </update>
    </changelog>
  </subsection>
  <subsection name="Jasper">
    <changelog>
      <fix>
        Improve the error message when JSP parser encounters an error parsing an
        attribute value. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Web applications">
    <changelog>
      <update>
        <bug>58474</bug>: Provide a reference to the differences between
        <code>CATALINA_HOME</code> and <code>CATALINA_BASE</code> in the sample
        application that is part of the documentation web application. (markt)
      </update>
    </changelog>
  </subsection>
  <subsection name="Extras">
    <changelog>
      <fix>
        Ensure JULI adapters does not include the LogFactoryImpl class. Patch
        provided by Benjamin Gandon. (markt)
      </fix>
    </changelog>
  </subsection>
</section>
<section name="Tomcat 8.0.27 (markt)" rtext="2015-10-01">
  <subsection name="Catalina">
    <changelog>
      <fix>
        <bug>58187</bug>: Correct a regression in the fix for <bug>57765</bug>
        that meant that deployment of web applications deployed via the Manager
        application was delayed until the next execution of the automatic
        deployment background process. (markt)
      </fix>
      <fix>
        <bug>58284</bug>: Correctly implement session serialization so
        non-serializable attributes are skipped with a warning. Patch provided
        by Andrew Shore. (markt)
      </fix>
      <fix>
        <bug>58313</bug>: Fix concurrent access of encoders map when clearing
        encoders prior to switch to async. (markt)
      </fix>
      <fix>
        <bug>58320</bug>: Fix concurrent access of request attributes which is
        possible during asynchronous processing. (markt)
      </fix>
      <fix>
        <bug>58352</bug>: Always trigger a thread dump if Tomcat fails to stop
        gracefully from <code>catalina.sh</code> even if using
        <code>-force</code>. Patch provided by  Alexandre Garnier. (markt)
      </fix>
      <fix>
        <bug>58368</bug>: Fix a rare data race in the code that obtains the
        <code>ApplicationFilterFactory</code> instance. (markt)
      </fix>
      <fix>
        <bug>58369</bug>: Fix a rare data race in the code that obtains the
        CookieProcessor for a StandardContext instance. (markt)
      </fix>
      <fix>
        Ensure the JAASRealm uses the configured CredentialHandler. (markt)
      </fix>
      <fix>
       <bug>58372</bug>: Fix rare data races closed and suspended flags that
       could be triggered by async and/or comet processing. (markt)
      </fix>
      <fix>
        <bug>58373</bug>: Fix rare data race with the application event
        listeners for StandardContext. (markt)
      </fix>
      <fix>
        <bug>58374</bug>: Fix a rare data race in the AsyncContext
        implementation for access to the internal Tomcat request object to which
        it holds a reference. (markt)
      </fix>
      <fix>
        <bug>58380</bug>: Fix two rare data races in the standard session
        implementation on the flag that tracks if the session is new and on the
        field that tracks the maximum inactive period. (markt)
      </fix>
      <fix>
        <bug>58385</bug>: Fix a rare data race in the internal flag Tomcat uses
        to keep track of whether or not a request is being used for Comet
        processing. (markt)
      </fix>
      <fix>
        <bug>58394</bug>: Fix a rare data race in Mapper when adding or removing
        a host. (markt)
      </fix>
      <fix>
        <bug>58398</bug>: Fix a rare data race in <code>LifecycleSupport</code>.
        (markt)
      </fix>
      <fix>
        <bug>58412</bug>: Ensure that the <code>AsyncFileHandler</code> has the
        source class and method name available for logging. (fschumacher)
      </fix>
      <fix>
        <bug>58416</bug>: Correctly detect when a forced stop fails to stop
        Tomcat because the Tomcat process is waiting on some system call or is
        uninterruptible. (markt)
      </fix>
      <fix>
        <bug>58436</bug>: Fix some rare data races in JULI&apos;s
        <code>ClassLoaderLogManager</code> during shutdown. (markt)
      </fix>
      <fix>
        <bug>58845</bug>: Fix off-by one error in calculation of valid
        characters in a cookie domain. Patch provided by Thorsten Ehlers.
        (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Coyote">
    <changelog>
      <fix>
        Correct some edge cases in <code>RequestUtil.normalize()</code>. (markt)
      </fix>
      <fix>
        <bug>58275</bug>: The IBM JREs accept cipher suite names starting with
        <code>TLS_</code> or <code>SSL_</code> but when listing the supported
        cipher suites only the <code>SSL_</code> version is reported. This can
        break Tomcat&apos;s check that at least one requested cipher suite is
        supported. Tomcat now includes a work-around so either form of the
        cipher suite name can be used when running on an IBM JRE. (markt)
      </fix>
      <fix>
        <bug>58357</bug>: For reasons not currently understood when the
        APR/native connector is used with OpenSSL reads can return an error code
        when there is no apparent error. This was work-around for HTTP upgrade
        connections by treating this as <code>EAGAIN</code>. The same fix has
        now been applied to the standard HTTP connector. (markt)
      </fix>
      <scode>
        Minor clean-up in NIO2 SSL handshake code to address some theoretical
        concurrency issues. (markt)
      </scode>
      <fix>
        <bug>58367</bug>: Fix a rare data race in the code that obtains the
        reason phrase for a given HTTP response code. (markt)
      </fix>
      <fix>
        <bug>58370</bug>: Fix a rare data race in the connector shutdown code.
        (markt)
      </fix>
      <fix>
        <bug>58371</bug>: Fix a rare data race when accessing request URI in
        String form when switching from non-async to async due to early
        triggering of the gathering of request statistics. (markt)
      </fix>
      <fix>
        <bug>58375</bug>: Fix a rare data race on the internal flag Tomcat uses
        to mark a response as committed. (markt)
      </fix>
      <fix>
        <bug>58377</bug>: Fix a rare data race on the internal flag Tomcat uses
        to mark a request as using HTTP keep-alive when switching to
        asynchronous processing. (markt)
      </fix>
      <fix>
        <bug>58379</bug>: Fix a rare data race on the interal reference Tomcat
        retains to the socket when switching to asynchronous processing. (markt)
      </fix>
      <fix>
        <bug>58387</bug>: Fix a rare data race when closing Comet connections.
        (markt)
      </fix>
      <fix>
        <bug>58388</bug>: Fix a data race when determining if Comet processing
        is occurring on a container or non-container thread. (markt)
      </fix>
      <fix>
        <bug>58389</bug>: Fix a rare data race while shutting down the thread
        pools on Connector stop. (markt)
      </fix>
      <scode>
        Clean up use of error flag on socket wrapper prompted by
        <bug>58390</bug>. (markt)
      </scode>
      <scode>
        Remove some unnecessary code from the NIO Poller and fix
        <bug>58396</bug> as a side-effect. (markt)
      </scode>
      <fix>
        <bug>57799</bug>: Remove useless sendfile check for NIO SSL. (remm)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Jasper">
    <changelog>
      <fix>
        <bug>57136</bug>: Correct a regression in the previous fix for this
        issue. <code>\${</code> should only be an escape for <code>${</code>
        within an EL expression. Within a JSP page <code>\$</code> should be an
        escape for <code>$</code>. The EL specification applies when parsing the
        expression delimited by <code>${</code> and <code>}</code>. Parsing of
        the delimiting <code>${</code> and <code>}</code> is the responsibility
        of the JSP specification. (markt)
      </fix>
      <fix>
        <bug>58296</bug>: Fix a memory leak in the JSP unloading feature that
        meant that using a value other than <code>-1</code> for
        <code>maxLoadedJsps</code> triggered a memory leak once the limit was
        reached. (markt)
      </fix>
      <fix>
        <bug>58327</bug>: Cache the expression string for value expression
        literals since it is frequently used and may be expensive to evaluate.
        Patch provided by Andreas Kohn. (markt)
      </fix>
      <fix>
        <bug>58340</bug>: Improve error reporting for tag files packaged in
        JARs. (markt)
      </fix>
      <fix>
        <bug>58424</bug>: When parsing TLD files, allow whitespace around
        boolean configuration values. (schultz)
      </fix>
      <fix>
        Fix a possible resource leak reported by coverity scan. (fschumacher)
      </fix>
      <fix>
        <bug>58427</bug>: Enforce the JSP specification defined limitations of
        which elements are allowed in an implicit.tld file. (markt)
      </fix>
      <fix>
        <bug>58444</bug>: Ensure that JSPs work with any custom base class that
        meets the requirements defined in the JSP specification without
        requiring that base class to implement Tomcat specific code. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Cluster">
    <changelog>
      <fix>
        Fix a default clusterListeners in <code>SimpleTcpCluster</code>. The
        optimal default value is different for each session manager.
        <code>ClusterSessionListener</code> is never used in
        <code>BackupManager</code>. (kfujino)
      </fix>
      <fix>
        Correct log messages in case of using <code>BackupManager</code>.
        (kfujino)
      </fix>
    </changelog>
  </subsection>
  <subsection name="WebSocket">
    <changelog>
      <fix>
        <bug>58342</bug>: Fix a copy and paste error that meant MessageHandler
        removal could fail for binary and pong MessageHandlers. Patch provided
        by DJ. (markt)
      </fix>
      <fix>
        Data races detected by RV-Predict, mostly caused by completion handlers
        running in separate threads. (markt)
      </fix>
      <fix>
        <bug>58414</bug>: Correctly handle sending zero length messages when
        using per message deflate. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Web applications">
    <changelog>
      <fix>
        Correct documentation for cluster-howto. (kfujino)
      </fix>
      <fix>
        Add missing documentation for property <code>alwaysAddExpires</code> for
        the <code>LegacyCookieProcessor</code>. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Tribes">
    <changelog>
      <add>
        Add support for configurations of <code>ChannelListener</code> and
        <code>MembershipListener</code> in server.xml. (kfujino)
      </add>
      <fix>
        Correct log messages in case of using <code>ReplicatedMap</code>.
        (kfujino)
      </fix>
      <fix>
        <bug>58381</bug>: Fix a rare data race in the <code>NioReceiver</code>.
        (markt)
      </fix>
      <fix>
        <bug>58382</bug>: Fix multiple rare data races in the default membership
        implementation. (markt)
      </fix>
      <fix>
        <bug>58383</bug>: Fix a data race in <code>SenderState</code>. (markt)
      </fix>
      <fix>
        <bug>58386</bug>: Fix a data race in <code>ObjectReader</code>. (markt)
      </fix>
      <fix>
        <bug>58391</bug>: Fix multiple data races in
        <code>NonBlockingCoordinator</code>, most of which were associated with
        ensuring that log messages contained the correct information. (markt)
      </fix>
      <fix>
        <bug>58392</bug>: Fix a data race in
        <code>DomainFilterInterceptor</code>. (markt)
      </fix>
      <fix>
        <bug>58393</bug>: Fix a data race on the listener in
        <code>McastService</code>. (markt)
      </fix>
      <fix>
        <bug>58395</bug>: Fix multiple data races in <code>MemberImpl</code>
        that were likely to cause issues if certain properties were updated
        concurrently (such updates are unlikely in normal usage). (markt)
      </fix>
      <scode>
        Remove some unnecessary code from <code>PooledParallelSender</code> and
        fix <bug>58397</bug>. (markt)
      </scode>
    </changelog>
  </subsection>
  <subsection name="jdbc-pool">
    <changelog>
      <fix>
        Make sure the pool has been properly configured when attributes that
        related to the pool size are changed via JMX. (kfujino)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Other">
    <changelog>
      <fix>
        Ensure logging works for all tests in a class rather than just the first
        one executed. (markt)
      </fix>
      <add>
        <bug>58344</bug>: Add build properties to enable tests to be executed
        against alternative binaries. Based on a patch by Petr Sumbera. (markt)
      </add>
    </changelog>
  </subsection>
</section>
<section name="Tomcat 8.0.26 (markt)" rtext="2015-08-21">
  <subsection name="Web applications">
    <changelog>
      <add>
        <bug>58255</bug>: Document the Semaphore valve. Patch provided by
        Kyohei Nakamura. (markt)
      </add>
    </changelog>
  </subsection>
</section>
<section name="Tomcat 8.0.25 (markt)" rtext="not released">
  <subsection name="Catalina">
    <changelog>
      <fix>
        Make the WAR manifest file available for WebResource instances from an
        unpacked WAR in the same way the manifest is available if the WAR is not
        unpacked. (markt)
      </fix>
      <fix>
        Ensure that only <code>/WEB-INF/classes/</code> and
        <code>/WEB-INF/lib/</code> are excluded from the web resource caching.
        (Resources loaded from these locations are cached by the web application
        class loader.) (markt)
      </fix>
      <add>
        <bug>57741</bug>: Enable the CGI servlet to use the standard error page
        mechanism. Note that if the CGI servlet&apos;s debug init parameter is
        set to 10 or higher then the standard error page mechanism will be
        bypassed and a debug response generated by the CGI servlet will be
        returned instead. (markt)
      </add>
      <fix>
        <bug>58031</bug>: Make the (first) reason parameter parsing failed
        available as a request attribute and then use it to provide a better
        status code via the FailedRequstFilter (if configured). (markt)
      </fix>
      <fix>
        <bug>58086</bug>: Correct a regression in the fix for 58086 that
        incorrectly handled WAR URLs. (violetagg)
      </fix>
      <fix>
        <bug>58096</bug>: Classes loaded from <code>/WEB-INF/classes/</code>
        should use that directory as their code base. (markt)
      </fix>
      <fix>
        Fix possible resource leaks by closing streams properly.
        Issues reported by Coverity Scan. (violetagg)
      </fix>
      <fix>
        <bug>58116</bug>: Fix regression in the fix for <bug>57281</bug> that
        broke Comet support when running under a security manager. Based on a
        patch provided by Johno Crawford. (markt)
      </fix>
      <fix>
        <bug>58125</bug>: Avoid a possible <code>ClassCircularityError</code>
        when running under a security manager. (markt)
      </fix>
      <fix>
        <bug>58179</bug>: Fix a thread safety issues that could mean concurrent
        threads setting the same attribute on a <code>ServletContext</code>
        could both see <code>null</code> as the old value. (markt)
      </fix>
      <fix>
        Allow web archives bigger than 2G to be deployed using ANT tasks.
        (violetagg)
      </fix>
      <fix>
        <bug>58192</bug>: Correct a regression in the previous fix for
        <bug>58023</bug>. Ensure that classes are associated with their manifest
        even if the class file is first read (and cached) without the manifest.
        (markt)
      </fix>
      <fix>
        Fix thread safety issue in the <code>AsyncContext</code> implementation
        that meant a sequence of <code>start();dispatch();</code> calls using
        non-container threads could result in a previous dispatch interfering
        with a subsequent start. (markt)
      </fix>
      <fix>
        <bug>58228</bug>: Make behaviour of
        <code>ServletContext.getResource()</code> and
        <code>ServletContext.getResourceAsStream()</code> consistent with each
        other and the expected behaviour of the GET_RESOURCE_REQUIRE_SLASH
        system property. (markt)
      </fix>
      <fix>
        <bug>58230</bug>: Fix input stream corruption if non-blocking I/O is
        used and the first read is made immediately after the switch to async
        mode rather than in response to <code>onDataAvaiable()</code> and that
        read does not read all the available data. (markt)
      </fix>
      <fix>
        Ensure that <code>log4javascript*.jar</code> was not excluded from the
        standard JAR scanning by default. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Coyote">
    <changelog>
      <fix>
        <bug>57943</bug>: Prevent the same socket being added to the cache
        twice. Patch based on analysis by Ian Luo / Sun Qi. (markt)
      </fix>
      <fix>
        Add <code>text/javascript,application/javascript</code> to the default
        list of compressable MIME types. (violetagg)
      </fix>
      <fix>
        <bug>58103</bug>: When pipelining requests, and the previous request was
        an async request, ensure that the socket is removed from the waiting
        requests so that the async timeout thread doesn't process it during the
        next request. (markt)
      </fix>
      <fix>
        <bug>58151</bug>: Correctly handle EOF in the AJP APR/native connector
        to prevent the connector entering a loop and generate excessive CPU
        load. (markt)
      </fix>
      <fix>
        In the AJP and HTTP NIO connectors, ensure that the socket timeout is
        correctly set before adding the socket back to the poller for read.
        (markt)
      </fix>
      <fix>
        <bug>58157</bug>: Ensure that the handling of async timeouts does not
        result in an unnecessary dispatch to a container thread that could
        result in the current socket being added to the Poller multiple times
        with multiple attempts to process the same event for the same socket.
        (markt)
      </fix>
      <fix>
        Correct a couple of edge cases in <code>RequestUtil.normalize()</code>.
        (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Jasper">
    <changelog>
      <fix>
        <bug>58110</bug>: Like scriptlet sections, declaration sections of JSP
        pages have a one-to-one mapping of lines to the generated .java file.
        Use this information to provide more accurate error messages if a
        compilation error occurs in a declaration section. (markt)
      </fix>
      <fix>
        <bug>58119</bug>: When tags are compiled they must be placed in the
        org/apache/jsp/tag/web directory. Correct a regression in the fix for
        52725. (violetagg)
      </fix>
      <fix>
        Fix a resource leak in JspC identified by Eclipse. (markt)
      </fix>
      <fix>
        <bug>58178</bug>: Expressions in a tag file should use the tag
        file&apos;s <code>PageContext</code> rather than that of the containing
        page. (markt)
      </fix>
      <fix>
        Following on from the fix for <bug>58178</bug>, expressions in a tag
        file should use the tag file&apos;s imports rather than those of the
        containing page. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="WebSocket">
    <changelog>
      <fix>
        <bug>58166</bug>: Allow applications to send close codes in the range
        3000-4999 inclusive. (markt)
      </fix>
      <fix>
        <bug>58232</bug>: Avoid possible NPE when adding endpoints
        programmatically to the
        <code>javax.websocket.server.ServerContainer</code>.
        Based on a patch provided by bastian.(violetagg)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Web applications">
    <changelog>
      <fix>
        Correct the incorrect document of <code>QueryTimeoutInterceptor</code>.
        The setting value is not in milliseconds but in seconds. (kfujino)
      </fix>
      <fix>
        <bug>58112</bug>: Update the documentation for using the Catalina tasks
        in an Apache Ant build file. (markt)
      </fix>
      <fix>
        Improve the Javadoc for some of the APR socket read functions that have
        inconsistent behaviour for return values. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="jdbc-pool">
    <changelog>
      <fix>
        <bug>58042</bug>: The default value of <code>logFailed</code> attribute
        of <code>SlowQueryReport</code> is changed to <code>false</code> so that
        the failed queries are not logged by default. (kfujino)
      </fix>
      <fix>
        Fix potential NPE in <code>QueryTimeoutInterceptor</code>. (kfujino)
      </fix>
      <fix>
        Add support for stopping the pool cleaner via JMX. (kfujino)
      </fix>
      <fix>
        The <code>fairness</code> attribute and
        <code>ignoreExceptionOnPreLoad</code> attribute do not allow a change
        via JMX. (kfujino)
      </fix>
      <fix>
        If the <code>timeBetweenEvictionRunsMillis</code> attribute is changed
        via jmx, it should restart the pool cleaner because this attribute
        affects the execution interval of the pool cleaner. (kfujino)
      </fix>
      <fix>
        Eliminate the dependence on <code>maxActive</code> of busy queues and
        idle queue in order to enable the expansion of the pool size via JMX.
        (kfujino)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Other">
    <changelog>
      <update>
        Update optional Checkstyle library to 6.8.1. (kkolinko)
      </update>
      <fix>
        Update sample Eclipse IDE configuration to exclude test/webapp* and
        similar paths from compiler sourcepath. (kkolinko)
      </fix>
      <update>
        Update package renamed Apache Commons Pool to Commons Pool 2.4.2.
        (markt)
      </update>
      <update>
        Update package renamed Apache Commons DBCP to Commons DBCP 2.1.1.
        (markt)
      </update>
      <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>
<section name="Tomcat 8.0.24 (markt)" rtext="2015-07-06">
  <subsection name="Catalina">
    <changelog>
      <fix>
        <bug>57938</bug>: Correctly handle empty form fields when a form is
        submitted as <code>multipart/form-data</code>, the
        <code>maxPostSize</code> attribute of the Connector has been set to a
        negative value and the Context has been configured with a value of
        <code>true</code> for <code>allowCasualMultipartParsing</code>. The
        meaning of the value zero for the <code>maxPostSize</code> has also been
        changed to mean a limit of zero rather than no limit to align it with
        <code>maxSavePostSize</code> and to be more intuitive. (markt)
      </fix>
      <fix>
        <bug>57977</bug>: Correctly bind and unbind the web application class
        loader during execution of the PersistentValve. (markt)
      </fix>
      <fix>
        Remove some unnecessary code from the web application class loader and
        deprecate the now unused <code>validate()</code> method since the
        requirements of SRV.10.7.2 are met using cleaner code in
        <code>loadClass(String, boolean)</code> and <code>filter()</code>.
        (markt)
      </fix>
      <fix>
        Correct a bug that prevented the web application class loader&apos;s
        <code>filter()</code> from working correctly. It only returned
        <code>true</code> for classes in sub-packages of the listed packages,
        but not classes located in the packages themselves. (markt)
      </fix>
      <fix>
        Add the WebSocket API classes to the list of classes that the web
        application class loader will always delegate to its parent for loading
        first. (markt)
      </fix>
      <fix>
        <bug>58015</bug>: Ensure that whenever the web application class loader
        checks to see if it should delegate first, it also checks the result
        of the <code>filter()</code> method which may indicate that it should
        always delegate first for the current class/resource regardless of the
        value of the delegate configuration option. (markt)
      </fix>
      <fix>
        <bug>58023</bug>: Fix potentially excessive memory usage due to
        unnecessary caching of JAR manifests in the web application class
        loader. (markt)
      </fix>
      <fix>
        <bug>57700</bug>: Ensure that Container event
        <code>ADD_CHILD_EVENT</code> will be sent in all cases. (violetagg)
      </fix>
      <fix>
        <bug>58086</bug>: Ensure that WAR URLs are handled properly when using
        ANT for web application deployment. Based on a patch provided by Lukasz
        Jader. (violetagg)
      </fix>
      <fix>
        Fix CredentialHandler element handling in storeconfig. (remm)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Coyote">
    <changelog>
      <fix>
        <bug>57265</bug>: Further fix to address a potential threading issue
        when sendfile is used in conjunction with TLS. (markt)
      </fix>
      <fix>
        <bug>57936</bug>: Improve robustness of the acceptor thread count
        parameter for NIO2, since it must be set to 1. Submitted by
        Oliver Kant. (remm)
      </fix>
      <add>
        <bug>57943</bug>: Added a work-around to catch
        <code>ConcurrentModificationException</code>s during Poller timeout
        processing that were causing the Poller thread to stop. The root cause
        of these exceptions is currently unknown. (markt)
      </add>
      <fix>
        <bug>57944</bug>: Ensure that if non-blocking I/O listeners are set on
        a non-container thread that the expected listener events are still
        triggered. (markt)
      </fix>
      <fix>
        Fix possible very long (1000 seconds) timeout with APR/native connector.
        (markt)
      </fix>
      <add>
        Support "-" separator in the SSLProtocol configuration of the
        APR/native connector for protocol exclusion. (rjung)
      </add>
      <fix>
        <bug>58004</bug>: Fix AJP buffering output data even in blocking mode.
        (remm)
      </fix>
    </changelog>
  </subsection>
  <subsection name="WebSocket">
    <changelog>
      <fix>
        <bug>57969</bug>: Provide path parameters to POJO via per session
        <code>javax.websocket.server.ServerEndpointConfig</code> as they vary
        between different requests. (violetagg)
      </fix>
      <fix>
        <bug>57974</bug>: Session.getOpenSessions should return all sessions
        associated with a given endpoint instance, rather than all sessions
        from the endpoint class. (remm)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Web applications">
    <changelog>
      <fix>
        <bug>57282</bug>: Update request processing sequence diagrams. Updated
        diagrams provided by Stephen Chen. (markt)
      </fix>
      <fix>
        <bug>57971</bug>: Correct the documentation for the cluster
        configuration setting <code>recoverySleepTime</code>. (markt)
      </fix>
      <add>
        <bug>57758</bug>: Add document of <code>testOnConnect</code> attribute
        in jdbc-pool doc. (kfujino)
      </add>
      <add>
        Add description of <code>validatorClassName</code> attribute to testXXXX
        attributes in jdbc-pool docs. (kfujino)
      </add>
    </changelog>
  </subsection>
  <subsection name="Tribes">
    <changelog>
      <scode>
        Use <code>StringManager</code> to provide i18n support in the
        <code>org.apache.catalina.tribes</code> packages. (kfujino)
      </scode>
      <fix>
        Do not set the nodes that failed to replication to the backup nodes.
        Ensure that the nodes that the data has been successfully replicated are
        set to the backup node. (kfujino)
      </fix>
      <fix>
        When failed to replication, rather than all member is handled as a
        failed member, exclude the failure members from backup members.
        (kfujino)
      </fix>
    </changelog>
  </subsection>
  <subsection name="jdbc-pool">
    <changelog>
      <fix>
        Refactoring of the <code>removeOldest</code> method in
        <code>SlowQueryReport</code> to behave as expected. (kfujino)
      </fix>
      <fix>
        <bug>57783</bug>: Fix <code>NullPointerException</code> in
        <code>SlowQueryReport</code>. To avoid this NPE, Refactor
        <code>SlowQueryReport#removeOldest</code> and handle the abandoned
        connection properly. (kfujino)
      </fix>
      <fix>
        <bug>58042</bug>: In <code>SlowQueryReportJmx</code>, the
        <code>LogSlow</code> and <code>logFailed</code> attributes that
        inherited from <code>SlowQueryReport</code> are used as a condition of
        whether JMX notifications are sent. (kfujino)
      </fix>
      <fix>
        Ensure that specified <code>Boolean</code> attribute values of
        <code>SlowQueryReport</code> reflect correctly. The <code>LogSlow</code>
        and the <code>logFailed</code> are not system property, these are
        attributes of <code>SlowQueryReport</code>. (kfujino)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Other">
    <changelog>
      <update>
        Update package renamed Apache Commons BCEL to r1682271 to pick up some
        some code clean up. (markt)
      </update>
      <update>
        Update package renamed Apache Commons DBCP to r1682314 to pick up the
        DBCP 2.1 release and additional fixes since then. (markt)
      </update>
      <update>
        Update package renamed Apache Commons Pool to the 2.4 release. (markt)
      </update>
      <update>
        Update package renamed Apache Commons File upload to r1682322 to pick up
        the post 1.3.1 fixes. (markt)
      </update>
      <update>
        Update package renamed Apache Commons Codec to r1682326. No functional
        changes. Javadoc only. (markt)
      </update>
      <update>
        Update optional Checkstyle library to 6.7. (kkolinko)
      </update>
    </changelog>
  </subsection>
</section>
<section name="Tomcat 8.0.23 (markt)" rtext="2015-05-22">
  <subsection name="Catalina">
    <changelog>
      <add>
        <bug>54618</bug>: Add a new <code>HttpHeaderSecurityFilter</code> that
        adds the <code>Strict-Transport-Security</code>,
        <code>X-Frame-Options</code> and <code>X-Content-Type-Options</code>
        HTTP headers to the response. (markt)
      </add>
      <fix>
        <bug>57875</bug>: Add <code>javax.websocket.*</code> to the classes for
        which the web application class loader always delegates first. (markt)
      </fix>
      <fix>
        <bug>57871</bug>: Ensure that setting the
        <code>allowHttpSepsInV0</code> property of a
        <code>LegacyCookieProcessor</code> to false only prevents HTTP
        separators from being used without quotes. (markt)
      </fix>
      <fix>
        Add a workaround for issues with SPNEGO authentication when running on
        Java 8 update 40 and later. The workaround should be safe for earlier
        Java versions but it can be disabled with the
        <code>applyJava8u40Fix</code> attribute of the SPNEGO authenticator if
        necessary. (markt)
      </fix>
      <fix>
        <bug>57926</bug>: Restore the original <code>X-Forwarded-By</code> and
        <code>X-Forwarded-For</code> headers after processing by the
        <code>RemoteIPValve </code>. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Coyote">
    <changelog>
      <fix>
        Follow up to previous fix that removed the behavior difference between
        NIO and NIO2 for SSL, which caused corruption with NIO2.
        (remm)
      </fix>
      <fix>
        <bug>57931</bug>: Ensure that TLS connections with the NIO or NIO2 HTTP
        connectors that experience issues during the handshake (e.g. missing or
        invalid client certificate) are closed cleanly and that the client
        receives the correct error code rather than simply closing the
        connection. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Jasper">
    <changelog>
      <fix>
        <bug>56438</bug>: Add debug logging to TLD discovery that logs positive
        and negative results for JARs, resource paths and directories. Patch
        provided by VIN. (markt)
      </fix>
      <fix>
        <bug>57802</bug>: Correct the default implementation of
        <code>convertToType()</code> provided by
        <code>javax.el.ELResolver</code>. (markt)
      </fix>
      <fix>
        <bug>57887</bug>: Fix compilation of recursive tag files packaged in a
        JAR. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Cluster">
    <changelog>
      <fix>
        Make sure that stream is closed after using it in
        <code>DeltaSession.applyDiff()</code>. (kfujino)
      </fix>
      <scode>
        Use <code>StringManager</code> to provide i18n support in the
        <code>org.apache.catalina.ha packages</code>. (kfujino)
      </scode>
      <scode>
        Add the context name to log messages when replication context failed to
        start. (kfujino)
      </scode>
    </changelog>
  </subsection>
  <subsection name="Web applications">
    <changelog>
      <fix>
        <bug>57875</bug>: Update the web application class loader documentation
        to reflect the more relaxed approach to SRV.10.7.2 in Tomcat 8 onwards.
        (markt)
      </fix>
      <fix>
        <bug>57896</bug>: Document system property
        <code>org.apache.tomcat.util.http.ServerCookie.PRESERVE_COOKIE_HEADER</code>
        that was introduced in Tomcat 8.0.0. (kkolinko)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Tribes">
    <changelog>
      <fix>
        Ensure that the state transfer flag is updated to true only when the map
        states have been transferred correctly from existing map members.
        (kfujino)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Other">
    <changelog>
      <update>
        Update optional Checkstyle library to 6.6. (kkolinko)
      </update>
    </changelog>
  </subsection>
</section>
<section name="Tomcat 8.0.22 (markt)" rtext="2015-05-05">
  <subsection name="Catalina">
    <changelog>
      <fix>
        <bug>57736</bug>: Change the format of the Tomcat specific URLs for
        resources inside JARs that are in turn packed in a WAR. The
        <code>^/</code> sequence has been replaced by <code>*/</code> so that
        the resulting URLs are compliant with RFC 2396 and do not trigger
        exceptions when converted to URIs. The old format will continue to be
        accepted. (markt)
      </fix>
      <fix>
        <bug>57752</bug>: Exclude non-cached resources from the Cache statistics
        for resource lookups. Patch provided by Adam Mlodzinski. (markt)
      </fix>
      <add>
        Allow logging of the remote port in the access log using the format
        pattern <code>%{remote}p</code>. (rjung)
      </add>
      <fix>
        <bug>57556</bug>: Refine the previous fix for this issue so that the
        real path returned only has a trailing separator if the requested path
        ended with <code>/</code>. (markt)
      </fix>
      <fix>
        <bug>57765</bug>: When checking last modified times as part of the
        automatic deployment process, account for the fact that
        <code>File.lastModified()</code> has a resolution of one second to
        ensure that if a file has been modified within the last second, the
        latest version of the file is always used. Note that a side-effect of
        this change is that files with modification times in the future are
        treated as if they are unmodified. (markt)
      </fix>
      <fix>
        Align redeploy resource modification checking with reload modification
        checking so that now, in both cases, a change in modification time
        rather than an increase in modification time is used to determine if the
        resource has changed. (markt)
      </fix>
      <fix>
        Cleanup <code>o.a.tomcat.util.digester.Digester</code> from debug
        messages that do not give any valuable information. Patch provided
        by Polina Genova. (violetagg)
      </fix>
      <fix>
        <bug>57772</bug>: When reloading a web application and a directory
        representing an expanded WAR needs to be deleted, delete the directory
        after the web application has been stopped rather than before to avoid
        potential ClassNotFoundExceptions. (markt)
      </fix>
      <fix>
        Fix wrong logger name of
        <code>org.apache.catalina.webresources.StandardRoot</code>. (kfujino)
      </fix>
      <fix>
        <bug>57801</bug>: Improve the error message in the start script in case
        the PID read from the PID file is already owned by a process. (rjung)
      </fix>
      <fix>
        <bug>57841</bug>: Improve error logging during web application start.
        (markt)
      </fix>
      <fix>
        <bug>57856</bug>: Ensure that any scheme/port changes implemented by the
        <code>RemoteIpFilter</code> also affect
        <code>HttpServletResponse.sendRedirect()</code>. (markt)
      </fix>
      <fix>
        <bug>57863</bug>: Fix the RewriteMap support in RewriteValve that did
        not use the correct key value to look up entries. Based on a patch
        provided by Tatsuya Bessho. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Coyote">
    <changelog>
      <fix>
        <bug>57779</bug>: When an I/O error occurs on a non-container thread
        only dispatch to a container thread to handle the error if using Servlet
        3+ asynchronous processing. This avoids potential deadlocks if an
        application is performing I/O on a non-container thread without using
        the Servlet 3+ asynchronous API. (markt)
      </fix>
      <scode>
        Remove the experimental support for SPDY. No current user agent supports
        the version of SPDY that the experiment targeted. Note: HTTP/2 support
        is under development for Tomcat 9 and may be back-ported to Tomcat 8
        once complete. (markt)
      </scode>
      <fix>
        Possible incomplete writes with SSL NIO2. (remm)
      </fix>
      <fix>
        Incorrect reads with SSL NIO2 caused by a bad strategy for handling IO
        differences between NIO and NIO2 that don't seem to be justified.
        (remm)
      </fix>
      <fix>
        After some errors, the pending flags could remain set when using SSL
        NIO2. (remm)
      </fix>
      <fix>
        <bug>57833</bug>: When using JKS based keystores for NIO or NIO2, ensure
        that the key alias is always converted to lower case since that is what
        JKS key stores expect. Based on a patch by  Santosh Giri Govind M.
        (markt)
      </fix>
      <fix>
        <bug>57837</bug>: Add <code>text/css</code> to the default list of
        compressable MIME types. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Jasper">
    <changelog>
      <fix>
        <bug>57845</bug>: Ensure that, if the same JSP is accessed directly and
        via a <code>&lt;jsp-file&gt;</code> declaration in web.xml, updates to
        the JSP are visible (subject to the normal rules on re-compilation)
        regardless of how the JSP is accessed. (markt)
      </fix>
      <fix>
        <bug>57855</bug>: Explicitly handle the case where a
        <code>MethodExpression</code> is invoked with null or the wrong number
        of parameters. Rather than failing with an
        <code>ArrayIndexOutOfBoundsException</code> or a
        <code>NullPointerException</code> throw an
        <code>IllegalArgumentException</code> with a useful error message.
        (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Cluster">
    <changelog>
      <fix>
        Avoid unnecessary call of <code>DeltaRequest.addSessionListener()</code>
        in non-primary nodes. (kfujino)
      </fix>
      <add>
        Add new attribute that send all actions for session across Tomcat
        cluster nodes. (kfujino)
      </add>
      <fix>
        Remove unused <code>pathname</code> attribute in mbean definition of
        <code>BackupManager</code>. (kfujino)
      </fix>
    </changelog>
  </subsection>
  <subsection name="WebSocket">
    <changelog>
      <fix>
        <bug>57761</bug>: Ensure that the opening HTTP request is correctly
        formatted when the WebSocket client connects to a server root. (remm)
      </fix>
      <fix>
        <bug>57762</bug>: Ensure that the WebSocket client correctly detects
        when the connection to the server is dropped. (markt)
      </fix>
      <fix>
        <bug>57776</bug>: Revert the 8.0.21 fix for the
        <code>permessage-deflate</code> implementation and incorrect op-codes
        since the fix was unnecessary (the bug only affected trunk) and the fix
        broke rather than fixed <code>permessage-deflate</code> if an
        uncompressed message was converted into more than one compressed
        message. (markt)
      </fix>
      <fix>
        Fix log name typo in <code>WsRemoteEndpointImplServer</code> class,
        caused by a copy-paste. (markt/kkolinko)
      </fix>
      <fix>
        <bug>57788</bug>: Avoid NPE when looking up a class hierarchy without
        finding anything. (remm)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Web applications">
    <changelog>
      <add>
        <bug>57759</bug>: Add information to the keyAlias documentation to make
        it clear that the order keys are read from the keystore is
        implementation dependent. (markt)
      </add>
      <fix>
        <bug>57864</bug>: Update the documentation web application to make it
        clearer that hex values are not valid for cluster send options. Based on
        a patch by Kyohei Nakamura. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Tribes">
    <changelog>
      <fix>
        Fix a concurrency issue when a backup message that has all session data
        and a backup message that has diff data are processing at the same time.
        This fix ensures that <code>MapOwner</code> is set to
        <code>ReplicatedMapEntry</code>. (kfujino)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Other">
    <changelog>
      <fix>
        Add missing pom for tomcat-storeconfig. (remm)
      </fix>
      <update>
        Update optional Checkstyle library to 6.5. (kkolinko)
      </update>
      <fix>
        <bug>57707</bug>: Improve error message when trying to run a release
        build on a non-Windows platform and Wine is not available. (markt)
      </fix>
    </changelog>
  </subsection>
</section>
<section name="Tomcat 8.0.21 (markt)" rtext="2015-03-26">
  <subsection name="Catalina">
    <changelog>
      <add>
        <bug>49785</bug>: Enable StartTLS connections for JNDIRealm.
        (fschumacher)
      </add>
      <fix>
        When docBase refers internal war and unpackWARs is set to false, avoid
        registration of the invalid redeploy resource that has been added ".war"
        extension in duplicate. (kfujino)
      </fix>
      <fix>
        If WAR exists, it is not necessary to trigger a reload when adding a
        Directory. (kfujino)
      </fix>
      <fix>
        <bug>55988</bug>: Add support for Java 8 JSSE server-preferred TLS
        cipher suite ordering. This feature requires Java 8
        and is controlled by <code>useServerCipherSuitesOrder</code>
        attribute on an HTTP connector.
        Based upon a patch provided by Ognjen Blagojevic. (schultz)
      </fix>
      <fix>
        <bug>56608</bug>: When deploying an external WAR, add watched resources
        in the expanded directory based on whether the expanded directory is
        expected to exist rather than if it does exist. (markt)
      </fix>
      <fix>
         When triggering a reload due to a modified watched resource, ensure
         that multiple changed watched resources only trigger one reload rather
         than a series of reloads. (markt)
      </fix>
      <fix>
        <bug>57601</bug>: Ensure that HEAD requests return the correct content
        length (i.e. the same as for a GET) when the requested resource includes
        a resource served by the Default servlet. (jboynes/markt)
      </fix>
      <fix>
        <bug>57602</bug>: Ensure that HEAD requests return the correct content
        length (i.e. the same as for a GET) when the requested resource includes
        a resource served by a servlet that extends <code>HttpServlet</code>.
        (markt)
      </fix>
      <fix>
        <bug>57621</bug>: When an async request completes, ensure that any
        remaining request body data is swallowed. (markt)
      </fix>
      <fix>
        <bug>57637</bug>: Do not create unnecessary sessions when using
        PersistentValve. (jboynes/fschumacher)
      </fix>
      <fix>
        <bug>57645</bug>: Correct a regression in the fix for
        <bug>57190</bug> that incorrectly required the path passed to
        <code>ServletContext.getContext(String)</code> to be an exact match to a
        path to an existing context. (markt)
      </fix>
      <fix>
        Make sure that <code>unpackWAR</code> attribute of <code>Context</code>
        is handled correctly in <code>HostConfig</code>. (kfujino)
      </fix>
      <fix>
        When deploying a WAR file that contains a context.xml file and
        <code>unpackWARs</code> is <code>false</code> ignore any context.xml
        file that may exist in an expanded directory associated with the WAR.
        (markt)
      </fix>
      <fix>
        <bug>57675</bug>: Correctly quote strings when using the extended
        access log. (markt)
      </fix>
      <add>
        Enable Tomcat to detect when a WAR file has been changed while Tomcat is
        not running. Tomcat does this by adding a META-INF/war-tracking file to
        the expanded directory and setting the last modified time of this file
        to the last modified time of the WAR. If Tomcat detects a modified WAR
        via this mechanism the web application will be redeployed (i.e. the
        expanded directory will be removed and the modified WAR expanded in its
        place). (markt)
      </add>
      <fix>
        <bug>57704</bug>: Fix potential NPEs during web application start/stop
        when <code>org.apache.tomcat.InstanceManager</code> is not initialized.
        (violetagg)
      </fix>
      <add>
        Use the simplified digest output for digest.bat|sh when generating
        digests with no salt and a single iteration to make it easier to use
        with DIGEST authentication. (markt)
      </add>
      <fix>
        Add support for <code>LAST_ACCESS_AT_START</code> system property to
        <code>SingleSignOn</code>. (kfujino)
      </fix>
      <scode>
        Refactor Authenticator implementations to reduce code duplication.
        (markt)
      </scode>
      <fix>
        <bug>57724</bug>: Handle the case in the CORS filter where a user agent
        includes an origin header for a non-CORS request. (markt)
      </fix>
      <fix>
        When searching for SCIs
        <code>o.a.catalina.Context.getParentClassLoader</code> will be used
        instead of <code>java.lang.ClassLoader.getParent</code>. Thus one can
        provide the correct parent class loader when running embedded Tomcat in
        other environments such as OSGi. (violetagg)
      </fix>
      <fix>
        <bug>57743</bug>: Fix a locked file / resource leak issue when a JAR is
        accessed just before or during web application undeploy. Patch provided
        by  Pavel Avgustinov. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Coyote">
    <changelog>
      <add>
        <bug>57540</bug>: Make TLS/SSL protocol available in a new request
        attribute
        (<code>org.apache.tomcat.util.net.secure_protocol_version</code>).
        (Note that AJP connectors will require <tt>mod_jk</tt> 1.2.41 or later,
        or an as-yet-unknown version of mod_proxy_ajp, or configure the proxy
        to send the AJP_SSL_PROTOCOL request attribute to Tomcat. Please see
        the bug comments for details.)
        Based upon a patch provided by Ralf Hauser. (schultz)
      </add>
      <fix>
        Fix a cipher ordering issue when using the OpenSSL syntax for JSSE
        cipher configuration to ensure that ephemeral ECDH with AES is preferred
        to ephemeral ECDH with anything else. (markt)
      </fix>
      <fix>
        <bug>57570</bug>: Make the processing of trailer headers with chunked
        input optional and disabled by default. (markt)
      </fix>
      <fix>
        <bug>57592</bug>: Correctly handle the case where an
        <code>AsyncContext</code> is used for non-blocking I/O and is completed
        during a write operation. (markt)
      </fix>
      <fix>
        <bug>57638</bug>: Avoid an IllegalArgumentException when an AJP request
        body chunk larger than the socket read buffer is being read. This
        typically requires a larger than default AJP packetSize. (markt)
      </fix>
      <fix>
        <bug>57674</bug>: Avoid a BufferOverflowException when an AJP response
        body chunk larger than the socket write buffer is being written. This
        typically requires a larger than default AJP packetSize. (markt)
      </fix>
      <update>
        Align the OpenSSL syntax cipher configuration with the OpenSSL 1.0.2
        branch. (markt)
      </update>
      <fix>
        Numerous fixes to the APR/native connector to improve robustness.
        (markt)
      </fix>
      <fix>
        Stop caching and re-using SocketWrapper instances. With the introduction
        of upgrade and non-blocking I/O, I/O can occur on non-container threads.
        This makes it nearly impossible to track whether a SocketWrapper is
        still being referenced or not, making re-use a risky proposition.
        (markt)
      </fix>
      <scode>
        Refactor Connector authentication (only used by AJP) into a separate
        method. (markt)
      </scode>
      <add>
        <bug>57708</bug>: Implement a new feature for AJP connectors - Tomcat
        Authorization. If the new tomcatAuthorization attribute is set to
        <code>true</code> (it is disabled by default) Tomcat will take an
        authenticated user name from the AJP protocol and use the appropriate
        Realm for the request to authorize (i.e. add roles) to that user.
        (markt)
      </add>
      <fix>
        Fix an issue that meant that any pipe-lined data read by Tomcat before
        an asynchronous request completed was lost during the completion of the
        asynchronous request. This mean that the pipe-lined request(s) would be
        lost and/or corrupted. (markt)
      </fix>
      <update>
        Update the minimum recommended version of the Tomcat Native library (if
        used) to 1.1.33. (markt)
      </update>
    </changelog>
  </subsection>
  <subsection name="Jasper">
    <changelog>
      <fix>
        <bug>57135</bug>: Package imports via
        <code>javax.el.ImportHandler</code> should only import public, concrete
        classes. (markt)
      </fix>
      <fix>
        <bug>57583</bug>: Cache &apos;Not Found&apos; results in
        <code>javax.el.ImportHandler.resolveClass()</code> to save repeated
        attempts to load classes that are known not to exist to improve
        performance. (markt)
      </fix>
      <fix>
        <bug>57626</bug>: Correct a regression introduced in the 8.0.16 fix for
        ensuring Jars were closed after use, that broke recompilation of
        modified JSPs that depended on a tag file packaged in a Jar. (markt)
      </fix>
      <fix>
        <bug>57627</bug>: Correctly determine last modified times for
        dependencies when a tag file packaged in a JAR depends on a tag file
        packaged in a second JAR. (markt)
      </fix>
      <fix>
        <bug>57647</bug>: Ensure INFO message is logged when scanning jars for
        TLDs if the scan does not find a TLD in any jar. Previously a message
        would only be logged if a TLD was not found in all scanned jars. (jboynes)
      </fix>
      <update>
        <bug>57662</bug>: Update all references to the ECJ compiler to version
        4.4.2. (violetagg)
      </update>
    </changelog>
  </subsection>
  <subsection name="Cluster">
    <changelog>
      <fix>
        Remove unnecessary method that always returns true. The domain filtering
        works on <code>DomainFilterInterceptor</code>. (kfujino)
      </fix>
    </changelog>
  </subsection>
  <subsection name="WebSocket">
    <changelog>
      <fix>
        Correct a bug in the <code>permessage-deflate</code> implementation that
        meant that the incorrect op-codes were used if an uncompressed message
        was converted into more than one compressed message. (markt)
      </fix>
      <add>
        <bug>57676</bug>: List conflicting WebSocket endpoint classes when
        there is a path conflict. Based upon a patch proposed by yangkun.
        (schultz)
      </add>
    </changelog>
  </subsection>
  <subsection name="Web applications">
    <changelog>
      <fix>
        <bug>56058</bug>: Add links to the AccessLogValve documentation for
        configuring reverse proxies and/or Tomcat to ensure that the desired
        information is used entered in the access log when Tomcat is running
        behind a reverse proxy. (markt)
      </fix>
      <fix>
        <bug>57587</bug>: Update the JNDI Datasource HOWTO for DBCP2. Patch
        provided by Phil Steitz. (markt)
      </fix>
      <fix>
        Remove incorrect note from context configuration page in the
        documentation web application that stated WAR files located outside the
        appBase were never unpacked. (markt)
      </fix>
      <update>
        <bug>57644</bug>: Update examples to use Apache Standard Taglib 1.2.5.
        (jboynes)
      </update>
      <fix>
        <bug>57683</bug>: Ensure that if a client aborts their connection to the
        stock ticker example (the only way a client can disconnect), the example
        continues to work for existing and new clients. (markt)
      </fix>
      <fix>
        Make it clear that when using digested passwords with DIGEST
        authentication that no salt and only a single iteration must be used
        when generating the digest. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Extras">
    <changelog>
      <fix>
        <bug>57377</bug>: Remove the restriction that prevented the use of SSL
        when specifying a bind address with the JMXRemoteLifecycleListener. Also
        enable SSL to be configured for the registry as well as the server.
        (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Tribes">
    <changelog>
      <fix>
        When a map member has been added to <code>ReplicatedMap</code>, make
        sure to add it to backup nodes list of all other members. (kfujino)
      </fix>
      <fix>
        Make sure that refuse the messages from a different domain in
        <code>DomainFilterInterceptor</code>. (kfujino)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Other">
    <changelog>
      <update>
        Update optional Checkstyle library to 6.4.1. (kkolinko)
      </update>
      <fix>
        <bug>57703</bug>: Update the <code>http-method</code> definition for
        web applications using a Servlet 2.5 descriptor as per Servlet 2.5 MR 6.
        (markt)
      </fix>
      <update>
        Update to Tomcat Native Library version 1.1.33 to pick up the Windows
        binaries that are based on OpenSSL 1.0.1m and APR 1.5.1. (markt)
      </update>
    </changelog>
  </subsection>
</section>
<section name="Tomcat 8.0.20 (markt)" rtext="2015-02-20">
  <subsection name="Coyote">
    <changelog>
      <fix>
        Fix a concurrency issue that meant that a change in socket timeout (e.g.
        when switching to asynchronous I/O) did not always take effect
        immediately. (markt)
      </fix>
    </changelog>
  </subsection>
</section>
<section name="Tomcat 8.0.19 (markt)" rtext="not released">
  <subsection name="Catalina">
    <changelog>
      <fix>
        Clarify threaded usage of variables by removing volatile marker
        in NonceInfo. Issue reported by Coverity Scan. (fschumacher)
      </fix>
      <fix>
        <bug>57180</bug>: Further fixes to support the use of arbitrary HTTP
        methods with the CORS filter. (markt)
      </fix>
      <fix>
        <bug>57472</bug>: Fix performance regression in resources implementation
        when signed JARs are used in a web application. (markt)
      </fix>
      <add>
        Warn about problematic setting of appBase. (fschumacher)
      </add>
      <fix>
        Fix exception while authentication in JDBCRealm. (fschumacher)
      </fix>
      <fix>
       <bug>57534</bug>: CORS Filter should only look at media type component of
       Content-Type request header. (markt)
      </fix>
      <fix>
        <bug>57556</bug>: Align <code>getRealPath()</code> behaviour with that
        of earlier versions and include a trailing separator if the real path
        refers to a directory. (markt)
      </fix>
      <fix>
        Ensure that Servlet 3.0 async requests where <code>startAsync()</code>
        is called in one container thread and <code>dispatch()</code> is called
        in a different container thread complete correctly. (markt)
      </fix>
      <fix>
        Ensure that user name checking in the optional SecurityListener is
        case-insensitive (as documented) and than the case-insensitive
        comparison is performed using the system default Locale. (markt)
      </fix>
      <add>
        <bug>57021</bug>: Improve logging in AprLifecycleListener and
        jni.Library when Tomcat-Native DLL fails to load. Based on a patch by
        Pravallika Peddi. (markt/kkolinko)
      </add>
    </changelog>
  </subsection>
  <subsection name="Coyote">
    <changelog>
      <fix>
        Fix several bugs that could cause multiple registrations for write
        events for a single socket when using Servlet 3.0 async. Typically, the
        side effects of these multiple registrations would be exceptions
        appearing in the logs. (markt)
      </fix>
      <fix>
        <bug>57432</bug>: Align <code>SSL_OP_NO_TLSv1_1</code> and
        <code>SSL_OP_NO_TLSv1_2</code> constant values with OpenSSL (they had
        been swapped). (markt)
      </fix>
      <fix>
        <bug>57509</bug>: Improve length check when writing HTTP/1.1
        response headers: reserve space for 4 extra bytes. (kkolinko)
      </fix>
      <fix>
        <bug>57544</bug>: Fix potential infinite loop when preparing a kept
        alive HTTP connection for the next request. (markt)
      </fix>
      <fix>
        <bug>57546</bug>: Ensure that a dropped network connection does not
        leave references to the UpgradeProcessor associated with the connection
        in memory. (markt)
      </fix>
      <fix>
        When applying the <code>maxSwallowSize</code> limit to a connection read
        that many bytes first before closing the connection to give the client a
        chance to read the response. (markt)
      </fix>
      <fix>
        Prevent an async timeout being processed multiple times for the same
        socket when running on slow and/or heavily loaded systems. (markt)
      </fix>
      <fix>
        <bug>57581</bug>: Change statistics byte counter in coyote Request
        object to be long to allow values above 2Gb. (kkolinko)
      </fix>
      <update>
        Use the data that supports cipher definition using OpenSSL syntax to
        improve the quality of values provided for the
        <code>javax.servlet.request.key_size</code> request attribute. (markt)
      </update>
      <fix>
        Fix a concurrency issue in the APR Poller that meant it was possible
        under low load for a socket queued to be added to the Poller not to be
        added for 10 seconds. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Jasper">
    <changelog>
      <update>
        <bug>57123</bug>: Update all references to the ECJ compiler to version
        4.4.1. With thanks to Ralph Schaer for uploading the 4.4.1 JAR to Maven
        Central. (markt)
      </update>
      <add>
        <bug>57564</bug>:  Make JspC amenable to subclassing. Patch provided by
        Jan Bartel. (markt)
      </add>
      <fix>
        Simplify code in <code>ProtectedFunctionMapper</code> class of
        Jasper runtime. (kkolinko)
      </fix>
      <fix>
        <bug>57574</bug>: Do not check existence of a Java package in
        <code>javax.el.ImportHandler.importPackage()</code>. (kkolinko)
      </fix>
    </changelog>
  </subsection>
  <subsection name="WebSocket">
    <changelog>
      <fix>
        <bug>57490</bug>: Make it possible to use Tomcat&apos;s WebSocket client
        within a web application when running under a SecurityManager. Based on
        a patch by Mikael Sterner. (markt)
      </fix>
      <add>
        Add some debug logging to the WebSocket session to track session
        creation and session closure. (markt)
      </add>
    </changelog>
  </subsection>
  <subsection name="Web applications">
    <changelog>
      <update>
        Clarify documentation for <code>useBodyEncodingForURI</code>
        attribute of a connector. (kkolinko)
      </update>
      <fix>
        Fix possible resource leaks by closing streams properly. Issues
        reported by Coverity Scan. (fschumacher)
      </fix>
      <fix>
        <bug>57503</bug>: Make clear that the JULI integration for log4j only
        works with log4j 1.2.x. (markt)
      </fix>
      <fix>
        <bug>57496</bug>: Remove hard-coded URL in JSP SVG example. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Tribes">
    <changelog>
      <fix>
        Fix a possible deadlock when receiver thread invokes
        <code>mapMemberAdded()</code> while ping thread invokes
        <code>memberAlive()</code>. (kfujino)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Other">
    <changelog>
      <add>
        Enhance bean factory used for JNDI resources. New attribute
        <code>forceString</code> allows to support non-standard
        string argument property setters. (rjung)
      </add>
      <fix>
        Assign newly created stream to field instead of leaking it uselessly.
        Issue reported by Coverity Scan. (fschumacher)
      </fix>
      <update>
        Update optional Checkstyle library to 6.3. (kkolinko)
      </update>
      <fix>
        Guard the digester from MbeansDescriptorsDigesterSource with its own
        lock object. (fschumacher)
      </fix>
      <fix>
        Refactor the unit tests and add some new test properties to make it
        easier to exclude performance tests and relax timing tests. This is
        primarily for the ASF CI system where these tests frequently fail.
        (markt)
      </fix>
      <fix>
        <bug>57558</bug>: Add missing JAR in Ant task definition required by
        the validate task. (markt)
      </fix>
      <add>
        List names of Testsuites that have failed or skipped tests when
        running the tests with Ant. (kkolinko)
      </add>
    </changelog>
  </subsection>
</section>
<section name="Tomcat 8.0.18 (markt)" rtext="2015-01-26">
  <subsection name="Catalina">
    <changelog>
      <fix>
        <bug>57178</bug>: The CORS filter now treats <code>null</code> as a
        valid origin that matches <code>*</code>. Patch provided by Gregor
        Zurowski. (markt)
      </fix>
      <fix>
        <bug>57425</bug>: Don't add attributes with null value or name to the
        replicated context. (fschumacher)
      </fix>
      <add>
        <bug>57431</bug>: Enable usage of custom class for context creation when
        using embedded tomcat. (fschumacher)
      </add>
      <fix>
        <bug>57446</bug>: Ensure that <code>ServletContextListener</code>s that
        have limited access to <code>ServletContext</code> methods are called
        with the same <code>ServletContext</code> instance for both
        <code>contextInitialized()</code> and <code>contextDestroyed()</code>.
        (markt)
      </fix>
      <fix>
        <bug>57455</bug>: Explicitly block the use of the double-quote character
        when configuring the common, server and shared class loaders since
        double-quote is used to quote values that contain commas. (markt)
      </fix>
      <fix>
        <bug>57461</bug>: When an instance of
        <code>org.apache.catalina.startup.VersionLoggerListener</code> logs the
        result of <code>System.getProperty("java.home")</code> don't report it
        in a manner that makes it look like the <code>JAVA_HOME</code>
        environment variable. (markt)
      </fix>
      <fix>
        <bug>57476</bug>: Ensure the responses written as part of a forward are
        fully written. This fixes a regression in 8.0.15 caused by the fix for
        <bug>57252</bug>. (markt)
      </fix>
      <fix>
        While closing streams for given resources ensure that if an exception
        happens it will be handled properly. Issue is reported by Coverity Scan.
        (violetagg)
      </fix>
      <fix>
        <bug>57481</bug>: Fix <code>IllegalStateException</code> at the end of
        the request when using non-blocking reads with the HTTP BIO connector.
        (markt)
      </fix>
      <fix>
        Change Response to use UEncoder instances with shared safeChars.
        (fschumacher)
      </fix>
      <fix>
        Ensure that when static resources are served from JARs, only static
        resources are served. (markt)
      </fix>
      <add>
        Allow <code>VersionLoggerListener</code> to log all system properties.
        This feature is off by default. (kkolinko)
      </add>
    </changelog>
  </subsection>
  <subsection name="Jasper">
    <changelog>
      <fix>
        Ensure that classes imported via the page directive are made available
        to the EL environment via the ImportHandler. Issue is reported by
        Coverity Scan. (violetagg)
      </fix>
      <fix>
        <bug>57441</bug>: Do not trigger an error when using functions defined
        by lambdas or imported via an ImportHandler in an EL expression in a
        JSP. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Cluster">
    <changelog>
      <fix>
        Fix mbean descriptor of <code>ClusterSingleSignOn</code>. (kfujino)
      </fix>
      <fix>
        <bug>57473</bug>: Add sanity check to FarmWebDeployer's WarWatcher to
        detect suspected incorrect permissions on the watch directory. (schultz)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Tribes">
    <changelog>
      <fix>
        Clarify the handling of Copy message and Copy nodes. (kfujino)
      </fix>
      <fix>
        Copy node does not need to send the entry data. It is enough to send
        only the node information of the entry. (kfujino)
      </fix>
      <fix>
        ReplicatedMap should send the Copy message when replicating. (kfujino)
      </fix>
      <fix>
        Fix behavior of ReplicatedMap when member has disappeared. If map entry
        is primary, rebuild the backup members. If primary node of map entry has
        disappeared, backup node is promoted to primary. (kfujino)
      </fix>
    </changelog>
  </subsection>
</section>
<section name="Tomcat 8.0.17 (markt)" rtext="2015-01-16">
  <subsection name="Catalina">
    <changelog>
      <fix>
        Correct a regression in the previous fix for <bug>57252</bug> that broke
        request listeners for non-async requests that triggered an error that
        was handled by the ErrorReportingValve. (markt/violetagg)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Coyote">
    <changelog>
      <fix>
        Add flushing to send ack in the NIO2 connector. (remm)
      </fix>
    </changelog>
  </subsection>
</section>
<section name="Tomcat 8.0.16 (markt)" rtext="not released">
  <subsection name="Catalina">
    <changelog>
      <fix>
        <bug>57172</bug>: Provide a better error message if something attempts to
        access a resource through a web application class loader that has been
        stopped. (markt/kkolinko)
      </fix>
      <fix>
        <bug>57173</bug>: Revert the fix for <bug>56953</bug> that broke
        annotation scanning in some cases. (markt)
      </fix>
      <fix>
        <bug>57180</bug>: Do not limit the CORS filter to only accepting
        requests that use an HTTP method defined in RFC 7231. (markt)
      </fix>
      <fix>
        <bug>57190</bug>: Fix <code>ServletContext.getContext(String)</code>
        when parallel deployment is used so that the correct ServletContext is
        returned. (markt)
      </fix>
      <fix>
        <bug>57208</bug>: Prevent NPE in JNDI Realm when no results are found
        in a directory context for a user with specified user name. Based on
        a patch provided by Jason McIntosh. (violetagg)
      </fix>
      <add>
        <bug>57209</bug>: Add a new attribute, userSearchAsUser to the JNDI
        Realm. (markt)
      </add>
      <fix>
        <bug>57215</bug>: Ensure that the result of calling
        <code>HttpServletRequest.getContextPath()</code> is neither decoded nor
        normalized as required by the Servlet specification. (markt)
      </fix>
      <fix>
        <bug>57216</bug>: Improve handling of invalid context paths. A context
        path should either be an empty string or start with a
        <code>&apos;/&apos;</code> and do not end with a
        <code>&apos;/&apos;</code>. Invalid context path are automatically
        corrected and a warning is logged. The <code>null</code> and
        <code>&quot;/&quot;</code> values are now correctly changed to
        <code>&quot;&quot;</code>. (markt/kkolinko)
      </fix>
      <fix>
        Update storeconfig with the CredentialHandler element. (remm)
      </fix>
      <fix>
        Correct message that is logged when load-on-startup servlet fails
        to load. It was logging a wrong name. (kkolinko)
      </fix>
      <fix>
        <bug>57239</bug>: Correct several message typos. Includes patch by
        vladk. (kkolinko)
      </fix>
      <fix>
        Fix closing of Jars during annotation scanning. (schultz/kkolinko)
      </fix>
      <fix>
        Fix a concurrency issue in async processing. Ensure that a non-container
        thread can not change the async state until the container thread has
        completed. (markt)
      </fix>
      <fix>
        <bug>57252</bug>: Provide application configured error pages with a
        chance to handle an async error before the built-in error reporting.
        (markt)
      </fix>
      <fix>
        <bug>57281</bug>: Enable non-public Filter and Servlet classes to be
        configured programmatically via the Servlet 3.0 API and then used
        without error when running under a SecurityManager. (markt)
      </fix>
      <fix>
        <bug>57308</bug>: Remove unnecessary calls to
        <code>System.getProperty()</code> where more suitable API calls are
        available. (markt)
      </fix>
      <add>
        Add unit tests for RemoteAddrValve and RemoteHostValve. (rjung)
      </add>
      <add>
        Allow to configure RemoteAddrValve and RemoteHostValve to
        adopt behavior depending on the connector port. Implemented
        by optionally adding the connector port to the string compared
        with the patterns <code>allow</code> and <code>deny</code>. Configured
        using <code>addConnectorPort</code> attribute on valve. (rjung)
      </add>
      <add>
        Optionally trigger authentication instead of denial in
        RemoteAddrValve and RemoteHostValve. This only works in
        combination with <code>preemptiveAuthentication</code>
        on the application context. Configured using
        <code>invalidAuthenticationWhenDeny</code> attribute on valve. (rjung)
      </add>
      <fix>
        Remove the obsolete <code>jndi</code> protocol usage from the scanning
        process performed by StandardJarScanner. (violetagg)
      </fix>
      <fix>
        Prevent file descriptors leak and ensure that files are closed after
        retrieving the last modification time. (violetagg)
      </fix>
      <update>
        Make <code>o.a.catalina.webresources.StandardRoot</code> easier for
        extending. (violetagg)
      </update>
      <fix>
        <bug>57326</bug>: Enable <code>AsyncListener</code> implementations to
        re-register themselves during <code>AsyncListener.onStartAsync</code>.
        (markt)
      </fix>
      <fix>
        <bug>57331</bug>: Allow ExpiresFilter to use "year" as synonym for
        "years" in its configuration. (kkolinko)
      </fix>
      <fix>
        Ensure that if the RewriteValve rewrites a request that subsequent calls
        to <code>HttpServletRequest.getRequestURI()</code> return the undecoded
        URI. (markt)
      </fix>
      <fix>
        Ensure that if the RewriteValve rewrites a request to a non-normalized
        URI that the URI is normalized before the URI is mapped to ensure that
        the correct mapping is applied. (markt)
      </fix>
      <fix>
        Prevent NPEs being logged during post-processing for requests that have
        been re-written by the RewriteValve. (markt)
      </fix>
      <fix>
        Various StoreConfig improvements including removing a dependency on the
        <code>StandardServer</code> implementation, improve consistency of
        behaviour when MBean is not registered and improve error messages when
        accessed via the Manager application. (markt)
      </fix>
      <update>
          Improve SnoopServlet in unit tests. (rjung)
      </update>
      <add>
          Add RequestDescriptor class to unit tests.
          Adjust TestRewriteValve to use RequestDescriptor. (rjung)
      </add>
      <update>
          Add more AJP unit tests. (rjung)
      </update>
      <fix>
        <bug>57363</bug>: Log to stderr if LogManager is unable to read
        configuration files rather than swallowing the exception silently.
        (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Coyote">
    <changelog>
      <fix>
        Allow HTTP upgrade process to complete without data corruption when
        additional content is sent along with the upgrade header. (remm)
      </fix>
      <fix>
        <bug>57187</bug>: Regression handling the special * URL. (remm)
      </fix>
      <fix>
        <bug>57234</bug>: Make SSL protocol filtering to remove insecure
        protocols case insensitive. (markt)
      </fix>
      <fix>
        <bug>57265</bug>: Fix some potential concurrency issues with sendFile
        and the NIO connector. (markt)
      </fix>
      <fix>
        <bug>57324</bug>: If the client uses <code>Expect: 100-continue</code>
        and Tomcat responds with a non-2xx response code, Tomcat also closes the
        connection. If Tomcat knows the connection is going to be closed when
        committing the response, Tomcat will now also send the
        <code>Connection: close</code> response header. (markt)
      </fix>
      <fix>
        <bug>57340</bug>: When using Comet, ensure that Socket and SocketWrapper
        are only returned to their respective caches once on socket close (it is
        possible for multiple threads to call close concurrently). (markt)
      </fix>
      <fix>
        <bug>57347</bug>: AJP response contains wrong status reason phrase
        (rjung)
      </fix>
      <add>
        <bug>57391</bug>: Allow TLS Session Tickets to be disabled when using
        the APR/native HTTP connector. Patch provided by Josiah Purtlebaugh.
        (markt)
      </add>
    </changelog>
  </subsection>
  <subsection name="Jasper">
    <changelog>
      <fix>
        <bug>57142</bug>: As per the clarification from the JSP specification
        maintenance lead, classes and packages imported via the page directive
        must be made available to the EL environment via the ImportHandler.
        (markt)
      </fix>
      <fix>
        <bug>57247</bug>: Correct the default Java source and target versions in
        the JspC usage message to <code>1.7</code> for Java 7. (markt)
      </fix>
      <fix>
        <bug>57309</bug>: Ensure that the current EL Resolver is given an
        opportunity to perform type coercion before applying the default EL
        coercion rules. (markt)
      </fix>
      <fix>
        Improve the calculation of the resource's last-modified, performed by
        JspCompilationContext, in a way to support URLs with protocol different
        than <code>jar:file</code>. (violetagg)
      </fix>
      <fix>
        Fix potential issue with BeanELResolver when running under a security
        manager. Some classes may not be accessible but may have accessible
        interfaces. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Cluster">
    <changelog>
      <fix>
        In order to enable define in <code>Cluster</code> element,
        <code>ClusterSingleSignOn</code> implements <code>ClusterValve</code>.
        (kfujino)
      </fix>
      <fix>
        <bug>57338</bug>: Improve the ability of the
        <code>ClusterSingleSignOn</code> valve to handle nodes being added and
        removed from the Cluster at run time. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="WebSocket">
    <changelog>
      <fix>
        Correct multiple issues with the flushing of batched messages that could
        lead to duplicate and/or corrupt messages. (markt)
      </fix>
      <fix>
        Correctly implement headers case insensitivity. (markt/remm)
      </fix>
      <fix>
        Allow optional use of user extensions. (remm)
      </fix>
      <fix>
        Allow using partial binary message handlers. (remm)
      </fix>
      <fix>
        Limit ping/pong message size. (remm)
      </fix>
      <fix>
        Allow configuration of the time interval for the periodic event. (remm)
      </fix>
      <fix>
        More accurate annotations processing. (remm)
      </fix>
      <fix>
        Allow optional default for origin header in the client. (remm)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Web applications">
    <changelog>
      <fix>
        Update documentation for CGI servlet. Recommend to copy the servlet
        declaration into web application instead of enabling it globally.
        Correct documentation for cgiPathPrefix. (kkolinko)
      </fix>
      <update>
        Improve HTML version of build instructions and align with
        BUILDING.txt. (kkolinko)
      </update>
      <update>
        Improve Tomcat Manager documentation. Rearrange, add section on
        HTML GUI, document /expire command and Server Status page. (kkolinko)
      </update>
      <update>
        <bug>57238</bug>: Update information on SSL/TLS on Security and SSL
        documentation pages. Patch by Glen Peterson. (kkolinko)
      </update>
      <fix>
        <bug>57245</bug>: Correct the reference to <code>allowLinking</code> in
        the security configuration guide since that attribute has moved from the
        Context element to the nested Resources element. (markt)
      </fix>
      <fix>
        Fix ambiguity of section links on Valves configuration reference page.
        (kkolinko)
      </fix>
      <fix>
        <bug>57261</bug>: Fix vminfo and threaddump Manager commands to start
        their output with an "OK" line. Document them. Based on a patch by
        Oleg Trokhov. (kkolinko)
      </fix>
      <fix>
        <bug>57267</bug>: Document the <code>StoreConfigLifecycleListener</code>
        and the <code>/save</code> command for the Manager application. (markt)
      </fix>
      <fix>
        <bug>57323</bug>: Correct display of outdated sessions in sessions
        count listing in Manager application. (kkolinko)
      </fix>
      <add>
        Add document of <code>ClusterSingleSignOn</code>. (kfujino)
      </add>
    </changelog>
  </subsection>
  <subsection name="Other">
    <changelog>
      <update>
        When downloading required libraries at build time, use random name
        for temporary file and automatically create destination directory
        (<code>base.path</code>). (kkolinko)
      </update>
      <update>
        Update optional Checkstyle library to 6.2. (kkolinko)
      </update>
      <update>
        Simplify <code>setproxy</code> task in <code>build.xml</code>.
        Taskdef there is not needed since Ant 1.8.2. (kkolinko)
      </update>
      <fix>
        Update "ide-eclipse" target in <code>build.xml</code> to create Eclipse
        project that uses Java 7 compliance settings instead of workspace-wide
        defaults. (kkolinko)
      </fix>
     <fix>
        Update the package renamed copy of Apache Commons Pool 2 to the 2.3
        release to pick up various fixes since the 2.2 release including one for
        a possible infinite loop. (markt)
      </fix>
      <fix>
        <bug>57285</bug>: Restore the manifest entry that marks the Windows
        uninstaller application as requiring elevated privileges. (markt)
      </fix>
      <add>
        <bug>57344</bug>: Provide sha1 checksum files for Tomcat downloads.
        Correct filename patterns for apache-tomcat-*-embed.tar.gz archive
        to exclude an *.asc file. (kkolinko)
      </add>
    </changelog>
  </subsection>
</section>
<section name="Tomcat 8.0.15 (markt)" rtext="2014-11-07">
  <subsection name="Catalina">
    <changelog>
      <add>
        <bug>43548</bug>: Add an XML schema for the tomcat-users.xml file.
        (markt)
      </add>
      <add>
        <bug>43682</bug>: Add support for referring to the current context, host
        and service name in per Context logging.properties files by using the
        properties <code>${classloader.webappName}</code>,
        <code>${classloader.hostName}</code> and
        <code>${classloader.serviceName}</code>. (markt)
      </add>
      <add>
        <bug>47919</bug>: Extend the information logged when Tomcat starts to
        optionally log the values of command line arguments (enabled by
        default) and environment variables (disabled by default). Note that
        the values added to CATALINA_OPTS and JAVA_OPTS environment variables
        will be logged, as they are used to build up the command line. (markt)
      </add>
      <add>
        <bug>49939</bug>: Expose the method that clears the static resource
        cache for a web application via JMX. (markt)
      </add>
      <fix>
        <bug>55951</bug>: Allow cookies to use UTF-8 encoded values in HTTP
        headers. This requires the use of the RFC6265
        <strong>CookieProcessor</strong>. (markt)
      </fix>
      <fix>
        <bug>55984</bug>: Using the allow separators in version 0 cookies option
        with the legacy cookie processor should only apply to version 0 cookies.
        Version 1 cookies with values that contain separators should not be
        affected and should continue to be quoted. (markt)
      </fix>
      <add>
        <bug>56393</bug>: Add support for RFC6265 cookie parsing and generation.
        This is currently disabled by default and may be enabled via the
        <strong>CookieProcessor</strong> element of a <strong>Context</strong>.
        (markt)
      </add>
      <add>
        <bug>56394</bug>: Introduce new configuration element CookieProcessor in
        Context to allow context-specific configuration of cookie processing
        options. Attributes of Context element that were added in Tomcat 8.0.13
        to allow configuration of a new experimental RFC6265 based cookie parser
        (<code>useRfc6265</code> and <code>cookieEncoding</code>) are
        replaced by this new configuration element. (markt)
      </add>
      <fix>
        Improve the previous fix for <bug>56401</bug>. Avoid logging version
        information in the constructor since it then gets logged at undesirable
        times such as when using <code>StoreConfig</code>. (markt)
      </fix>
      <fix>
        <bug>56403</bug>: Add pluggable password derivation support to the
        Realms via the new <code>CredentialHandler</code> interface.
        (markt/schultz)
      </fix>
      <fix>
        <bug>57016</bug>: When using the <code>PersistentValve</code> do not
        remove sessions from the store when persisting them. (markt)
      </fix>
      <add>
        Deprecate the use of system properties to control cookie parsing and
        replace them with attributes on the new <code>CookieProcessor</code>
        that may be configured on a per context basis. (markt)
      </add>
      <fix>
        Correct an edge case and allow a cookie if the value starts with an
        equals character and the <code>CookieProcessor</code> is not configured
        to allow equals characters in cookie values but is configured to allow
        name only cookies. (markt)
      </fix>
      <fix>
        <bug>57022</bug>: Ensure SPNEGO authentication continues to work with
        the JNDI Realm using delegated credentials with recent Oracle JREs.
        (markt)
      </fix>
      <fix>
        <bug>57027</bug>: Add additional validation for stored credentials used
        by Realms when the credential is stored using hex encoding. (markt)
      </fix>
      <fix>
        <bug>57038</bug>: Add a <code>WebResource.getCodeBase()</code> method,
        implement for all <code>WebResource</code> implementations and then use
        it in the web application class loader to set the correct code base for
        resources loaded from JARs and WARs. (markt)
      </fix>
      <fix>
        Correct a couple of NPEs in the JNDI Realm that could be triggered with
        when not specifying a roleBase and enabling roleSearchAsUser. (markt)
      </fix>
      <fix>
        Correctly handle relative values for the docBase attribute of a Context.
        (markt)
      </fix>
      <fix>
        Ensure that log messages generated by the web application class loader
        correctly identify the associated Context when multiple versions of a
        Context with the same path are present. (markt)
      </fix>
      <fix>
        Remove the unnecessary registration of context.xml as a redeploy
        resource. The context.xml having an external docBase has already been
        registered as a redeploy resource at first. (kfujino)
      </fix>
      <fix>
        <bug>57089</bug>: Ensure that configuration of a session ID generator is
        not lost when a web application is reloaded. (markt)
      </fix>
      <fix>
        <bug>57105</bug>: When parsing web.xml do not limit the buffer element
        of the jsp-property-group element to integer values as the allowed
        values are <code>&lt;number&gt;kb</code> or <code>none</code>. (markt)
      </fix>
      <update>
        Update the minimum required version of the Tomcat Native library (if
        used) to 1.1.32. (markt)
      </update>
      <fix>
        Update storeconfig with newly introduced elements: SessionIdGenerator,
        CookieProcessor, JarScanner and JarScanFilter. (remm)
      </fix>
      <fix>
        Throw a <code>NullPointerException</code> if a null string is passed to
        the <code>write(String,int,int)</code> method of the
        <code>PrintWriter</code> obtained from the <code>ServletResponse</code>.
        (markt)
      </fix>
      <fix>
        Cookie rewrite flag abbreviation should be CO rather than C. (remm)
      </fix>
      <fix>
        <bug>57153</bug>: When the StandardJarScanner is configured to scan the
        full class path, ensure that class path entries added directly to the
        web application class loader are scanned. (markt)
      </fix>
      <fix>
        AsyncContext should remain usable until fireOnComplete is called. (remm)
      </fix>
      <fix>
        AsyncContext createListener should wrap any instantiation exception
        using a ServletException. (remm)
      </fix>
      <fix>
        <bug>57155</bug>: Allow a web application to be configured that does not
        have a docBase on the file system. This is primarily intended for use
        when embedding. (markt)
      </fix>
      <fix>
        Propagate header ordering from fileupload to the part implementation.
        (remm)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Coyote">
    <changelog>
      <add>
        <bug>53952</bug>: Add support for TLSv1.1 and TLSv1.2 for APR connector.
        Based upon a patch by Marcel &#352;ebek. This feature requires
        Tomcat Native library 1.1.32 or later. (schultz/jfclere)
      </add>
      <scode>
        Cache the <code>Encoder</code> instances used to convert Strings to byte
        arrays in the Connectors (e.g. when writing HTTP headers) to improve
        throughput. (markt)
      </scode>
      <add>
        Disable SSLv3 by default for JSSE based HTTPS connectors (BIO, NIO and
        NIO2). The change also ensures that SSLv2 is disabled for these
        connectors although SSLv2 should already be disabled by default by the
        JRE. (markt)
      </add>
      <add>
        Disable SSLv3 by default for the APR/native HTTPS connector. (markt)
      </add>
      <fix>
        Do not increase remaining counter at end of stream in
        IdentityInputFilter. (kkolinko)
      </fix>
      <fix>
        Trigger an error if an invalid attempt is made to use non-blocking IO.
        (markt)
      </fix>
      <fix>
        <bug>57157</bug>: Allow calls to
        <code>AsyncContext.start(Runnable)</code> during non-blocking IO reads
        and writes. (markt)
      </fix>
      <fix>
        Async state MUST_COMPLETE should still be started. (remm)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Jasper">
    <changelog>
      <fix>
        <bug>57099</bug>: Ensure that semi-colons are not permitted in JSP
        import page directives. (markt)
      </fix>
      <fix>
        <bug>57113</bug>: Fix broken package imports in Expression Language when
        more than one package was imported and the desired class was not in the
        last package imported. (markt)
      </fix>
      <fix>
        <bug>57132</bug>: Fix import conflicts reporting in Expression Language.
        (kkolinko)
      </fix>
      <fix>
        When coercing an object to a given type, only attempt coercion to an
        array if both the object type and the target type are an array type.
        (violetagg/markt)
      </fix>
      <fix>
        Improve handling of invalid input to
        <code>javax.el.ImportHandler.resolveClass()</code>. (markt)
      </fix>
      <fix>
        Allow the same class to be added to an instance of
        <code>javax.el.ImportHandler</code> more than once without triggering
        an error. The second and subsequent calls for the same class will be
        ignored. (markt)
      </fix>
      <fix>
        <bug>57136</bug>: Ensure only <code>\${</code> and <code>\#{</code> are
        treated as escapes for <code>${</code> and <code>#{</code> rather than
        <code>\$</code> and <code>\#</code> being treated as escapes for
        <code>$</code> and <code>#</code> when processing literal expressions in
        expression language. (markt)
      </fix>
      <fix>
        When coercing an object to an array type in Expression Language, handle
        the case where the source object is an array of primitives.
        (markt/kkolinko)
      </fix>
      <fix>
        Do not throw an exception on missing JSP file servlet initialization.
        (remm)
      </fix>
      <fix>
        <bug>57148</bug>: When coercing an object to a given type and a
        <code>PropertyEditor</code> has been registered for the type correctly
        coerce the empty string to <code>null</code> if the
        <code>PropertyEditor</code> throws an exception. (kkolinko/markt)
      </fix>
      <fix>
        <bug>57153</bug>: Correctly scan for TLDs located in directories that
        represent expanded JARs files that have been added to the web application
        class loader&apos;s class path. (markt)
      </fix>
      <fix>
        <bug>57141</bug>: Enable EL in JSPs to refer to static fields of
        imported classes including the standard <code>java.lang.*</code>
        imports. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Cluster">
    <changelog>
      <fix>
        Add support for the <code>SessionIdGenerator</code> to cluster manager
        template. (kfujino)
      </fix>
      <fix>
        Avoid possible integer overflows reported by Coverity Scan. (fschumacher)
      </fix>
    </changelog>
  </subsection>
  <subsection name="WebSocket">
    <changelog>
      <fix>
        <bug>57054</bug>: Correctly handle the case in the WebSocket client
        when the HTTP response to the upgrade request can not be read in a
        single pass; either because the buffer is too small or the server sent
        the response in multiple packets. (markt)
      </fix>
      <add>
        Extend support for the <code>permessage-deflate</code> extension to the
        client implementation. (markt)
      </add>
      <fix>
        Fix client subprotocol handling. (remm)
      </fix>
      <fix>
        Add null checks for arguments in remote endpoint. (remm/kkolinko)
      </fix>
      <fix>
        <bug>57091</bug>: Work around the behaviour of the Oracle JRE when
        creating new threads in an applet environment that breaks the WebSocket
        client implementation. Patch provided by Niklas Hallqvist. (markt)
      </fix>
      <fix>
        <bug>57118</bug>: Ensure that that an <code>EncodeException</code> is
        thrown by <code>RemoteEndpoint.Basic.sendObject(Object)</code> rather
        than an <code>IOException</code> when no suitable <code>Encoder</code>
        is configured for the given Object. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Web applications">
    <changelog>
      <fix>
        Correct a couple of broken links in the Javadoc. (markt)
      </fix>
      <fix>
        Correct documentation for <code>ServerCookie.ALLOW_NAME_ONLY</code>
        system property. (kkolinko)
      </fix>
      <fix>
        <bug>57049</bug>: Clarified that <code>jvmRoute</code> can be set in
        <code>&lt;Engine&gt;</code>'s <code>jvmRoute</code> or in a system
        property. (schultz)
      </fix>
      <fix>
        Correct version of Java WebSocket mentioned in documentation
        (s/1.0/1.1/). (markt/kkolinko)
      </fix>
      <update>
        Suppress timestamp comments in Javadoc. (kkolinko)
      </update>
      <fix>
        <bug>57147</bug>: Various corrections to the JDBC Store section of the
        session manager configuration page of the documentation web application.
        (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Tribes">
    <changelog>
      <fix>
        <bug>45282</bug>: Improve shutdown of NIO receiver so that sockets are
        closed cleanly. (fhanik/markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="jdbc-pool">
    <changelog>
      <fix>
        <bug>57005</bug>: Fix javadoc errors when building with Java 8. Patch
        provided by Pierre Viret. (markt)
      </fix>
      <fix>
        <bug>57079</bug>: Use Tomcat version number for jdbc-pool module when
        building and shipping the module as part of Tomcat. (markt)
      </fix>
      <fix>
        Fix broken overview page in javadoc generated via "javadoc" task in
        jdbc-pool build.xml file. (kkolinko)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Other">
    <changelog>
      <fix>
        <bug>56079</bug>: The uninstaller packaged with the Apache Tomcat
        Windows installer is now digitally signed. (markt)
      </fix>
      <fix>
        Fix timestamps in Tomcat build and jdbc-pool to use 24-hour format
        instead of 12-hour one and use UTC timezone. (markt/kkolinko)
      </fix>
      <fix>
        Update the package renamed copy of Apache Commons DBCP 2 to revision
        1631450 to pick up additional fixes since the 2.0.1 release including
        Javadoc corrections to fix errors when compiling with Java 8. (markt)
      </fix>
      <update>
        <bug>56596</bug>: Update to Tomcat Native Library version 1.1.32 to
        pick up the Windows binaries that are based on OpenSSL 1.0.1j and APR
        1.5.1. (markt)
      </update>
      <scode>
        In Tomcat tests: log name of the current test method at start time.
        (kkolinko)
      </scode>
    </changelog>
  </subsection>
</section>
<section name="Tomcat 8.0.14 (markt)" rtext="2014-09-29">
  <subsection name="Other">
    <changelog>
      <fix>
        <bug>56079</bug>: The Apache Tomcat Windows installer, the Apache Tomcat
        Windows service and the Apache Tomcat Windows service monitor
        application are now digitally signed. (markt)
      </fix>
    </changelog>
  </subsection>
</section>
<section name="Tomcat 8.0.13 (markt)" rtext="not released">
  <subsection name="Catalina">
    <changelog>
      <fix>
        <bug>55917</bug>: Allow bytes in the range 0x80 to 0xFF to appear in
        cookie values if the cookie is a V1 (RFC2109) cookie and the value is
        correctly quoted. The new RFC6265 based cookie parser must be enabled to
        correctly handle these cookies. (markt)
      </fix>
      <fix>
        <bug>55918</bug>: Do not permit control characters to appear in quoted
        V1 (RFC2109) cookie values. The new RFC6265 based cookie parser must be
        enabled to correctly handle these cookies. (markt)
      </fix>
      <fix>
        <bug>55921</bug>: Correctly handle (ignore the cookie) unescaped JSON in
        a cookie value. The new RFC6265 based cookie parser must be enabled to
        correctly handle these cookies. (markt)
      </fix>
      <add>
        <bug>56401</bug>: Log version information when Tomcat starts.
        (markt/kkolinko)
      </add>
      <add>
        <bug>56530</bug>: Add a web application class loader implementation that
        supports the parallel loading of web application classes. (markt)
      </add>
      <fix>
        <bug>56900</bug>: Fix some potential resource leaks when reading
        property files reported by Coverity Scan. Based on patches provided by
        Felix Schumacher. (markt)
      </fix>
      <fix>
        <bug>56902</bug>: Fix a potential resource leak in the Default Servlet
        reported by Coverity Scan. Based on a patch provided by Felix
        Schumacher. (markt)
      </fix>
      <fix>
        <bug>56903</bug>: Correct the return value for
        <code>StandardContext.getResourceOnlyServlets()</code> so that multiple
        names are separated by commas. Identified by Coverity Scan and fixed
        based on a patch by Felix Schumacher. (markt)
      </fix>
      <add>
        Add an additional implementation of a RFC6265 based cookie parser along
        with new Context options to select and configure it. This parser is
        currently considered experimental and is not used by default. (markt)
      </add>
      <fix>
        Fixed the multipart elements merge operation performed during web
        application deployment. Identified by Coverity Scan. (violetagg)
      </fix>
      <fix>
        Correct the information written by
        <code>ExtendedAccessLogValve</code> when a format token x-O(XXX) is
        used so that multiple values for a header XXX are separated by commas.
        Identified by Coverity Scan. (violetagg)
      </fix>
      <fix>
        Fix a potential resource leak when reading MANIFEST.MF file for
        extension dependencies reported by Coverity Scan. (violetagg)
      </fix>
      <fix>
        Fix some potential resource leaks when reading properties, files and
        other resources. Reported by Coverity Scan. (violetagg)
      </fix>
      <fix>
        Correct the previous fix for <bug>56825</bug> that enabled pre-emptive
        authentication to work with the SSL authenticator. (markt)
      </fix>
      <scode>
        Refactor to reduce code duplication identified by Simian. (markt)
      </scode>
      <fix>
        When using parallel deployment and <code>undeployOldVersions</code>
        feature is enabled on a Host, correctly undeploy context of old
        version. Make sure that Tomcat does not undeploy older Context if
        current context is not running. (kfujino)
      </fix>
      <fix>
        Fix a rare threading issue when locking resources via WebDAV.
        (markt)
      </fix>
      <fix>
        Fix a rare threading issue when using HTTP digest authentication.
        (markt)
      </fix>
      <fix>
        When deploying war, add XML file in the config base to the redeploy
        resources if war does not have META-INF/context.xml or
        <code>deployXML</code> is false. If  XML file is created in the config
        base, redeploy will occur. (kfujino)
      </fix>
      <scode>
        Various changes to reduce unnecessary code in Tomcat&apos;s copy of
        Apache Commons BCEL to reduce the time taken for annotation scanning
        when web applications start. Includes contributions from kkolinko and
        hzhang9. (markt)
      </scode>
      <fix>
        <bug>56938</bug>: Ensure web applications that have mixed case context
        paths and are deployed as directories are correctly removed on undeploy
        when running on a case sensitive file system. (markt)
      </fix>
      <add>
        <bug>57004</bug>: Add <code>stuckThreadCount</code> property to
        <code>StuckThreadDetectionValve</code>'s JMX bean. Patch provided by
        Ji&#x159;&#xED; Pejchal. (schultz)
      </add>
      <fix>
        <bug>57011</bug>: Ensure that the request and response are correctly
        recycled when processing errors during async processing. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Coyote">
    <changelog>
      <fix>
        <bug>56910</bug>: Prevent the invalid value of <code>-1</code> being
        used for <code>maxConnections</code> with APR connectors. (markt)
      </fix>
      <fix>
        Ensure that AJP connectors enable the <code>KeepAliveTimeout</code>.
        (kfujino)
      </fix>
      <fix>
        Reduce duplicated code. All AJP connectors use common method to
        configuration of processor. (kfujino)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Jasper">
    <changelog>
      <fix>
        <bug>43001</bug>: Enable the JspC Ant task to set the JspC option
        <code>mappedFile</code>. (markt)
      </fix>
      <fix>
        Ensure that the implementation of
        <code>javax.servlet.jsp.PageContext.include(String)</code>
        and
        <code>javax.servlet.jsp.PageContext.include(String, boolean)</code>
        will throw <code>IOException</code> when an I/O error occur during
        the operation. (violetagg)
      </fix>
      <fix>
        <bug>56908</bug>: Fix some potential resource leaks when reading
        jar files. Reported by Coverity Scan. Patch provided by Felix
        Schumacher. (violetagg)
      </fix>
      <fix>
        Fix a potential resource leak in JDTCompiler when checking whether
        a resource is a package. Reported by Coverity Scan. (fschumacher)
      </fix>
      <fix>
        <bug>56991</bug>: Deprecate the use of a request attribute to pass a
        &lt;jsp-file&gt; declaration to Jasper and prevent an infinite loop
        if this technique is used in conjunction with an include. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="WebSocket">
    <changelog>
      <fix>
        <bug>56905</bug>: Make destruction on web application stop of thread
        group used for WebSocket connections more robust. (kkolinko/markt)
      </fix>
      <fix>
        <bug>56907</bug>: Ensure that client IO threads are stopped if a secure
        WebSocket client connection fails. (markt)
      </fix>
      <fix>
        <bug>56982</bug>: Return the actual negotiated extensions rather than an
        empty list for <code>Session.getNegotiatedExtensions()</code>. (markt)
      </fix>
      <update>
        Update the WebSocket implementation to support the Java WebSocket
        specification version 1.1. (markt)
      </update>
    </changelog>
  </subsection>
  <subsection name="Web applications">
    <changelog>
      <add>
        Add <code>JarScanner</code> to the nested components listed for a
        Context. (markt)
      </add>
      <update>
        Update the Windows authentication documentation after some additional
        testing to answer the remaining questions. (markt)
      </update>
    </changelog>
  </subsection>
  <subsection name="Other">
    <changelog>
      <fix>
        <bug>56895</bug>: Correctly compose <code>JAVA_OPTS</code> in
        <code>catalina.bat</code> so that escape sequences are preserved. Patch
        by Lucas Theisen. (markt)
      </fix>
      <update>
        <bug>56988</bug>: Allow to use relative path in <code>base.path</code>
        setting when building Tomcat. (kkolinko)
      </update>
      <fix>
        <bug>56990</bug>: Ensure that the <code>ide-eclipse</code> build target
        downloads all the libraries required by the default Eclipse
        configuration files. (markt)
      </fix>
      <fix>
        Update the package renamed copy of Apache Commons DBCP 2 to revision
        1626988 to pick up the fixes since the 2.0.1 release including support
        for custom eviction policies. (markt)
      </fix>
      <fix>
        Update the package renamed copy of Apache Commons Pool 2 to revision
        1627271 to pick up the fixes since the 2.2 release including some memory
        leak fixes and support for application provided eviction policies.
        (markt)
      </fix>
    </changelog>
  </subsection>
</section>
<section name="Tomcat 8.0.12 (markt)" rtext="2014-09-03">
  <subsection name="Catalina">
    <changelog>
      <add>
        Make the session id generator extensible by adding a
        <code>SessionIdGenerator</code> interface, an abstract
        base class and a standard implementation. (rjung)
      </add>
      <fix>
        <bug>56882</bug>: Fix regression in processing of includes and forwards
        when Context have been reloaded. Tomcat was responding with HTTP Status
        503 (Servlet xxx is currently unavailable). (kkolinko)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Coyote">
    <changelog>
      <fix>
        When building a list of JSSE ciphers from an OpenSSL cipher definition,
        ignore unknown criteria rather than throwing a
        <code>NullPointerException</code>. (markt)
      </fix>
      <add>
        Add support for the EECDH alias when using the OpenSSL cipher syntax to
        define JSSE ciphers. (markt)
      </add>
    </changelog>
  </subsection>
  <subsection name="Jasper">
    <changelog>
      <fix>
        Correct a logic error in the <code>JasperElResolver</code>. There was no
        functional impact but the code was less efficient as a result of the
        error. Based on a patch by martinschaef. (markt)
      </fix>
      <fix>
        <bug>56568</bug>: Enable any HTTP method to be used to request a JSP
        page that has the <code>isErrorPage</code> page directive set to
        <code>true</code>. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="WebSocket">
    <changelog>
      <add>
        Extend support for the <code>permessage-deflate</code> extension to
        compression of outgoing messages on the server side. (markt)
      </add>
    </changelog>
  </subsection>
  <subsection name="Other">
    <changelog>
      <add>
        <bug>56323</bug>: Include the <code>*.bat</code> files when installing
        Tomcat via the Windows installer. (markt)
      </add>
    </changelog>
  </subsection>
</section>
<section name="Tomcat 8.0.11 (markt)" rtext="2014-08-22">
  <subsection name="Catalina">
    <changelog>
      <fix>
        <bug>56658</bug>: Fix regression that a context was inaccessible after
        reload. (kkolinko)
      </fix>
      <fix>
        <bug>56710</bug>: Do not map requests to servlets when context is
        being reloaded. (kkolinko)
      </fix>
      <fix>
        <bug>56712</bug>: Fix session idle time calculations in
        <code>PersistenceManager</code>. (kkolinko)
      </fix>
      <fix>
        <bug>56717</bug>: Fix duplicate registration of
        <code>MapperListener</code> during repeated starts of embedded Tomcat.
        (kkolinko)
      </fix>
      <add>
        <bug>56724</bug>: Write an error message to Tomcat logs if container
        background thread is aborted unexpectedly. (kkolinko)
      </add>
      <fix>
        When scanning class files (e.g. for annotations) and reading the number
        of parameters in a <code>MethodParameters</code> structure only read a
        single byte (rather than two bytes) as per the JVM specification. Patch
        provided by Francesco Komauli. (markt)
      </fix>
      <fix>
        Allow the JNDI Realm to start even if the directory is not available.
        The directory not being available is not fatal once the Realm is started
        and it need not be fatal when the Realm starts. Based on a patch by
        Cédric Couralet. (markt)
      </fix>
      <fix>
        <bug>56736</bug>: Avoid an incorrect <code>IllegalStateException</code>
        if the async timeout fires after a non-container thread has called
        <code>AsyncContext.dispatch()</code> but before a container thread
        starts processing the dispatch. (markt)
      </fix>
      <fix>
        <bug>56739</bug>: If an application handles an error on an application
        thread during asynchronous processing by calling
        <code>HttpServletResponse.sendError()</code>, then ensure that the
        application is given an opportunity to report that error via an
        appropriate application defined error page if one is configured. (markt)
      </fix>
      <fix>
        <bug>56784</bug>: Fix a couple of rare but theoretically possible
        atomicity bugs. (markt)
      </fix>
      <fix>
        <bug>56785</bug>: Avoid <code>NullPointerException</code> if directory
        exists on the class path that is not readable by the Tomcat user.
        (markt)
      </fix>
      <fix>
        <bug>56796</bug>: Remove unnecessary sleep when stopping a web
        application. (markt)
      </fix>
      <fix>
        <bug>56801</bug>: Improve performance of
        <code>org.apache.tomcat.util.file.Matcher</code> which is to filter JARs
        for scanning during web application start. Based on a patch by Sheldon
        Shao. (markt)
      </fix>
      <fix>
        <bug>56815</bug>: When the <code>gzip</code> option is enabled for the
        <code>DefaultServlet</code> ensure that a suitable <code>Vary</code>
        header is returned for resources that might be returned directly in
        compressed form. (markt)
      </fix>
      <fix>
        Do not mark threads from the container thread pool as container threads
        when being used to process <code>AsyncContext.start(Runnable)</code> so
        processing is correctly transferred back to a genuine container thread
        when necessary. (markt)
      </fix>
      <add>
        Add simple caching for calls to <code>StandardRoot.getResources()</code>
        in the new (for 8.0.x) resources implementation. (markt)
      </add>
      <fix>
        <bug>56825</bug>: Enable pre-emptive authentication to work with the
        SSL authenticator. Based on a patch by jlmonteiro. (markt)
      </fix>
      <fix>
        <bug>56840</bug>: Avoid NPE when the rewrite valve is mapped to
        a context. (remm)
      </fix>
      <fix>
        Correctly handle multiple <code>accept-language</code> headers rather
        than just using the first header to determine the user&apos;s preferred
        Locale. (markt)
      </fix>
      <fix>
        <bug>56848</bug>: Improve handling of <code>accept-language</code>
        headers. (markt)
      </fix>
      <fix>
        <bug>56857</bug>: Fix thread safety issue when calling ServletContext
        methods while running under a security manager. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Coyote">
    <changelog>
      <fix>
        Fix NIO2 sendfile state tracking and error handling to fix
        various corruption issues. (remm)
      </fix>
      <fix>
        Missing timeout for NIO2 sendfile writes. (remm)
      </fix>
      <fix>
        Allow inline processing for NIO2 sendfile and optimize keepalive
        behavior. (remm)
      </fix>
      <fix>
        Fix excessive NIO2 sendfile direct memory use in some cases, sendfile
        will now instead use the regular socket write buffer as configured.
        (remm)
      </fix>
      <fix>
        <bug>56661</bug>: Fix <code>getLocalAddr()</code> for AJP connectors.
        The complete fix is only available with a recent AJP forwarder like
        the forthcoming mod_jk 1.2.41. (rjung)
      </fix>
      <fix>
        Use default ciphers defined as
        <code>HIGH:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5</code> so
        that no weak ciphers are enabled by default. (remm)
      </fix>
      <fix>
        <bug>56780</bug>: Enable Tomcat to start when using SSL with an IBM JRE
        in strict SP800-131a mode. (markt)
      </fix>
      <fix>
        <bug>56810</bug>: Remove use of Java 8 specific API calls in unit tests
        for OpenSSL to JSSE cipher conversion. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Jasper">
    <changelog>
      <fix>
        <bug>56709</bug>: Fix system property name in a log message. Submitted
        by Robert Kish. (remm)
      </fix>
      <fix>
        <bug>56797</bug>: When matching a method in an EL expression, do not
        treat bridge methods as duplicates of the method they bridge to. In this
        case always call the target of the bridge method. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="WebSocket">
    <changelog>
      <fix>
        <bug>56746</bug>: Allow secure WebSocket client threads to use the
        current context class loader rather than explicitly setting it to the
        class loader that loaded the WebSocket implementation. This allows
        WebSocket client connections from within web applications to access,
        amongst other things, the JNDI resources associated with the web
        application. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Web applications">
    <changelog>
      <fix>
        Correct the label in the list of sessions by idle time for the bin that
        represents the idle time immediately below the maximum permitted idle
        time when using the expire command of the Manager application. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="jdbc-pool">
    <changelog>
      <fix>
        <bug>53088</bug>: More identifiable thread name. (fhanik)
      </fix>
      <fix>
        <bug>53200</bug>: Selective logging for slow versus failed queries.
        (fhanik)
      </fix>
      <fix>
        <bug>53853</bug>: More flexible classloading. (fhanik)
      </fix>
      <fix>
        <bug>54225</bug>: Disallow empty init SQL. (fhanik)
      </fix>
      <fix>
        <bug>54227</bug>: Evaluate max age upon borrow. (fhanik)
      </fix>
      <fix>
        <bug>54235</bug>: Disallow nested pools exploitating using data source.
        (fhanik)
      </fix>
      <fix>
        <bug>54395</bug>: Fix JDBC interceptor parsing bug. (fhanik)
      </fix>
      <fix>
        <bug>54537</bug>: Performance improvement in
        <code>StatementFinalizer</code>. (fhanik)
      </fix>
      <fix>
        <bug>54978</bug>: Make sure proper connection validation always happens,
        regardless of config. (fhanik)
      </fix>
      <fix>
        <bug>56318</bug>: Ability to trace statement creation in
        <code>StatementFinalizer</code>. (fhanik)
      </fix>
      <fix>
        <bug>56789</bug>: getPool() returns the actual pool, always. (fhanik)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Other">
    <changelog>
      <add>
        <bug>56788</bug>: Display the full version in the list of installed
        applications when installed via the Windows installer package. Patch
        provided by Alexandre Garnier. (markt)
      </add>
      <add>
        <bug>56829</bug>: Add the ability for users to define their own values
        for <code>_RUNJAVA</code> and <code>_RUNJDB</code> environment
        variables. Be more strict with executable filename on Windows
        (s/java/java.exe/). Based on a patch by Neeme Praks. (markt/kkolinko)
      </add>
    </changelog>
  </subsection>
</section>
<section name="Tomcat 8.0.10 (markt)" rtext="not released">
  <subsection name="Catalina">
    <changelog>
      <fix>
        <bug>44312</bug>: Log an error if there is a conflict between Host and
        Alias names. Improve host management methods in <code>Mapper</code>
        to avoid occasionally removing a wrong host. Check that host management
        operations are performed on the host and not on an alias. (kkolinko)
      </fix>
      <scode>
        <bug>56611</bug>: Refactor code to remove inefficient calls to
        <code>Method.isAnnotationPresent()</code>. Based on a patch by Jian Mou.
        (markt/kkolinko)
      </scode>
      <fix>
        Fix regression in
        <code>StandardContext.removeApplicationListener()</code>, introduced by
        the fix for bug <bug>56588</bug>. (kkolinko)
      </fix>
      <fix>
        <bug>56653</bug>: Fix concurrency issue with lists of contexts in
        <code>Mapper</code> when stopping Contexts. (kkolinko)
      </fix>
      <fix>
        <bug>56657</bug>: When using parallel deployment, if the same session id
        matches different versions of a web application, prefer the latest
        version. Ensure that remapping selects the version that we expect.
        (kkolinko)
      </fix>
      <fix>
        Assert that mapping result object is empty before performing mapping
        work in <code>Mapper</code>. (kkolinko)
      </fix>
      <scode>
        Remove <code>context</code> and <code>wrapper</code> fields in
        <code>Request</code> class and deprecate their setters. (kkolinko)
      </scode>
      <fix>
        <bug>56658</bug>: Avoid delay between registrations of mappings for
        context and for its servlets. (kkolinko)
      </fix>
      <fix>
        <bug>56665</bug>: Correct the generation of the effective web.xml when
        elements contain an empty string as value. (violetagg)
      </fix>
      <fix>
        Fix storeconfig exception routing issues, so that a major problem
        should avoid configuration overwrite. (remm)
      </fix>
      <fix>
        Add configuration fields for header names in SSLValve. (remm)
      </fix>
      <fix>
        <bug>56666</bug>: When clearing the SSO cookie use the same values for
        domain, path, httpOnly and secure as were used to set the SSO cookie.
        (markt)
      </fix>
      <fix>
        <bug>56677</bug>: Ensure that
        <code>HttpServletRequest.getServletContext()</code> returns the correct
        value during a cross-context dispatch. (markt)
      </fix>
      <fix>
        <bug>56684</bug>: Ensure that Tomcat does not shut down if the socket
        waiting for the shutdown command experiences a
        <code>SocketTimeoutException</code>. (markt)
      </fix>
      <fix>
        <bug>56693</bug>: Fix various issues in the static resource cache
        implementation where the cache retained a stale entry after the
        successful completion of an operation that always invalidates the cache
        entry such as a delete operation.
        (markt)
      </fix>
      <fix>
        When the current PathInfo is modified as a result of dispatching a
        request, ensure that a call to
        <code>HttpServletRequest.getPathTranslated()</code> returns a value that
        is based on the modified PathInfo. (markt)
      </fix>
      <fix>
        <bug>56698</bug>: When persisting idle sessions, only persist newly idle
        sessions. Patch provided by Felix Schumacher. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Coyote">
    <changelog>
      <fix>
        <bug>56663</bug>: Fix edge cases demonstrated by ByteCounter relating
        to data available, remaining and extra write events, mostly occurring
        with non blocking Servlet 3.1. (remm)
      </fix>
      <fix>
        Avoid possible NPE stopping endpoints that are not started (stop
        shouldn't do anything in that case). (remm)
      </fix>
      <add>
        <bug>56704</bug>: Add support for OpenSSL syntax for ciphers when
        using JSSE SSL connectors. Submitted by Emmanuel Hugonnet. (remm)
      </add>
      <update>
        Allow to configure <code>maxSwallowSize</code> attribute of an HTTP
        connector via JMX. (kkolinko)
      </update>
    </changelog>
  </subsection>
  <subsection name="Jasper">
    <changelog>
      <fix>
        <bug>56543</bug>: Update to the Eclipse JDT Compiler 4.4. (violetagg)
      </fix>
      <fix>
        <bug>56652</bug>: Add support for method parameters that use arrays and
        varargs to <code>ELProcessor.defineFunction()</code>.(markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="WebSocket">
    <changelog>
      <add>
        Add support for the <code>permessage-deflate</code> extension. This is
        currently limited to decompressing incoming messages on the server side.
        It is expected that support will be extended to outgoing messages and to
        the client side shortly. (markt)
      </add>
    </changelog>
  </subsection>
  <subsection name="Web applications">
    <changelog>
      <fix>
        Attempt to obfuscate session cookie values associated with other web
        applications when viewing HTTP request headers with the Cookies example
        from the examples web application. This reduces the opportunity to use
        this example for malicious purposes should the advice to remove the
        examples web application from security sensitive systems be ignored.
        (markt)
      </fix>
      <fix>
        <bug>56694</bug>: Remove references to <code>Manager</code> attribute
        <code>checkInterval</code> from documentation and Javadoc since it no
        longer exists. Based on a patch by Felix Schumacher. Also remove other
        references to <code>checkInterval</code> that are no longer valid.
        (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Other">
    <changelog>
      <update>
        Update the API stability section of the release notes now that Tomcat 8
        has had its first stable release. (markt)
      </update>
      <update>
        Improve <code>build.xml</code> so that when Eclipse JDT Compiler is
        updated, it will delete the old JAR from <code>build/lib</code>
        directory. (kkolinko)
      </update>
      <scode>
        Simplify implementation of "setproxy" target in <code>build.xml</code>.
        (kkolinko)
      </scode>
      <update>
        Update optional Checkstyle library to 5.7. (kkolinko)
      </update>
      <update>
        <bug>56596</bug>: Update to Tomcat Native Library version 1.1.31 to
        pick up the Windows binaries that are based on OpenSSL 1.0.1h. (markt)
      </update>
      <fix>
        <bug>56685</bug>: Add quotes necessary for <code>daemon.sh</code> to
        work correctly on Solaris. Based on a suggestion by lfuka. (markt)
      </fix>
      <update>
        Update package renamed Apache Commons Pool2 to r1609323 to pick various
        bug fixes. (markt)
      </update>
      <update>
        Update package renamed Apache Commons DBCP2 to r1609329 to pick up a
        minor bug fix. (markt)
      </update>
      <update>
        Update package renamed Apache Commons FileUpload to r1596086 to pick
        various bug fixes. (markt)
      </update>
    </changelog>
  </subsection>
</section>
<section name="Tomcat 8.0.9 (markt)" rtext="2014-06-24">
  <subsection name="Catalina">
    <changelog>
      <fix>
        <bug>55282</bug>: Ensure that one and the same application listener is
        added only once when starting the web application. (violetagg)
      </fix>
      <fix>
        <bug>55975</bug>: Apply consistent escaping for double quote and
        backslash characters when escaping cookie values. (markt)
      </fix>
      <scode>
        <bug>56387</bug>: Improve the code that handles an attempt to load a
        class after a web application has been stopped. Use common code to handle
        this case regardless of the access path and don't throw an exception
        purely to log a stack trace. (markt)
      </scode>
      <scode>
        <bug>56399</bug>: Improve implementation of CoyoteAdapter.checkRecycled()
        to do not use an exception for flow control. (kkolinko)
      </scode>
      <add>
        <bug>56461</bug>: New <code>failCtxIfServletStartFails</code> attribute
        on Context and Host configuration to force the context startup to fail
        if a load-on-startup servlet fails its startup. (slaurent)
      </add>
      <add>
        <bug>56526</bug>: Improved the <code>StuckThreadDetectionValve</code> to
        optionally interrupt stuck threads to attempt to unblock them.
        (slaurent)
      </add>
      <fix>
        <bug>56545</bug>: Pre-load two additional classes, the loading of which
        may otherwise be triggered by a web application which in turn would
        trigger an exception when running under a security manager. (markt)
      </fix>
      <update>
        <bug>56546</bug>: Reduce logging level for stack traces of stuck web
        application threads printed by WebappClassLoader.clearReferencesThreads()
        from error to info. (kkolinko)
      </update>
      <scode>
        Refactor and simplify common code in object factories in
        <code>org.apache.catalina.naming</code> package, found thanks to Simian
        (Similarity Analyser) tool. Improve handling of Throwable.
        (markt/kkolinko)
      </scode>
      <fix>
        Relax cookie naming restrictions. Cookie attribute names used in the
        <code>Set-Cookie</code> header may be used unambiguously as cookie
        names. The restriction that prevented such usage has been removed.
        (jboynes/markt)
      </fix>
      <fix>
        Further relax cookie naming restrictions. Version 0 (a.k.a Netscape
        format) cookies may now use names that start with the <code>$</code>
        character. (jboynes/markt)
      </fix>
      <fix>
        Restrict cookie naming so that the <code>=</code> character is no longer
        permitted in a version 0 (a.k.a. Netscape format) cookie name. While
        Tomcat allowed this, browsers always truncated the name at the
        <code>=</code> character leading to a mis-match between the cookie the
        server set and the cookie returned by the browser. (jboynes/markt)
      </fix>
      <add>
        Add a simple <code>ServiceLoader</code> based discovery mechanism to the
        JULI <code>LogFactory</code> to make it easier to use JULI and Tomcat
        components that depend on JULI (such as Jasper) independently from
        Tomcat. Patch provided by Greg Wilkins. (markt)
      </add>
      <fix>
        <bug>56578</bug>: Correct regression in the fix for <bug>56339</bug>
        that prevented sessions from expiring when using clustering. (markt)
      </fix>
      <fix>
        <bug>56588</bug>: Remove code previously added to enforce the
        requirements of section 4.4 of the Servlet 3.1 specification. The code
        is no longer required now that Jasper initialization has been refactored
        and TLD defined listeners are added via a different code path that
        already enforces the specification requirements. (markt)
      </fix>
      <fix>
        <bug>56600</bug>: In WebdavServlet: Do not waste time generating
        response for broken PROPFIND request. (kkolinko)
      </fix>
      <fix>
        Provide a better error message when asynchronous operations are not
        supported by a filter or servlet. Patch provided by Romain Manni-Bucau.
        (violetagg)
      </fix>
      <fix>
        <bug>56606</bug>: User entries in <code>tomcat-users.xml</code> file
        are recommended to use "username" attribute rather than legacy "name"
        attribute. Fix inconsistencies in Windows installer, examples. Update
        digester rules and documentation for <code>MemoryRealm</code>.
        (markt/kkolinko)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Coyote">
    <changelog>
      <fix>
        <bug>56518</bug>: When using NIO, do not attempt to write to the socket
        if the thread is marked interrupted as this will lead to a connection
        limit leak. This fix was based on analysis of the issue by hanyong.
        (markt)
      </fix>
      <fix>
        <bug>56521</bug>: Re-use the asynchronous write buffer between writes to
        reduce allocation and GC overhead. Based on a patch by leonzhx. Also
        make the buffer size configurable and remove copying of data within
        buffer when the buffer is only partially written on a subsequent write.
        (markt)
      </fix>
      <fix>
        Ensure that a request without a body is correctly handled during Comet
        processing. This fixes the Comet chat example. (markt)
      </fix>
      <fix>
        Fix input concurrency issue in NIO2 upgrade. (remm)
      </fix>
      <fix>
        Correct a copy/paste error and return a 500 response rather than a 400
        response when an internal server error occurs on early stages of
        request processing. (markt)
      </fix>
      <scode>
        <bug>56582</bug>: Use switch(actionCode) in processors instead of a
        chain of "elseif"s. (kkolinko)
      </scode>
      <fix>
        <bug>56582#c1</bug>: Implement DISPATCH_EXECUTE action for AJP
        connectors. (kkolinko)
      </fix>
      <fix>
        Fix CVE-2014-0227:
        Various improvements to ChunkedInputFilter including clean-up, i18n for
        error messages and adding an error flag to allow subsequent attempts at
        reading after an error to fail fast. (markt)
      </fix>
      <fix>
        If request contains an unrecognized Expect header, respond with error
        417 (Expectation Failed), according to RFC2616 chapter 14.20. (markt)
      </fix>
      <fix>
        When an error occurs after the response has been committed close the
        connection immediately rather than attempting to finish the response to
        make it easier for the client to differentiate between a complete
        response and one that failed part way though. (markt)
      </fix>
      <scode>
        Remove the beta tag from the NIO2 connectors. (remm)
      </scode>
      <fix>
        <bug>56620</bug>: Avoid bogus access log entries when pausing the NIO
        HTTP connector and ensure that access log entries generated by error
        conditions use the correct request start time. (markt)
      </fix>
      <fix>
        Improve configuration of cache sizes in the endpoint. (markt)
      </fix>
      <add>
        Fix CVE-2014-0230:
        Add a new limit, defaulting to 2MB, for the amount of data Tomcat will
        swallow for an aborted upload. The limit is configurable by
        <code>maxSwallowSize</code> attribute of an HTTP connector. (markt)
      </add>
    </changelog>
  </subsection>
  <subsection name="Jasper">
    <changelog>
      <fix>
        <bug>56334#c15</bug>: Fix a regression in EL parsing when quoted string
        follows a whitespace. (kkolinko/markt)
      </fix>
      <update>
        <bug>56543</bug>: Update to the Eclipse JDT Compiler 4.4RC4 to pick up
        some fixes for Java 8 support. (markt/kkolinko)
      </update>
      <fix>
        <bug>56561</bug>: Avoid <code>NoSuchElementException</code> while
        handling attributes with empty string value. (violetagg)
      </fix>
      <scode>
        Do not configure a <code>JspFactory</code> in the
        <code>JasperInitializer</code> if one has already been set as might be
        the case in some embedding scenarios. (markt)
      </scode>
      <add>
        Add a simple implementation of <code>InstanceManager</code> and have
        Jasper use it if no other <code>InstanceManager</code> is provided. This
        makes it easier to use Jasper independently from Tomcat. Patch provided
        by Greg Wilkins. (markt)
      </add>
      <fix>
        <bug>56568</bug>: Allow any HTTP method when a JSP is being used as an
        error page. (markt)
      </fix>
      <update>
        <bug>56581</bug>: If an error on a JSP page occurs when response has
        already been committed, do not clear the buffer of JspWriter, but flush
        it. It will make more clear where the error occurred. (kkolinko)
      </update>
      <fix>
        <bug>56612</bug>: Correctly parse two consecutive escaped single quotes
        when used in UEL expression in a JSP. (markt)
      </fix>
      <update>
        Move code that parses EL expressions within JSP template text from
        <code>Parser</code> to <code>JspReader</code> class for better
        performance. (kkolinko)
      </update>
      <fix>
        <bug>56636</bug>: Correctly identify the required method when specified
        via <code>ELProcessor.defineFunction(String,String,String,String)</code>
        when using Expression Language. (markt)
      </fix>
      <fix>
        <bug>56638</bug>: When using
        <code>ELProcessor.defineFunction(String,String,String,String)</code> and
        no function name is specified, use the method name as the function name
        as required by the specification. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="WebSocket">
    <changelog>
      <scode>
        <bug>56446</bug>: Clearer handling of exceptions when calling a method
        on a POJO based WebSocket endpoint. Based on a suggestion by Eugene
        Chung. (markt)
      </scode>
      <fix>
        When a WebSocket client attempts to write to a closed connection, handle
        the resulting <code>IllegalStateException</code> in a manner consistent
        with the handling of an <code>IOException</code>. (markt)
      </fix>
      <fix>
        Add more varied endpoints for echo testing. (remm)
      </fix>
      <fix>
        <bug>56577</bug>: Improve the executor configuration used for the
        callbacks associated with asynchronous writes. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Web applications">
    <changelog>
      <fix>
        Set the path for cookies created by the examples web application so they
        only returned to the examples application. This reduces the opportunity
        for using such cookies for malicious purposes should the advice to
        remove the examples web application from security sensitive systems be
        ignored. (markt/kkolinko)
      </fix>
      <fix>
        Attempt to obfuscate session cookie values associated with other web
        applications when viewing HTTP request headers with the Request Header
        example from the examples web application. This reduces the opportunity
        to use this example for malicious purposes should the advice to remove
        the examples web application from security sensitive systems be ignored.
        (markt)
      </fix>
      <add>
        Add options for all of the WebSocket echo endpoints to the WebSocket
        echo example in the examples web application. (markt)
      </add>
      <fix>
        Ensure that the asynchronous WebSocket echo endpoint in the examples
        web application always waits for the previous message to complete before
        it sends the next. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Other">
    <changelog>
      <update>
        Update package renamed Apache Commons DBCP2 to r1596858. (markt)
      </update>
    </changelog>
  </subsection>
</section>
<section name="Tomcat 8.0.8 (markt)" rtext="beta, 2014-05-21">
  <subsection name="Catalina">
    <changelog>
      <fix>
        <bug>56536</bug>: Ensure that
        <code>HttpSessionBindingListener.valueUnbound()</code> uses the correct
        class loader when the <code>SingleSignOn</code> valve is used. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Jasper">
    <changelog>
       <fix>
         <bug>56529</bug>: Avoid <code>NoSuchElementException</code> while handling
         attributes with empty string value in custom tags. Patch provided by
         Hariprasad Manchi. (violetagg)
       </fix>
    </changelog>
  </subsection>
</section>
<section name="Tomcat 8.0.7 (markt)" rtext="not released">
  <subsection name="Catalina">
    <changelog>
      <fix>
        <bug>56523</bug>: When using SPNEGO authentication, log the exceptions
        associated with failed user logins at debug level rather than error
        level. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Coyote">
    <changelog>
      <add>
        <bug>56399</bug>: Assert that both Coyote and Catalina request objects
        have been properly recycled. (kkolinko)
      </add>
    </changelog>
  </subsection>
  <subsection name="Jasper">
    <changelog>
      <fix>
        <bug>56522</bug>: When setting a value for a
        <code>ValueExpression</code>, ensure that the expected coercions take
        place such as a <code>null</code> string being coerced to an empty
        string. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Other">
    <changelog>
      <fix>
        Copy missing resources file from Apache Commons DBCP 2 to packaged
        renamed copy of DBCP 2. (markt)
      </fix>
    </changelog>
  </subsection>
</section>
<section name="Tomcat 8.0.6 (markt)" rtext="not released">
  <subsection name="Catalina">
    <changelog>
      <fix>
        Fix extension validation which was broken by refactoring for new
        resources implementation. (markt)
      </fix>
      <fix>
        Fix custom UTF-8 decoder so that a byte of value 0xC1 is always rejected
        immediately as it is never valid in a UTF-8 byte sequence. Update UTF-8
        decoder tests to account for UTF-8 decoding improvements in Java 8.
        The custom UTF-8 decoder is still required due to bugs in the UTF-8
        decoder provided by Java. Java 8&apos;s decoder is better than Java
        7&apos;s but it is still buggy. (markt)
      </fix>
      <fix>
        <bug>56027</bug>: Add more options for managing FIPS mode in the
        AprLifecycleListener. (schultz/kkolinko)
      </fix>
      <fix>
        <bug>56320</bug>: Fix a file descriptor leak in the default servlet when
        sendfile is used. (markt)
      </fix>
      <fix>
        <bug>56321</bug>: When a WAR is modified, undeploy the web application
        before deleting any expanded directory as the undeploy process may
        refer to classes that need to be loaded from the expanded directory. If
        the expanded directory is deleted first, any attempt to load a new class
        during undeploy will fail. (markt)
      </fix>
      <fix>
        <bug>56327</bug>: Enable AJP as well as HTTP connectors to be created
        via JMX. Patch by kiran. (markt)
      </fix>
      <fix>
        <bug>56339</bug>: Avoid an infinite loop if an application calls
        <code>session.invalidate()</code> from the session destroyed event for
        that session. (markt)
      </fix>
      <scode>
        <bug>56365</bug>: Simplify file name pattern matching code in
        <code>StandardJarScanner</code>. Improve documentation. (kkolinko)
      </scode>
      <fix>
        Ensure that the static resource cache is able to detect when a cache
        entry is invalidated by being overridden by a new resource in a
        different <code>WebResourceSet</code>. (markt)
      </fix>
      <fix>
        <bug>56369</bug>: Ensure that removing an MBean notification listener
        reverts all the operations performed when adding an MBean notification
        listener. (markt)
      </fix>
      <scode>
        Improve implementation of <code>Lifecycle</code> for
        <code>WebappClassLoader</code>. State is now correctly reported rather
        than always reporting as <code>NEW</code>. (markt)
      </scode>
      <add>
        <bug>56382</bug>: Information about finished deployment and its execution
        time is added to the log files. Patch is provided by Danila Galimov.
        (violetagg)
      </add>
      <add>
        <bug>56383</bug>: Properties for disabling server information and error
        report are added to the <code>org.apache.catalina.valves.ErrorReportValve</code>.
        Based on the patch provided by Nick Bunn. (violetagg/kkolinko)
      </add>
      <fix>
        <bug>56390</bug>: Fix JAR locking issue with JARs containing TLDs and
        the TLD cache that prevented the undeployment of web applications when
        the WAR was deleted. (markt)
      </fix>
      <fix>
        Fix CVE-2014-0119:
        Only create XML parsing objects if required and fix associated potential
        memory leak in the default Servlet.
        Extend XML factory, parser etc. memory leak protection to cover some
        additional locations where, theoretically, a memory leak could occur.
        (markt)
      </fix>
      <fix>
        Modify generic exception handling so that
        <code>StackOverflowError</code> is not treated as a fatal error and can
        handled and/or logged as required. (markt)
      </fix>
      <fix>
        <bug>56409</bug>: Avoid <code>StackOverflowError</code> on non-Windows
        systems if a file named <code>\</code> is encountered when scanning for
        TLDs. (markt)
      </fix>
      <add>
        <bug>56430</bug>: Extend checks for suspicious URL patterns to include
        patterns of the form <code>*.a.b</code> which are not valid patterns for
        extension mappings. (markt)
      </add>
      <fix>
        <bug>56441</bug>: Raise the visibility of exceptions thrown when a
        problem is encountered calling a getter or setter on a component
        attribute. The logging level is raised from debug to warning. (markt)
      </fix>
      <add>
        <bug>56463</bug>: Property for disabling server information is added to
        the <code>DefaultServlet</code>. Server information is presented in the
        response sent to the client when directory listings is enabled.
        (violetagg)
      </add>
      <fix>
        <bug>56472</bug>: Allow NamingContextListener to clean up on stop if its
        start failed. (kkolinko)
      </fix>
      <fix>
        <bug>56481</bug>: Work around case insensitivity issue in
        <code>URLClassLoader</code> exposed by some recent refactoring. (markt)
      </fix>
      <add>
        <bug>56492</bug>: Avoid eclipse debugger pausing on uncaught exceptions
        when tomcat renews its threads. (slaurent)
      </add>
      <add>
        Add the <code>org.apache.naming</code> package to the packages requiring
        code to have the <code>defineClassInPackage</code> permission when
        running under a security manager. (markt)
      </add>
      <fix>
        Make the naming context tokens for containers more robust by using a
        separate object. Require RuntimePermission when introducing a new token.
        (markt/kkolinko)
      </fix>
      <fix>
        <bug>56501</bug>: <code>HttpServletRequest.getContextPath()</code>
        should return the undecoded context path used by the user agent. (markt)
      </fix>
      <fix>
        Minor fixes to <code>ThreadLocalLeakPreventionListener</code>. Do not
        trigger threads renewal for failed contexts. Do not ignore
        <code>threadRenewalDelay</code> setting. Improve documentation. (kkolinko)
      </fix>
      <fix>
        Correct regression introduced in <rev>1239520</rev> that broke loading
        of users from <code>tomcat-users.xml</code> when using the
        <code>JAASMemoryLoginModule</code>. (markt)
      </fix>
      <fix>
        Correct regression introduced in <rev>797162</rev> that broke
        authentication of users when using the
        <code>JAASMemoryLoginModule</code>. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Coyote">
    <changelog>
      <fix>
        More cleanup of NIO2 endpoint shutdown. (remm)
      </fix>
      <fix>
        <bug>56336</bug>: AJP output corruption and errors. (remm)
      </fix>
      <fix>
        Handle various cases of incomplete writes in NIO2. (remm)
      </fix>
      <scode>
        Code cleanups and i18n in NIO2. (remm)
      </scode>
      <fix>
        Fix extra onDataAvailable calls in the NIO2 connector. (remm)
      </fix>
      <fix>
        Fix gather writes in NIO2 SSL. (remm)
      </fix>
      <scode>
        Upgrade the NIO2 connectors to beta, but still not ready for production. (remm)
      </scode>
      <scode>
        Fix code duplication between NIO and NIO2. (remm)
      </scode>
      <fix>
        <bug>56348</bug>: Fix slow asynchronous read when read was performed on
        a non-container thread. (markt)
      </fix>
      <fix>
        <bug>56416</bug>: Correct documentation for default value of socket
        linger for the AJP and HTTP connectors. (markt)
      </fix>
      <fix>
        Fix possible corruption if doing keepalive after a comet request. (remm)
      </fix>
      <fix>
        <bug>56518</bug>: Fix connection limit latch leak when a non-container
        thread is interrupted during asynchronous processing. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Jasper">
    <changelog>
      <fix>
        <bug>56334</bug>: Fix a regression in the handling of back-slash
        escaping introduced by the fix for <bug>55735</bug>. (markt/kkolinko)
      </fix>
      <fix>
        <bug>56425</bug>: Improve method matching for EL expressions. When
        looking for matching methods, an exact match between parameter types is
        preferred followed by an assignable match followed by a coercible match.
        (markt)
      </fix>
      <fix>
        Correct the handling of back-slash escaping in the EL parser and no
        longer require that <code>\$</code> or <code>\#</code> must be followed
        by <code>{</code> in order for the back-slash escaping to take effect.
        (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Cluster">
    <changelog>
      <scode>
        Remove the implementation of
        <code>org.apache.catalina.LifecycleListener</code> from
        <code>org.apache.catalina.ha.tcp.SimpleTcpCluster</code>.
        <code>SimpleTcpCluster</code> does not work as
        <code>LifecycleListener</code>, it works as nested components of Host or
        Engine. (kfujino)
      </scode>
      <fix>
        Remove cluster and replicationValve from cluster manager template. These
        instance are not necessary to template. (kfujino)
      </fix>
      <fix>
        Add support for cross context session replication to
        <code>org.apache.catalina.ha.session.BackupManager</code>. (kfujino)
      </fix>
      <fix>
        Remove the unnecessary cross context check. It does not matter whether
        the context that is referenced by other context is set to
        <code>crossContext</code>=true. The context that refers to the different
        context must be set to <code>crossContext</code>=true. (kfujino)
      </fix>
      <scode>
        Move to <code>org.apache.catalina.ha.session.ClusterManagerBase</code>
        common logics of
        <code>org.apache.catalina.ha.session.BackupManager</code> and
        <code>org.apache.catalina.ha.session.DeltaManager</code>. (kfujino)
      </scode>
      <scode>
        Simplify the code of <code>o.a.c.ha.tcp.SimpleTcpCluster</code>. In
        order to add or remove cluster valve to Container, use pipeline instead
        of <code>IntrospectionUtils</code>. (kfujino)
      </scode>
      <fix>
        There is no need to set cluster instance when
        <code>SimpleTcpCluster.unregisterClusterValve</code> is called.
        Set null than cluster instance for cleanup. (kfujino)
      </fix>
    </changelog>
  </subsection>
  <subsection name="WebSocket">
    <changelog>
      <fix>
        <bug>56343</bug>: Avoid a NPE if Tomcat&apos;s Java WebSocket 1.0
        implementation is used with the Java WebSocket 1.0 API JAR from the
        reference implementation. (markt)
      </fix>
      <fix>
        Increase the default maximum size of the executor used by the WebSocket
        implementation for call backs associated with asynchronous writes from
        10 to 200. (markt)
      </fix>
      <add>
        Add a warning if the thread group created for WebSocket asynchronous
        write call backs can not be destroyed when the web application is
        stopped. (markt)
      </add>
      <fix>
        Ensure that threads created to support WebSocket clients are stopped
        when no longer required. This will happen automatically for WebSocket
        client connections initiated by web applications but stand alone clients
        must call <code>WsWebSocketContainer.destroy()</code>. (markt)
      </fix>
      <fix>
        <bug>56449</bug>: When creating a new session, add the message handlers
        to the session before calling <code>Endpoint.onOpen()</code> so the
        message handlers are in place should the <code>onOpen()</code> method
        trigger the sending of any messages. (markt)
      </fix>
      <fix>
        <bug>56458</bug>: Report WebSocket sessions that are created over secure
        connections as secure rather than as not secure. (markt)
      </fix>
      <fix>
        Stop threads used for secure WebSocket client connections when they are
        no longer required and give them better names for easier debugging while
        they are running. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Web applications">
    <changelog>
      <fix>
        Add Support for <code>copyXML</code> attribute of Host to Host Manager.
        (kfujino)
      </fix>
      <fix>
        Ensure that "name" request parameter is used as a application base of
        host if "webapps" request parameter is not set when adding host in
        HostManager Application. (kfujino)
      </fix>
      <fix>
        Correct documentation on Windows service options, aligning it with
        Apache Commons Daemon documentation. (kkolinko)
      </fix>
      <fix>
        <bug>56418</bug>: Ensure that the Manager web application does not
        report success for a web application deployment that fails. (slaurent)
      </fix>
      <update>
        Improve valves documentation. Split valves into groups. (kkolinko)
      </update>
      <fix>
        <bug>56513</bug>: Make the documentation crystal clear that using
        sendfile will disable any compression that Tomcat may otherwise have
        applied to the response. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Other">
    <changelog>
      <scode>
        Review source code and take advantage of Java 7&apos;s
        try-with-resources syntax where possible. (markt)
      </scode>
      <fix>
        Align DisplayName of Tomcat installed by <code>service.bat</code> with
        one installed by the *.exe installer. Print a warning in case if neither
        server nor client jvm is found by <code>service.bat</code>. (kkolinko)
      </fix>
      <update>
        <bug>56363</bug>: Update to version 1.1.30 of Tomcat Native library.
        (schultz)
      </update>
      <update>
        Update package renamed Apache Commons BCEL to r1593495 to pick up some
        additional changes for Java 7 support and some code clean up. (markt)
      </update>
      <update>
        Update package renamed Apache Commons FileUpload to r1569132 to pick up
        some small improvements (e.g. better <code>null</code> protection) and
        some code clean up. (markt)
      </update>
      <update>
        Update package renamed Apache Commons Codec to r1586336 to pick up some
        Javadoc fixes and some code clean up. (markt)
      </update>
      <scode>
        Switch to including Apache Commons DBCP via a package renamed svn copy
        rather than building from a source release for consistency with other
        Commons packages and to allow faster releases to fix DBCP related
        issues. (markt)
      </scode>
      <update>
        Update package renamed Apache Commons Pool2 and DBCP2 to r1593563 to
        pick various bug fixes. (markt)
      </update>
      <add>
        In tests: allow to configure directory where JUnit reports and access
        log are written to. (kkolinko)
      </add>
    </changelog>
  </subsection>
</section>
<section name="Tomcat 8.0.5 (markt)" rtext="beta, 2014-03-27">
  <subsection name="Catalina">
    <changelog>
      <fix>
        Rework the fix for <bug>56190</bug> as the previous fix did not recycle
        the request in all cases leading to mis-routing of requests. (markt)
      </fix>
      <fix>
        Allow web applications to package tomcat-jdbc.jar and their JDBC driver
        of choice in the web application. (markt)
      </fix>
      <fix>
        <bug>56293</bug>: Cache resources loaded by the class loader from
        <code>/META-INF/services/</code> for better performance for repeated
        look ups. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Coyote">
    <changelog>
      <fix>
        Fix possibly incomplete final flush with NIO2 when using non blocking
        mode. (remm)
      </fix>
      <fix>
        Cleanup NIO2 endpoint shutdown. (remm)
      </fix>
      <fix>
        Fix rare race condition notifying onWritePossible in the NIO2
        HTTP/1.1 connector. (remm)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Jasper">
    <changelog>
      <fix>
        <bug>54475</bug>: Add Java 8 support to SMAP generation for JSPs. Patch
        by Robbie Gibson. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Web applications">
    <changelog>
      <fix>
        <bug>56273</bug>: If the Manager web application does not perform an
        operation because the web application is already being serviced, report
        an error rather than reporting success. (markt)
      </fix>
      <fix>
        <bug>56304</bug>: Add a note to the documentation about not using
        WebSocket with BIO HTTP in production. (markt)
      </fix>
    </changelog>
  </subsection>
</section>
<section name="Tomcat 8.0.4 (markt)" rtext="not released">
  <subsection name="Catalina">
    <changelog>
      <fix>
        Restore the ability to use the <code>addURL()</code> method of the
        web application class loader to add external resources to the web
        application. (markt)
      </fix>
      <fix>
        Improve the robustness of web application undeployment based on some
        code analysis triggered by the report for <bug>54315</bug>. (markt)
      </fix>
      <fix>
        <bug>56125</bug>: Correctly construct the URL for a resource that
        represents the root of a JAR file. (markt)
      </fix>
      <fix>
        Generate a valid root element for the effective web.xml for a web
        application for all supported versions of web.xml. (markt)
      </fix>
      <add>
        Make it easier for applications embedding and/or extending Tomcat to
        modify the <code>javaseClassLoader</code> attribute of the
        <code>WebappClassLoader</code>. (markt)
      </add>
      <fix>
        Add missing support for <code>&lt;deny-uncovered-http-methods&gt;</code>
        element when merging web.xml files. (markt)
      </fix>
      <fix>
        Improve merging process for web.xml files to take account of the
        elements and attributes supported by the Servlet version of the merged
        file. (markt)
      </fix>
      <fix>
        Avoid <code>NullPointerException</code> in resource cache when making an
        invalid request for a resource outside of the web application. (markt)
      </fix>
      <fix>
        Remove an unnecessary null check identified by FindBugs. (markt)
      </fix>
      <add>
        In WebappClassLoader, when reporting threads that are still running
        while web application is being stopped, print their stack traces to
        the log. (kkolinko)
      </add>
      <fix>
        <bug>56190</bug>: The response should be closed (i.e. no further output
        is permitted) when a call to <code>AsyncContext.complete()</code> takes
        effect. (markt)
      </fix>
      <fix>
        <bug>56236</bug>: Enable Tomcat to work with alternative Servlet and
        JSP API JARs that package the XML schemas in such as way as to require
        a dependency on the JSP API before enabling validation for web.xml.
        Tomcat has no such dependency. (markt)
      </fix>
      <fix>
        <bug>56244</bug>: Fix MBeans descriptor for WebappClassLoader MBean.
        (kkolinko)
      </fix>
      <add>
        Add a work around for validating XML documents (often TLDs) that use
        just the file name to refer to refer to the JavaEE schema on which they
        are based. (markt)
      </add>
      <add>
        Add methods of get the idle time from last client access time to
        <code>org.apache.catalina.Session</code>. (kfujino)
      </add>
      <fix>
        <bug>56246</bug>: Fix NullPointerException in MemoryRealm when
        authenticating an unknown user. (markt)
      </fix>
      <fix>
        <bug>56248</bug>: Allow the deployer to update an existing WAR file
        without undeploying the existing application if the update flag is set.
        This allows any existing custom context.xml for the application to be
        retained. To update an application and remove any existing context.xml
        simply undeploy the old version of the application before deploying the
        new version. (markt)
      </fix>
      <fix>
        <bug>56253</bug>: When listing resources that are provided by a JAR, fix
        possible <code>StringIndexOutOfBoundsException</code>s. Add some unit
        tests for this and similar scenarios and fix the additional issues those
        unit tests identified. Based on a patch by Larry Isaacs. (markt)
      </fix>
      <fix>
        Fix CVE-2014-0096:
        Redefine the <code>globalXsltFile</code> initialisation parameter of the
        DefaultServlet as relative to CATALINA_BASE/conf or CATALINA_HOME/conf.
        Prevent user supplied XSLTs used by the DefaultServlet from defining
        external entities. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Coyote">
    <changelog>
      <fix>
        In some circumstances asynchronous requests could time out too soon.
        (markt)
      </fix>
      <fix>
        <bug>56172</bug>: Avoid possible request corruption when using the AJP
        NIO connector and a request is sent using more than one AJP message.
        Patch provided by Amund Elstad. (markt)
      </fix>
      <add>
        Add experimental NIO2 connector. Based on code developed by
        Nabil Benothman. (remm)
      </add>
      <fix>
        Fix CVE-2014-0075:
        Improve processing of chuck size from chunked headers. Avoid overflow
        and use a bit shift instead of a multiplication as it is marginally
        faster. (markt/kkolinko)
      </fix>
      <fix>
        Fix CVE-2014-0095:
        Correct regression introduced in 8.0.0-RC2 as part of the Servlet 3.1
        non-blocking IO support that broke handling of requests with an explicit
        content length of zero. (markt/kkolinko)
      </fix>
      <fix>
        Fix CVE-2014-0099:
        Fix possible overflow when parsing long values from a byte array.
        (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Jasper">
    <changelog>
      <fix>
        Change the default compiler source and compiler target versions to 1.7
        since Tomcat 8 requires a minimum of Java 7. (markt)
      </fix>
      <fix>
        <bug>56179</bug>: Fix parsing of EL expressions that contain unnecessary
        parentheses. (markt)
      </fix>
      <fix>
        <bug>56177</bug>: Handle dependency tracking for TLDs when using JspC
        with a tag library JAR that is located outside of the web application.
        (markt)
      </fix>
      <fix>
        Remove an unnecessary null check identified by FindBugs. (markt)
      </fix>
      <fix>
        <bug>56199</bug>: Restore validateXml option for JspC which determines
        if web.xml will be parsed with a validating parser. (markt)
      </fix>
      <fix>
        <bug>56223</bug>: Throw an <code>IllegalStateException</code> if a call
        is made to <code>ServletContext.setInitParameter()</code> after the
        ServletContext has been initialized. (markt)
      </fix>
      <fix>
        <bug>56265</bug>: Do not escape values of dynamic tag attributes
        containing EL expressions. (kkolinko)
      </fix>
      <fix>
        Make the default compiler source and target versions for JSPs Java 7
        since Tomcat 8 requires Java 7 as a minimum. (markt)
      </fix>
      <update>
        <bug>56283</bug>: Update to the Eclipse JDT Compiler P20140317-1600
        which adds support for Java 8 syntax to JSPs. Add support for value
        "1.8" for the <code>compilerSourceVM</code> and
        <code>compilerTargetVM</code> options. (markt)
      </update>
    </changelog>
  </subsection>
  <subsection name="WebSocket">
    <changelog>
      <fix>
        Avoid a possible deadlock when one thread is shutting down a connection
        while another thread is trying to write to it. (markt)
      </fix>
      <fix>
        Avoid NPE when flushing batched messages. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Web Applications">
    <changelog>
      <add>
        <bug>56093</bug>: Add the SSL Valve to the documentation web
        application. (markt)
      </add>
      <fix>
        <bug>56217</bug>: Improve readability by using left alignment for the
        table cell containing the request information on the Manager application
        status page. (markt)
      </fix>
      <fix>
        Fixed <code>java.lang.NegativeArraySizeException</code> when using
        "Expire sessions" command in the manager web application on a
        context where the session timeout is disabled. (kfujino)
      </fix>
      <fix>
         Add support for <code>LAST_ACCESS_AT_START</code> system property to
         Manager web application. (kfujino)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Other">
    <changelog>
      <fix>
        <bug>56115</bug>: Expose the <code>httpusecaches</code> property of
        Ant&apos;s <code>get</code> task as some users may need to change the
        default. Based on a suggestion by Anthony. (markt)
      </fix>
      <fix>
        <bug>56143</bug>: Improve <code>service.bat</code> so that it can be
        launched from a non-UAC console. This includes using a single call to
        <code>tomcat8.exe</code> to install the Windows service rather than
        three calls, and using command line arguments instead of environment
        variables to pass the settings. (markt/kkolinko)
      </fix>
      <scode>
        Simplify Windows *.bat files: remove %OS% checks, as current java does
        not run on ancient non-NT operating systems. (kkolinko)
      </scode>
      <fix>
        Align options between <code>service.bat</code> and <code>exe</code>
        Windows installer. For <code>service.bat</code> the changes are in
        --Classpath, --DisplayName, --StartPath, --StopPath. For
        <code>exe</code> installer the changes are in --JvmMs, --JvmMx options,
        which are now 128 Mb and 256 Mb respectively instead of being empty.
        Explicitly specify --LogPath path when uninstalling Windows service,
        avoiding default value for that option. (kkolinko)
      </fix>
      <fix>
        <bug>56137</bug>: Explicitly use NIO connector in SSL example in
        server.xml so it doesn't break if APR is enabled. (markt)
      </fix>
      <fix>
        <bug>56139</bug>: Avoid a web application class loader leak in some unit
        tests when running on Windows. (markt)
      </fix>
      <fix>
        Correct build script to avoid building JARs with empty packages. (markt)
      </fix>
      <add>
        Allow to limit JUnit test run to a number of selected test case
        methods. (kkolinko)
      </add>
      <update>
        Update Commons Pool 2 to 2.2. (markt)
      </update>
      <update>
        Update Commons DBCP 2 to the 2.0 release. (markt)
      </update>
      <fix>
        <bug>56189</bug>: Remove used file cpappend.bat from the distribution.
        (markt)
      </fix>
      <fix>
        <bug>56204</bug>: Remove unnecessary dependency between tasks in the
        build script. (markt)
      </fix>
      <fix>
         Add definition of <code>org.apache.catalina.ant.FindLeaksTask</code>.
         (kfujino)
      </fix>
      <fix>
         Implement <code>org.apache.catalina.ant.VminfoTask</code>,
         <code>org.apache.catalina.ant.ThreaddumpTask</code> and
         <code>org.apache.catalina.ant.SslConnectorCiphersTask</code>. (kfujino)
      </fix>
      <add>
         Add the option to the Apache Ant tasks to ignore the constraint of the
         first line of the response message that must be "OK -"
         (<code>ignoreResponseConstraint</code> in <code>AbstractCatalinaTask</code>).
         Default is false. (kfujino)
      </add>
    </changelog>
  </subsection>
</section>
<section name="Tomcat 8.0.3 (markt)" rtext="beta, 2014-02-11">
  <subsection name="Other">
    <changelog>
      <fix>
        Fix build of Apache Commons DBCP2 classes. (kkolinko)
      </fix>
      <update>
        Update Commons DBCP 2 to snapshot 170 dated 07 Feb 2014. This enables
        DBCP to work with a SecurityManager such that only DBCP needs to be
        granted the necessary permissions to communicate with the database.
        (markt)
      </update>
    </changelog>
  </subsection>
</section>
<section name="Tomcat 8.0.2 (markt)" rtext="not released">
  <subsection name="Catalina">
    <changelog>
      <fix>
        <bug>56082</bug>: Fix a concurrency bug in JULI&apos;s LogManager
        implementation. (markt)
      </fix>
      <fix>
        <bug>56085</bug>: <code>ServletContext.getRealPath(String)</code> should
        return <code>null</code> for invalid input rather than throwing an
        <code>IllegalArgumentException</code>. (markt)
      </fix>
      <fix>
        Fix WebDAV support that was broken by the refactoring for the new
        resources implementation. (markt)
      </fix>
      <scode>
        Simplify Catalina.initDirs(). (kkolinko)
      </scode>
      <fix>
        <bug>56096</bug>: When the attribute <code>rmiBindAddress</code> of the
        JMX Remote Lifecycle Listener is specified it's value will be used when
        constructing the address of a JMX API connector server. Patch is
        provided by Jim Talbut. (violetagg)
      </fix>
      <fix>
        When environment entry with one and the same name is defined in the web
        deployment descriptor and with annotation then the one specified in the
        web deployment descriptor is with priority. (violetagg)
      </fix>
      <fix>
        Fix passing the value of false for <code>xmlBlockExternal</code> option
        of Context to Jasper, as the default was changed in 8.0.1. (kkolinko)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Coyote">
    <changelog>
      <fix>
        Enable non-blocking reads to take place on non-container threads.
        (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Cluster">
    <changelog>
      <scode>
        Simplify the code of
        <code>o.a.c.ha.tcp.SimpleTcpCluster.createManager(String)</code>.
        Remove unnecessary class cast. (kfujino)
      </scode>
    </changelog>
  </subsection>
  <subsection name="Web applications">
    <changelog>
      <fix>
        In Manager web application improve handling of file upload errors.
        Display a message instead of error 500 page. Simplify. (kkolinko)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Other">
    <changelog>
      <fix>
        <bug>56104</bug>: Correct the version number on the welcome page of the
        Windows installer. (markt)
      </fix>
      <update>
        Update Commons DBCP 2 to snapshot 168 dated 05 Feb 2014. (markt)
      </update>
      <fix>
        Fix CVE-2014-0050, a denial of service with a malicious, malformed
        Content-Type header and multipart request processing. Fixed by merging
        latest code (r1565159) from Commons FileUpload. (markt)
      </fix>
    </changelog>
  </subsection>
</section>
<section name="Tomcat 8.0.1 (markt)" rtext="beta, 2014-02-02">
  <subsection name="Catalina">
    <changelog>
      <fix>
        Change default value of <code>xmlBlockExternal</code> attribute of
        Context. It is <code>true</code> now. (kkolinko)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Coyote">
    <changelog>
      <fix>
        Correct regression in the fix for <bug>55996</bug> that meant that
        asynchronous requests might timeout too early. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Jasper">
    <changelog>
      <fix>
        Change default value of the <code>blockExternal</code> attribute of
        JspC task. The default value is <code>true</code>. Add support for
        <code>-no-blockExternal</code> switch when JspC is run as a
        standalone application. (kkolinko)
      </fix>
    </changelog>
  </subsection>
  <subsection name="WebSocket">
    <changelog>
      <fix>
        Do not return an empty string for the
        <code>Sec-WebSocket-Protocol</code> HTTP header when no sub-protocol has
        been requested or no sub-protocol could be agreed as RFC6455 requires
        that no <code>Sec-WebSocket-Protocol</code> header is returned in this
        case. (markt)
      </fix>
    </changelog>
  </subsection>
</section>
<section name="Tomcat 8.0.0 (markt)" rtext="not released">
  <subsection name="Catalina">
    <changelog>
      <add>
        Implement JSR 340 - Servlet 3.1. The JSR 340 implementation includes
        contributions from Nick Williams and Jeremy Boynes. (markt)
      </add>
      <add>
        Implement JSR 245 MR2 - JSP 2.3. (markt)
      </add>
      <add>
        Implement JSR 341 - Unified Expression Language 3.0. (markt)
      </add>
      <add>
        Implement JSR 356 - WebSockets. The JSR 356 implementation includes
        contributions from Nick Williams, Rossen Stoyanchev and Niki Dokovski.
        (markt)
      </add>
      <update>
        <bug>46727</bug>: Refactor default servlet to make it easier to
        sub-class to implement finer grained control of the file encoding. Based
        on a patch by Fred Toth. (markt)
      </update>
      <add>
        <bug>45995</bug>: Align Tomcat with Apache httpd and perform MIME type
        mapping based on file extension in a case insensitive manner. (markt)
      </add>
      <scode>
        Remove duplicate code that converted a Host&apos;s appBase attribute to
        a canonical file. (markt)
      </scode>
      <scode>
        <bug>51408</bug>: Replace calls to <code>Charset.defaultCharset()</code>
        with an explicit reference to the ISO-8859-1 Charset. (markt)
      </scode>
      <scode>
        Refactor initialization code to use a single, consistent approach to
        determining the Catalina home (binary) and base (instance) directories.
        The search order for home is <code>catalina.home</code> system property,
        parent of current directory if boootstrap.jar is present and finally
        current working directory. The search order for Catalina base is
        <code>catalina.base</code> system property falling back to the value for
        Catalina home. (markt)
      </scode>
      <update>
        <bug>52092</bug>: JULI now uses the <code>OneLineFormatter</code> and
        <code>AsyncFileHandler</code> by default. (markt)
      </update>
      <fix>
        <bug>52558</bug>: Refactor <code>CometConnectionManagerValve</code> so
        that it does not prevent the session from being serialized in when
        running in a cluster. (markt)
      </fix>
      <fix>
        <bug>52767</bug>: Remove reference to MySQL specific autoReconnect
        property in <code>JDBCAccessLogValve</code>. (markt)
      </fix>
      <scode>
        Make the Mapper type-safe. Hosts, Contexts and Wrappers are no
        longer handled as plain objects, instead they keep their type.
        Code using the Mapper doesn't need to cast objects returned by
        the mapper. (rjung)
      </scode>
      <scode>
        Move Manager, Loader and Resources from Container to Context since
        Context is the only place they are used. The documentation already
        states (and has done for some time) that Context is the only valid
        location for these nested components. (markt)
      </scode>
      <scode>
        Move the Mapper from the Connector to the Service since the Mapper is
        identical for all Connectors of a given Service and it is common for
        there to be multiple Connectors for a Service (http, https and ajp).
        This means there is now only ever one Mapper per Service rather than
        possibly multiple identically configured Mapper objects. (markt)
      </scode>
      <scode>
        Remove the per Context Mapper objects and use the Mapper from the
        Service. This removes the need to maintain two copies of the mappings
        for Servlets and Filters. (markt)
      </scode>
      <add>
        Implement a new Resources implementation that merges Aliases,
        VirtualLoader, VirtualDirContext, JAR resources and external
        repositories into a single framework rather than a separate one for each
        feature. (markt)
      </add>
      <add>
        URL rewrite valve, similar in functionality to mod_rewrite. (remm)
      </add>
      <add>
        Port storeconfig functionality, which can persist to server.xml and
        context.xml runtime container configuration changes. (remm)
      </add>
      <add>
        <bug>54095</bug>: Add support to the Default Servlet for serving
        gzipped versions of static resources directly from disk as an
        alternative to Tomcat compressing them on each request. Patch by
        Philippe Marschall. (markt)
      </add>
      <fix>
        <bug>54708</bug>: Change the name of the working directory for the ROOT
        application (located under $CATALINA_BASE/work by default) from _ to
        ROOT. (markt)
      </fix>
      <add>
        Change default configuration so that a change to the global web.xml file
        will trigger a reload of all web applications. (markt)
      </add>
      <fix>
        <bug>55101</bug>: Make BASIC authentication more tolerant of whitespace.
        Patch provided by Brian Burch. (markt)
      </fix>
      <fix>
        <bug>55166</bug>: Move JSP descriptor and tag library descriptor schemas
        to servlet-api.jar to enable relative references between the schemas to
        be correctly resolved. (markt)
      </fix>
      <scode>
        Refactor the descriptor parsing code into a separate module that can be
        used by both Catalina and Jasper. Includes patches provided by Jeremy
        Boynes. (violetagg/markt)
      </scode>
      <scode>
        <bug>55246</bug>: Move TLD scanning to a ServletContainerInitializer
        provided by Jasper. Includes removal of TldConfig lifecycle listener and
        associated Context properties. (jboynes)
      </scode>
      <add>
        <bug>55317</bug>: Facilitate weaving by allowing ClassFileTransformer to
        be added to WebappClassLoader. Patch by Nick Williams. (markt)
      </add>
      <fix>
        <bug>55620</bug>: Enable Tomcat to start when either $CATALINA_HOME
        and/or $CATALINA_BASE contains a comma character. Prevent Tomcat from
        starting when $CATALINA_HOME and/or $CATALINA_BASE contains a semi-colon
        on Windows. Prevent Tomcat from starting when $CATALINA_HOME and/or
        $CATALINA_BASE contains a colon on Linux/FreeBSD/etc. (markt)
      </fix>
      <scode>
        Initialize the JSP runtime in Jasper's initializer to avoid need for a
        Jasper-specific lifecycle listener. <code>JasperListener</code> has been
        removed. (jboynes)
      </scode>
      <fix>
        Change ordering of elements of JMX objects names so components are
        grouped more logically in JConsole. Generally, components are now
        grouped by Host and then by Context. (markt)
      </fix>
      <add>
        Context listener to allow better EE and framework integration. (remm)
      </add>
      <fix>
        <bug>57896</bug>: Support defensive copying of "cookie" header so that
        unescaping double quotes in a cookie value does not corrupt original
        value of "cookie" header. This is an opt-in feature, enabled by
        <code>org.apache.tomcat.util.http.ServerCookie.PRESERVE_COOKIE_HEADER</code>
        system property. (remm/kkolinko)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Coyote">
    <changelog>
      <add>
        Experimental support for SPDY. Includes contributions from Sheldon Shao.
        (costin)
      </add>
      <scode>
        The default connector is now the Java NIO connector even when specifying
        HTTP/1.1 as protocol (fhanik)
      </scode>
      <scode>
        Update default value of pollerThreadCount for the NIO connector. The new
        default value will never go above 2 regardless of available processors.
        (fhanik)
      </scode>
      <fix>
        <bug>54010</bug>: Remove some unnecessary code (duplicate calls to
        configure the scheme as https for AJP requests originally received over
        HTTPS). (markt)
      </fix>
      <scode>
        Refactor char encoding/decoding using NIO APIs. (remm)
      </scode>
      <update>
        Change the default URIEncoding for all connectors from ISO-8859-1 to
        UTF-8. (markt)
      </update>
    </changelog>
  </subsection>
  <subsection name="Jasper">
    <changelog>
      <scode>
        Simplify API of <code>ErrorDispatcher</code> class by using varargs.
        (kkolinko)
      </scode>
      <scode>
        Update Jasper to use the new common web.xml parsing code. Includes
        patches by Jeremy Boynes. (markt/violetagg)
      </scode>
      <add>
        Create test cases for JspC. Patch by Jeremy Boynes. (markt)
      </add>
      <scode>
        <bug>55246</bug>: TLD scanning is now performed by JasperInitializer
        (a ServletContainerInitializer) removing the need for support within the
        Servlet container itself. The scan is now performed only once rather than
        in two passes reducing startup time. (jboynes)
      </scode>
      <fix>
        <bug>55251</bug>: Do not allow JspC task to fail silently if the web.xml
        or web.xml fragment can not be generated. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Cluster">
    <changelog>
      <scode>
        Remove unused JvmRouteSessionIDBinderListener and SessionIDMessage.
        (kfujino)
      </scode>
      <scode>
        Modify method signature in ReplicationValve. Cluster instance is not
        necessary to argument of method. (kfujino)
      </scode>
      <scode>
        Remove unused <code>expireSessionsOnShutdown</code> attribute in
        <code>org.apache.catalina.ha.session.BackupManager</code>. (kfujino)
      </scode>
    </changelog>
  </subsection>
  <subsection name="Web applications">
    <changelog>
      <add>
        Extend the diagnostic information provided by the Manager web
        application to include details of the configured SSL ciphers suites for
        each connector. (markt)
      </add>
      <update>
        <bug>48550</bug>: Update examples web application to use UTF-8. (markt)
      </update>
      <update>
        <bug>55383</bug>: Improve the design and correct the HTML markup of
        the documentation web application. Patches provided by Konstantin
        Preißer. (markt)
      </update>
    </changelog>
  </subsection>
  <subsection name="Tribes">
    <changelog>
      <scode>
        Refactor <code>AbstractReplicatedMap</code> to use generics. A key
        side-effect of this is that the class now implements
        <code>Map&lt;K,V&gt;</code> rather than extends
        <code>ConcurrentMap</code>. (markt)
      </scode>
    </changelog>
  </subsection>
  <subsection name="Other">
    <changelog>
      <scode>
        Remove unused, deprecated code. (markt)
      </scode>
      <scode>
        Remove static info String and associated getInfo() method where present.
        (markt)
      </scode>
      <update>
        (<rev>1353242</rev>, <rev>1353410</rev>):
        Remove Ant tasks <code>jasper2</code> and <code>jkstatus</code>.
        The correct names are <code>jasper</code> and <code>jkupdate</code>.
        (kkolinko)
      </update>
      <fix>
        <bug>53529</bug>: Clean-up the handling of
        <code>InterruptedException</code> throughout the code base. (markt)
      </fix>
      <add>
        <bug>54899</bug>: Provide an initial implementation of NetBeans support.
        Patch provided by Brian Burch. (markt)
      </add>
      <fix>
        <bug>55166</bug>: Move the JSP descriptor and tag library descriptor
        schema definition files from jsp-api.jar to servlet-api.jar so relative
        includes between the J2EE, Servlet and JSP schemas are correctly
        resolved. (markt)
      </fix>
      <fix>
        <bug>55372</bug>: When starting Tomcat with the <code>jpda</code> option
        to enable remote debugging, by default only listen on localhost for
        connections from a debugger. Prior to this change, Tomcat listened on
        all known addresses. (markt)
      </fix>
    </changelog>
  </subsection>
</section>
</body>
</document>
