<?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.33 (markt)">
  <subsection name="Catalina">
    <changelog>
      <fix>
        Correct a regression in the fix for <bug>58867</bug>. When configuring a
        Context to use an external directory for the <code>docBase</code>, and
        that directory happens to be located along side the original WAR, use
        the directory as the <code>docBase</code> rather than expanding the
        WAR into the <code>appBase</code> and using the newly created expanded
        directory as the <code>docBase</code>. (markt)
      </fix>
      <add>
        <bug>58351</bug>: Make the server build date and server version number
        accessible via JMX. Patch provided by  Huxing Zhang. (markt)
      </add>
      <add>
        <bug>58988</bug>: Special characters in the substitutions for the RewriteValve
        can now be quoted with a backslash. (fschumacher)
      </add>
      <fix>
        <bug>58999</bug>: Fix class and resource name filtering in WebappClassLoader.
        It throws a StringIndexOutOfBoundsException if the name is exactly
        "org" or "javax". (rjung)
      </fix>
      <scode>
        Remove unnecessary code. There is no support for context level cluster.
        (kfujino)
      </scode>
      <add>
        Make checking for var and map replacement in RewriteValve a bit stricter and
        correct detection of colon in var replacement. (fschumacher)
      </add>
      <fix>
        Fix the type of <code>InstanceManager</code> attribute of mbean
        definition of <code>StandardContext</code>. (kfujino)
      </fix>
      <fix>
        Refactor the web application class loader to reduce the impact of JAR
        scanning on the memory footprint of the web application. (markt)
      </fix>
      <fix>
        Fix some resource leaks in the error handling for accessing files from
        JARs and WARs. (markt)
      </fix>
      <fix>
        Refactor the JAR and JAR-in-WAR resource handling to reduce the memory
        footprint of the web application. (markt)
      </fix>
      <fix>
        <bug>57809</bug>: Deprecate the custom context attribute
        <code>org.apache.tomcat.util.scan.MergedWebXml</code> which will be
        removed in Tomcat 9. (markt)
      </fix>
      <fix>
        <bug>59001</bug>: Correctly handle the case when Tomcat is installed on
        a path where one of the segments ends in an exclamation mark. (markt)
      </fix>
      <fix>
        Expand the fix for <bug>59001</bug> to cover the special sequences used
        in Tomcat&apos;s custom jar:war: URLs. (markt)
      </fix>
      <fix>
        <bug>59043</bug>: Avoid warning while expiring sessions associated with
        a single sign on if <code>HttpServletRequest.logout()</code> is used.
        (markt)
      </fix>
      <fix>
        <bug>59054</bug>: Ensure that using the
        <code>CrawlerSessionManagerValve</code> in a distributed environment
        does not trigger an error when the Valve registers itself in the
        session. (markt)
      </fix>
      <fix>
        Storeconfig handling of alternate cookie processors. (markt/remm)
      </fix>
      <fix>
        Storeconfig handling for socket properties. (remm)
      </fix>
      <add>
        Log a warning message if a user tries to configure the default session
        timeout via the deprecated (and ignored)
        <code>Manager.setMaxInactiveInterval()</code> method. (markt)
      </add>
      <fix>
        Fix incorrect parsing of the NE and NC flags in rewrite rules. (remm)
      </fix>
      <fix>
        <bug>59065</bug>: Correct the timing of the check for colons in paths
        on non-Windows systems implemented in <code>catalina.sh</code> so it
        works correctly with Cygwin. Patch provided by Ed Randall. (markt)
      </fix>
      <fix>
        When a Host is configured with an appBase that does not exist, create
        the appBase before trying to expand an external WAR file into it.
        (markt)
      </fix>
      <fix>
       <bug>59115</bug>: When using the Servlet 3.0 file upload, the submitted
       file name may be provided as a token or a quoted-string. If a
       quoted-string, unquote the string before returning it to the user.
       (markt)
      </fix>
      <fix>
        <bug>59123</bug>: Close <code>NamingEnumeration</code> objects used by
        the <code>JNDIRealm</code> once they are no longer required.
        (fschumacher/markt)
      </fix>
      <fix>
        <bug>59138</bug>: Correct a false positive warning for ThreadLocal
        related memory leaks when the key class but not the value class has been
        loaded by the web application class loader. (markt)
      </fix>
      <fix>
        <bug>59145</bug>: Don't log an invalid warning when a user logs out of
        a session associated with SSO. (markt)
      </fix>
      <fix>
        <bug>59151</bug>: Fix a regression in the fix for <bug>56917</bug> that
        added additional (and arguably unnecessary) validation to the provided
        redirect location. (markt)
      </fix>
      <fix>
        <bug>59154</bug>: Fix a <code>NullPointerException</code> in the
        <code>JASSMemoryLoginModue</code> resulting from the introduction of the
        <code>CredentialHandler</code> to <code>Realm</code>s. (schultz/markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Coyote">
    <changelog>
      <fix>
        <bug>58646</bug>: Correct a problem with sendfile that resulted in a
        Processor being added to the cache twice leading to broken responses.
        (markt)
      </fix>
      <fix>
        <bug>59015</bug>: Fix potential cause of endless APR Poller loop during
        shutdown if the Poller experiences an error during the shutdown process.
        (markt)
      </fix>
      <fix>
        Align cipher aliases for <code>kECDHE</code> and <code>ECDHE</code> with
        the current OpenSSL implementation. (markt)
      </fix>
      <fix>
        <bug>59081</bug>: Retain the user defined cipher order when defining
        ciphers using the OpenSSL format. (markt)
      </fix>
      <fix>
        <bug>59089</bug>: Correctly ignore HTTP headers that include non-token
        characters in the header name. (markt)
      </fix>
      <add>
        Add support for additional OpenSSL cipher aliases from OpenSSL master
        when specifying ciphers using the OpenSSL syntax. (markt)
      </add>
    </changelog>
  </subsection>
  <subsection name="Jasper">
    <changelog>
      <fix>
        <bug>57583</bug>: Improve the performance of
        <code>javax.servlet.jsp.el.ScopedAttributeELResolver</code> when
        resolving attributes that do not exist. This improvement only works when
        Jasper is used with with Tomcat's EL implementation. (markt)
      </fix>
      <update>
        <bug>58111</bug>: Update to the Eclipse JDT Compiler 4.5. (markt)
      </update>
      <add>
        Add Java 9 support for JSPs. (markt)
      </add>
    </changelog>
  </subsection>
  <subsection name="WebSocket">
    <changelog>
      <fix>
        <bug>59014</bug>: Ensure that a WebSocket close message can be sent
        after a close message has been received. (markt)
      </fix>
      <fix>
        Correctly handle compression of partial messages when the final message
        fragment has a zero length payload. (markt)
      </fix>
      <fix>
        <bug>59119</bug>: Correct read logic for WebSocket client when using
        secure connections. (markt)
      </fix>
      <fix>
        <bug>59134</bug>: Correct client connect logic for secure connections
        made through a proxy. (markt)
      </fix>
      <fix>
        <bug>59189</bug>: Explicitly release the native memory held by the
        <code>Inflater</code> and <code>Deflater</code> when using
        PerMessageDeflate and the WebSocket session ends. Based on a patch by
        Henrik Olsson. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Web applications">
    <changelog>
      <fix>
        Correct an error in the documentation of the expected behaviour for
        automatic deployment. If a WAR is updated and an expanded directory is
        present, the directory will always be deleted and recreated by expanding
        the WAR if <code>unpackWARs</code> is <code>true</code>. (markt)
      </fix>
      <fix>
        <bug>58935</bug>: Remove incorrect references in the documentation to
        using <code>jar:file:</code> URLs with the Manager application. (markt)
      </fix>
      <fix>
        Correct the description of the
        <code>ServletRequest.getServerPort()</code> in Proxy How-To.
        Issue reported via comments.apache.org. (violetagg)
      </fix>
      <fix>
        Fix a potenital indefinite wait in the Comet Chat servlet in the
        examples web application. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Tribes">
    <changelog>
      <fix>
        If promoting a proxy node to a primary node when getting a session,
        notify the change of the new primary node to the original backup node.
        (kfujino)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Other">
    <changelog>
      <fix>
        <bug>58283</bug>: Change the default download location for libraries
        during the build process from <code>/usr/share/java</code> to
        <code>${user.home}/temp</code>. Patch provided by Ahmed Hosni. (markt)
      </fix>
      <fix>
        <bug>59031</bug>: When using the Windows uninstaller, do not remove the
        contents of any directories that have been symlinked into the Tomcat
        directory structure. (markt)
      </fix>
      <update>
        Update the packaged version of the Tomcat Native Library to 1.2.5 to
        pick up the Windows binaries that are based on OpenSSL 1.0.2g and APR
        1.5.1. (markt)
      </update>
      <update>
        Modify the default <code>tomcat-users.xml</code> file to make it harder
        for users to configure the entries intended for use with the examples
        web application for the Manager application. (markt)
      </update>
    </changelog>
  </subsection>
</section>
<section name="Tomcat 8.0.32 (markt)" rtext="2016-02-08">
  <subsection name="General">
    <changelog>
      <add>
        Allow to configure multiple JUnit test class patterns with the build
        property <code>test.name</code> and document the property in
        BUILDING.txt. (rjung)
      </add>
      <fix>
        <bug>58768</bug>: Log a warning if a redirect fails because of an
        invalid location. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Catalina">
    <changelog>
      <fix>
        Fix class loader decision on the delegation for class loading and
        resource lookup and make it faster too. (rjung)
      </fix>
      <fix>
        <bug>58946</bug>: Ensure that the request parameter map remains
        immutable when processing via a RequestDispatcher. (markt)
      </fix>
      <fix>
        <bug>58827</bug>: Deprecate what is left of the JSR 77 implementation.
        (markt)
      </fix>
      <fix>
        <bug>58905</bug>: Ensure that <code>Tomcat.silence()</code> silences the
        correct logger and respects the current setting. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Coyote">
    <changelog>
      <add>
        New configuration option <code>ajpFlush</code> for the AJP connectors
        to disable the sending of AJP flush packets. (rjung)
      </add>
    </changelog>
  </subsection>
  <subsection name="Cluster">
    <changelog>
      <fix>
        Correct a regression in the session attribute filtering that prevented
        clustering from starting in the default configuration. (kfujino)
      </fix>
    </changelog>
  </subsection>
  <subsection name="WebSocket">
    <changelog>
      <fix>
        Fix a timing issue on session close that could result in an exception
        being thrown for an incomplete message even through the message was
        completed. (markt)
      </fix>
    </changelog>
  </subsection>
</section>
<section name="Tomcat 8.0.31 (markt)" rtext="not released">
  <subsection name="Catalina">
    <changelog>
      <fix>
        Correct implementation of
        <code>validateClientProvidedNewSessionId</code> so client provided
        session IDs may be rejected if validation is enabled. (markt)
      </fix>
      <fix>
        Add path parameter handling to
        <code>HttpServletRequest.getContextPath()</code>. This is a follow-up to
        the fix for <bug>57215</bug>. (markt)
      </fix>
      <fix>
        <bug>58692</bug>: Make <code>StandardJarScanner</code> more robust. Log
        a warning if a class path entry cannot be scanned rather than triggering
        the failure of the web application. Includes a test case written by
        Derek Abdine. (markt)
      </fix>
      <fix>
        <bug>58701</bug>: Reset the <code>instanceInitialized</code> field in
        <code>StandardWrapper</code> when unloading a Servlet so that a new
        instance may be correctly initialized. (markt)
      </fix>
      <fix>
        <bug>58702</bug>: Ensure an access log entry is generated if the client
        aborts the connection. (markt)
      </fix>
      <fix>
        Fixed various issues reported by Findbugs. (violetagg)
      </fix>
      <fix>
        <bug>58735</bug>: Add support for the <code>X-XSS-Protection</code>
        header to the <code>HttpHeaderSecurityFilter</code>. Patch provided by
        Jacopo Cappellato. (markt)
      </fix>
      <fix>
        <bug>58751</bug>: Correctly handle the case where an
        <code>AsyncListener</code> dispatches to a Servlet on an asynchronous
        timeout and the Servlet uses <code>sendError()</code> to trigger an
        error page. Includes a test case based on code provided by Andy
        Wilkinson.(markt)
      </fix>
      <fix>
        <bug>58765</bug>: Change default for
        <code>mapperContextRootRedirectEnabled</code> to <code>true</code> since
        this is required for correct session management because of the default
        for <code>sessionCookiePathUsesTrailingSlash</code>. (markt)
      </fix>
      <fix>
        Add the <code>StatusManagerServlet</code> to the list of Servlets that
        can only be loaded by privileged applications. (markt)
      </fix>
      <fix>
        Simplify code and fix messages in
        <code>org.apache.catalina.core.DefaultInstanceManager</code> class.
        (kkolinko)
      </fix>
      <scode>
        Deprecate InstanceListener, InstanceEvent and InstanceSupport prior to
        removal in 9.0.x. (markt)
      </scode>
      <fix>
        Ensure that the proper file encoding if specified will be used when
        a readme file is served by DefaultServlet. (violetagg)
      </fix>
      <fix>
        Fix declaration of <code>localPort</code> attribute of Connector MBean:
        it is read-only. (kkolinko)
      </fix>
      <fix>
        <bug>58766</bug>: Make skipping non-class files during annotation
        scanning faster by checking the file name first. Improve debug logging.
        (kkolinko)
      </fix>
      <fix>
        <bug>58809</bug>: Correctly recycle cookies when mapping requests for
        parallel deployment. As a side-effect of this fix, the system property
        <code>org.apache.tomcat.util.http.ServerCookie.PRESERVE_COOKIE_HEADER</code>
        is no longer used. From this release, Tomcat will always preserve the
        cookie header. (markt)
      </fix>
      <fix>
        <bug>58836</bug>: Correctly merge query string parameters when
        processing a forwarded request where the target includes a query string
        that contains a parameter with no value. (markt/kkolinko)
      </fix>
      <fix>
        Make sure that shared Digester is reset in an unlikely error case
        in <code>HostConfig.deployWAR()</code>. (kkolinko)
      </fix>
      <fix>
        <bug>58867</bug>: Improve checking on Host start for WAR files that have
        been modified while Tomcat has stopped and re-expand them if
        <code>unpackWARs</code> is <code>true</code>. (markt)
      </fix>
      <fix>
        Fix a potential JDBC resource leak in DataSourceRealm. (schultz)
      </fix>
      <fix>
        <bug>58900</bug>: Correctly undeploy symlinked resources and prevent an
        infinite cycle of deploy / undeploy. (markt)
      </fix>
      <fix>
        Protect initialization of <code>ResourceLinkFactory</code> when
        running with a SecurityManager. (kkolinko)
      </fix>
      <add>
        Extend the feature available in the cluster session manager
        implementations that enables session attribute replication to be
        filtered based on attribute name to all session manager implementations.
        Note that configuration attribute name has changed from
        <code>sessionAttributeFilter</code> to
        <code>sessionAttributeNameFilter</code>. Apply the filter on load as
        well as unload to ensure that configuration changes made while the web
        application is stopped are applied to any persisted data. (markt)
      </add>
      <add>
        Extend the session attribute filtering options to include filtering
        based on the implementation class of the value and optional
        <code>WARN</code> level logging if an attribute is filtered. These
        options are available for all of the Manager implementations that ship
        with Tomcat. When a <code>SecurityManager</code> is used filtering will
        be enabled by default. (markt)
      </add>
    </changelog>
  </subsection>
  <subsection name="Jasper">
    <changelog>
      <fix>
        Fix handling of missing messages in
        <code>org.apache.el.util.MessageFactory</code>. (violetagg)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Cluster">
    <changelog>
      <fix>
        In order to avoid that the heartbeat thread and the background thread to
        run <code>Channel.heartbeat</code> simultaneously, if
        <code>heartbeatBackgroundEnabled</code> of <code>SimpleTcpCluster</code>
        set to <code>true</code>, ensure that the heartbeat thread does not
        start. (kfujino)
      </fix>
      <scode>
        Simplify the code of <code>JvmRouteBinderValve.startInternal()</code>.
        Avoid potential NPE when <code>JvmRouteBinderValve</code> is configured
        directly at <code>Engine</code> element. (kfujino)
      </scode>
    </changelog>
  </subsection>
  <subsection name="WebSocket">
    <changelog>
      <fix>
        <bug>57489</bug>: Ensure <code>onClose()</code> is called when a
        WebSocket connection is closed even if the sending of the close message
        fails. Includes test cases by Barry Coughlan. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Web Applications">
    <changelog>
      <add>
        Add a description of the default value of
        <code>heartbeatSleeptime</code> attribute and <code>optionCheck</code>
        attribute in the cluster channel docs. (kfujino)
      </add>
      <fix>
        Correct some typos in the JNDI resources How-To. (markt)
      </fix>
      <fix>
        Don't create sessions unnecessarily in the Manager application. (markt)
      </fix>
      <fix>
        Don't create sessions unnecessarily in the Host Manager application.
        (markt)
      </fix>
      <fix>
        <bug>58723</bug>: Clarify documentation and error messages for the text
        interface of the manager to make clear that version must be used with
        path when referencing contexts deployed using parallel deployment.
        (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Tribes">
    <changelog>
      <fix>
        Fix potential NPE in <code>AbstractReplicatedMap.breakdown()</code>.
        (kfujino)
      </fix>
      <fix>
        Add support for the startup notification of local members in the static
        cluster. (kfujino)
      </fix>
      <fix>
        Ignore the unnecessary member remove operation from different domain.
        (kfujino)
      </fix>
      <fix>
        Add support for the shutdown notification of local members in the static
        cluster. (kfujino)
      </fix>
      <fix>
        Ensure that asynchronous session replication thread is a daemon thread.
        (kfujino)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Other">
    <changelog>
      <update>
        Remove native code (Windows Service Wrapper, APR/native connector)
        support for Windows Itanium. (markt)
      </update>
      <update>
        Update the packaged version of the Tomcat Native Library to 1.2.4 to
        pick up the Windows binaries that are based on OpenSSL 1.0.2e and APR
        1.5.1. (markt)
      </update>
      <update>
        Update the NSIS Installer used to build the Windows Installers to
        version 2.50. (markt/kkolinko)
      </update>
      <update>
        Update optional Checkstyle library to 6.14.1. (kkolinko)
      </update>
    </changelog>
  </subsection>
</section>
<section name="Tomcat 8.0.30 (markt)" rtext="2015-12-06">
  <subsection name="Catalina">
    <changelog>
      <fix>
        <bug>34319</bug>: Only load those keys in
        <code>StoreBase.processExpire</code> from JDBCStore, that are old
        enough, to be expired. Based on a patch by Tom Anderson. (fschumacher)
      </fix>
      <add>
        <bug>56917</bug>: As per RFC7231 (HTTP/1.1), allow HTTP/1.1 and later
        redirects to use relative URIs. This is controlled by a new attribute
        <code>useRelativeRedirects</code> on the <strong>Context</strong> and
        defaults to <code>true</code>. (markt)
      </add>
      <fix>
        <bug>58629</bug>: Allow an embedded Tomcat instance to start when the
        <code>Service</code> has no <code>Engine</code> configured. (markt)
      </fix>
      <fix>
        <bug>58635</bug>: Enable break points to be set within agent code when
        running Tomcat with a Java agent. Based on a patch by Huxing Zhang.
        (markt)
      </fix>
      <fix>
        <bug>58660</bug>: Correct a regression in 8.0.29 caused by the change
        that moved the redirection for context roots from the Mapper to the
        Default Servlet. (markt)
      </fix>
      <fix>
        Fixed potential NPE in <code>HostConfig</code> while deploying an
        application. Issue reported by coverity scan. (violetagg)
      </fix>
      <fix>
        <bug>58655</bug>: Fix an <code> IllegalStateException</code> when
        calling <code>HttpServletResponse.sendRedirect()</code> with the
        <code>RemoteIpFilter</code>. This was caused by trying to correctly
        generate the absolute URI for the redirect. With the fix for
        <bug>56917</bug>, redirects may now be relative making the
        <code>sendRedirect()</code> implementation for the
        <code>RemoteIpFilter</code> much simpler. This also addresses issues
        where the redirect may not have behaved as expected when redirecting
        from http to https to from https to http. (markt)
      </fix>
      <fix>
        <bug>58657</bug>: Exceptions in a Servlet 3.1 <code>ReadListener</code>
        or <code>WriteListener</code> do not need to be immediately fatal to the
        connection. Allow an error response to be written. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Coyote">
    <changelog>
      <fix>
        Improve upgrade context classloader handling by using Context.bind and
        unbind. (remm)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Jasper">
    <changelog>
      <fix>
        <bug>57136#c25</bug>: Change default value of
        <code>quoteAttributeEL</code> setting in Jasper to be <code>true</code>
        for better compatibility with other implementations and older versions
        of Tomcat (8.0.26/7.0.64 and earlier). Add command line option
        <code>-no-quoteAttributeEL</code> in JspC. (kkolinko)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Cluster">
    <changelog>
      <fix>
        Fix potential integer overflow in <code>DeltaSession</code>.
        Reported by coverity scan. (fschumacher)
      </fix>
    </changelog>
  </subsection>
  <subsection name="WebSocket">
    <changelog>
      <add>
        <bug>55006</bug>: The WebSocket client now honors the
        <code>java.net.java.net.ProxySelector</code> configuration (using the
        HTTP type) when establishing WebSocket connections to servers. Based on
        a patch by Niki Dokovski. (markt)
      </add>
      <fix>
        <bug>58624</bug>: Correct a thread safety issue that meant that blocking
        message writes could block indefinitely if the WebSocket connection was
        closed while a message write was in progress. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Web Applications">
    <changelog>
      <fix>
        <bug>58631</bug>: Correct the continuation character use in the Windows
        Service How-To page of the documentation web application. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Tribes">
    <changelog>
      <fix>
        Ensure that the static member is registered to the add suspect list even
        if the static member that is registered to the remove suspect list has
        disappeared. (kfujino)
      </fix>
      <fix>
        Correct the warning log of when the member that is not registered in the
        membership is detected. (kfujino)
      </fix>
      <fix>
        When using a static cluster, add the members that have been cached in
        the membership service to the map members list in order to ensure that
        the map member is a static member. (kfujino)
      </fix>
    </changelog>
  </subsection>
  <subsection name="jdbc-pool">
    <changelog>
      <fix>
        Correct evaluation of system property
        <code>org.apache.tomcat.jdbc.pool.onlyAttemptCurrentClassLoader</code>.
        It was basically ignored before. Reported by coverity scan.
        (fschumacher)
      </fix>
      <fix>
        Fix potential integer overflow in <code>ConnectionPool</code> and
        <code>PooledConnection</code>. Reported by coverity scan. (fschumacher)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Other">
    <changelog>
      <update>
        Update optional Checkstyle library to 6.13. (kkolinko)
      </update>
    </changelog>
  </subsection>
</section>
<section name="Tomcat 8.0.29 (markt)" rtext="2015-11-24">
  <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 or
        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 now an alias for those ciphers that
        require TLSv1 and will not work with SSLv3. <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 internal 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>
        CVE-2014-7810:
        Do not use a privileged code block when evaluating EL expressions
        when running under a security manager, which allowed to bypass code
        restrictions. (markt)
      </fix>
      <fix>
        Fix an 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>
