<?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 to not "pop up" wrt. others).
-->
<section name="Tomcat 8.0.18 (markt)">
  <subsection name="Catalina">
    <changelog>
      <fix>
        <bug>57178</bug>: The CORS filter now treats <code>null</code> as a
        valid origin that matches <code>*</code>. Patch provided by Gregor
        Zurowski. (markt)
      </fix>
      <fix>
        <bug>57425</bug>: Don't add attributes with null value or name to the
        replicated context. (fschumacher)
      </fix>
      <add>
        <bug>57431</bug>: Enable usage of custom class for context creation when
        using embedded tomcat. (fschumacher)
      </add>
      <fix>
        <bug>57446</bug>: Ensure that <code>ServletContextListener</code>s that
        have limited access to <code>ServletContext</code> methods are called
        with the same <code>ServletContext</code> instance for both
        <code>contextInitialized()</code> and <code>contextDestroyed()</code>.
        (markt)
      </fix>
      <fix>
        <bug>57455</bug>: Explicitly block the use of the double-quote character
        when configuring the common, server and shared class loaders since
        double-quote is used to quote values that contain commas. (markt)
      </fix>
      <fix>
        <bug>57461</bug>: When an instance of
        <code>org.apache.catalina.startup.VersionLoggerListener</code> logs the
        result of <code>System.getProperty("java.home")</code> don't report it
        in a manner that makes it look like the <code>JAVA_HOME</code>
        environment variable. (markt)
      </fix>
      <fix>
        <bug>57476</bug>: Ensure the responses written as part of a forward are
        fully written. This fixes a regression in 8.0.15 caused by the fix for
        <bug>57252</bug>. (markt)
      </fix>
      <fix>
        While closing streams for given resources ensure that if an exception
        happens it will be handled properly. Issue is reported by Coverity Scan.
        (violetagg)
      </fix>
      <fix>
        <bug>57481</bug>: Fix <code>IllegalStateException</code> at the end of
        the request when using non-blocking reads with the HTTP BIO connector.
        (markt)
      </fix>
      <fix>
        Change Response to use UEncoder instances with shared safeChars.
        (fschumacher)
      </fix>
      <fix>
        Ensure that when static resources are served from JARs, only static
        resources are served. (markt)
      </fix>
      <add>
        Allow <code>VersionLoggerListener</code> to log all system properties.
        This feature is off by default. (kkolinko)
      </add>
    </changelog>
  </subsection>
  <subsection name="Jasper">
    <changelog>
      <fix>
        Ensure that classes imported via the page directive are made available
        to the EL environment via the ImportHandler. Issue is reported by
        Coverity Scan. (violetagg)
      </fix>
      <fix>
        <bug>57441</bug>: Do not trigger an error when using functions defined
        by lambdas or imported via an ImportHandler in an EL expression in a
        JSP. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Cluster">
    <changelog>
      <fix>
        Fix mbean descriptor of <code>ClusterSingleSignOn</code>. (kfujino)
      </fix>
      <fix>
        <bug>57473</bug>: Add sanity check to FarmWebDeployer's WarWatcher to
        detect suspected incorrect permissions on the watch directory. (schultz)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Tribes">
    <changelog>
      <fix>
        Clarify the handling of Copy message and Copy nodes. (kfujino)
      </fix>
      <fix>
        Copy node does not need to send the entry data. It is enough to send
        only the node information of the entry. (kfujino)
      </fix>
      <fix>
        ReplicatedMap should send the Copy message when replicating. (kfujino)
      </fix>
      <fix>
        Fix behavior of ReplicatedMap when member has disappeared. If map entry
        is primary, rebuild the backup members. If primary node of map entry has
        disappeared, backup node is promoted to primary. (kfujino)
      </fix>
    </changelog>
  </subsection>
</section>
<section name="Tomcat 8.0.17 (markt)" rtext="2015-01-16">
  <subsection name="Catalina">
    <changelog>
      <fix>
        Correct a regression in the previous fix for <bug>57252</bug> that broke
        request listeners for non-async requests that triggered an error that
        was handled by the ErrorReportingValve. (markt/violetagg)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Coyote">
    <changelog>
      <fix>
        Add flushing to send ack in the NIO2 connector. (remm)
      </fix>
    </changelog>
  </subsection>
</section>
<section name="Tomcat 8.0.16 (markt)" rtext="not released">
  <subsection name="Catalina">
    <changelog>
      <fix>
        <bug>57172</bug>: Provide a better error message if something attempts to
        access a resource through a web application class loader that has been
        stopped. (markt/kkolinko)
      </fix>
      <fix>
        <bug>57173</bug>: Revert the fix for <bug>56953</bug> that broke
        annotation scanning in some cases. (markt)
      </fix>
      <fix>
        <bug>57180</bug>: Do not limit the CORS filter to only accepting
        requests that use an HTTP method defined in RFC 7231. (markt)
      </fix>
      <fix>
        <bug>57190</bug>: Fix <code>ServletContext.getContext(String)</code>
        when parallel deployment is used so that the correct ServletContext is
        returned. (markt)
      </fix>
      <fix>
        <bug>57208</bug>: Prevent NPE in JNDI Realm when no results are found
        in a directory context for a user with specified user name. Based on
        a patch provided by Jason McIntosh. (violetagg)
      </fix>
      <add>
        <bug>57209</bug>: Add a new attribute, userSearchAsUser to the JNDI
        Realm. (markt)
      </add>
      <fix>
        <bug>57215</bug>: Ensure that the result of calling
        <code>HttpServletRequest.getContextPath()</code> is neither decoded nor
        normalized as required by the Servlet specification. (markt)
      </fix>
      <fix>
        <bug>57216</bug>: Improve handling of invalid context paths. A context
        path should either be an empty string or start with a
        <code>&apos;/&apos;</code> and do not end with a
        <code>&apos;/&apos;</code>. Invalid context path are automatically
        corrected and a warning is logged. The <code>null</code> and
        <code>&quot;/&quot;</code> values are now correctly changed to
        <code>&quot;&quot;</code>. (markt/kkolinko)
      </fix>
      <fix>
        Update storeconfig with the CredentialHandler element. (remm)
      </fix>
      <fix>
        Correct message that is logged when load-on-startup servlet fails
        to load. It was logging a wrong name. (kkolinko)
      </fix>
      <fix>
        <bug>57239</bug>: Correct several message typos. Includes patch by
        vladk. (kkolinko)
      </fix>
      <fix>
        Fix closing of Jars during annotation scanning. (schultz/kkolinko)
      </fix>
      <fix>
        Fix a concurrency issue in async processing. Ensure that a non-container
        thread can not change the async state until the container thread has
        completed. (markt)
      </fix>
      <fix>
        <bug>57252</bug>: Provide application configured error pages with a
        chance to handle an async error before the built-in error reporting.
        (markt)
      </fix>
      <fix>
        <bug>57281</bug>: Enable non-public Filter and Servlet classes to be
        configured programmatically via the Servlet 3.0 API and then used
        without error when running under a SecurityManager. (markt)
      </fix>
      <fix>
        <bug>57308</bug>: Remove unnecessary calls to
        <code>System.getProperty()</code> where more suitable API calls are
        available. (markt)
      </fix>
      <add>
        Add unit tests for RemoteAddrValve and RemoteHostValve. (rjung)
      </add>
      <add>
        Allow to configure RemoteAddrValve and RemoteHostValve to
        adopt behavior depending on the connector port. Implemented
        by optionally adding the connector port to the string compared
        with the patterns <code>allow</code> and <code>deny</code>. Configured
        using <code>addConnectorPort</code> attribute on valve. (rjung)
      </add>
      <add>
        Optionally trigger authentication instead of denial in
        RemoteAddrValve and RemoteHostValve. This only works in
        combination with <code>preemptiveAuthentication</code>
        on the application context. Configured using
        <code>invalidAuthenticationWhenDeny</code> attribute on valve. (rjung)
      </add>
      <fix>
        Remove the obsolete <code>jndi</code> protocol usage from the scanning
        process performed by StandardJarScanner. (violetagg)
      </fix>
      <fix>
        Prevent file descriptors leak and ensure that files are closed after
        retrieving the last modification time. (violetagg)
      </fix>
      <update>
        Make <code>o.a.catalina.webresources.StandardRoot</code> easier for
        extending. (violetagg)
      </update>
      <fix>
        <bug>57326</bug>: Enable <code>AsyncListener</code> implementations to
        re-register themselves during <code>AsyncListener.onStartAsync</code>.
        (markt)
      </fix>
      <fix>
        <bug>57331</bug>: Allow ExpiresFilter to use "year" as synonym for
        "years" in its configuration. (kkolinko)
      </fix>
      <fix>
        Ensure that if the RewriteValve rewrites a request that subsequent calls
        to <code>HttpServletRequest.getRequestURI()</code> return the undecoded
        URI. (markt)
      </fix>
      <fix>
        Ensure that if the RewriteValve rewrites a request to a non-normalized
        URI that the URI is normalized before the URI is mapped to ensure that
        the correct mapping is applied. (markt)
      </fix>
      <fix>
        Prevent NPEs being logged during post-processing for requests that have
        been re-written by the RewriteValve. (markt)
      </fix>
      <fix>
        Various StoreConfig improvements including removing a dependency on the
        <code>StandardServer</code> implementation, improve consistency of
        behaviour when MBean is not registered and improve error messages when
        accessed via the Manager application. (markt)
      </fix>
      <update>
          Improve SnoopServlet in unit tests. (rjung)
      </update>
      <add>
          Add RequestDescriptor class to unit tests.
          Adjust TestRewriteValve to use RequestDescriptor. (rjung)
      </add>
      <update>
          Add more AJP unit tests. (rjung)
      </update>
      <fix>
        <bug>57363</bug>: Log to stderr if LogManager is unable to read
        configuration files rather than swallowing the exception silently.
        (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Coyote">
    <changelog>
      <fix>
        Allow HTTP upgrade process to complete without data corruption when
        additional content is sent along with the upgrade header. (remm)
      </fix>
      <fix>
        <bug>57187</bug>: Regression handling the special * URL. (remm)
      </fix>
      <fix>
        <bug>57234</bug>: Make SSL protocol filtering to remove insecure
        protocols case insensitive. (markt)
      </fix>
      <fix>
        <bug>57265</bug>: Fix some potential concurrency issues with sendFile
        and the NIO connector. (markt)
      </fix>
      <fix>
        <bug>57324</bug>: If the client uses <code>Expect: 100-continue</code>
        and Tomcat responds with a non-2xx response code, Tomcat also closes the
        connection. If Tomcat knows the connection is going to be closed when
        committing the response, Tomcat will now also send the
        <code>Connection: close</code> response header. (markt)
      </fix>
      <fix>
        <bug>57340</bug>: When using Comet, ensure that Socket and SocketWrapper
        are only returned to their respective caches once on socket close (it is
        possible for multiple threads to call close concurrently). (markt)
      </fix>
      <fix>
        <bug>57347</bug>: AJP response contains wrong status reason phrase
        (rjung)
      </fix>
      <add>
        <bug>57391</bug>: Allow TLS Session Tickets to be disabled when using
        the APR/native HTTP connector. Patch provided by Josiah Purtlebaugh.
        (markt)
      </add>
    </changelog>
  </subsection>
  <subsection name="Jasper">
    <changelog>
      <fix>
        <bug>57142</bug>: As per the clarification from the JSP specification
        maintenance lead, classes and packages imported via the page directive
        must be made available to the EL environment via the ImportHandler.
        (markt)
      </fix>
      <fix>
        <bug>57247</bug>: Correct the default Java source and target versions in
        the JspC usage message to <code>1.7</code> for Java 7. (markt)
      </fix>
      <fix>
        <bug>57309</bug>: Ensure that the current EL Resolver is given an
        opportunity to perform type coercion before applying the default EL
        coercion rules. (markt)
      </fix>
      <fix>
        Improve the calculation of the resource's last-modified, performed by
        JspCompilationContext, in a way to support URLs with protocol different
        than <code>jar:file</code>. (violetagg)
      </fix>
      <fix>
        Fix potential issue with BeanELResolver when running under a security
        manager. Some classes may not be accessible but may have accessible
        interfaces. (markt)
      </fix>
    </changelog>
  </subsection>
  <subsection name="Cluster">
    <changelog>
      <fix>
        In order to enable define in <code>Cluster</code> element,
        <code>ClusterSingleSignOn</code> implements <code>ClusterValve</code>.
        (kfujino)
      </fix>
      <fix>
        <bug>57338</bug>: Improve the ability of the
        <code>ClusterSingleSignOn</code> valve to handle nodes being added and
        removed from the Cluser 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 proprties 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 exanded 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 wether
        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 defintiion,
        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 suggesiton 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>
        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>
        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 WebppClassLoader. 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>
    </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 defintion 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>
