Apache Tomcat Development

Changelog

Tomcat 8.5.24 (markt)

Catalina

When running under Java 9 or later, and the
urlCacheProtection option of the
JreMemoryLeakPreventionListener is enabled, use the API
added in Java 9 to only disable the caching for JAR URL connections.
(markt)

61779: Avoid a NullPointerException when a
nullRegistrationListener is passed to
AuthConfigFactory.getConfigProvider(). Patch provided by
Lazar. (markt)

61780: Only include the default JASPIC registration ID in the
return value for a call to
AuthConfigFactory.getRegistrationIDs() if a
RegistrationContext has been registered using the default
registration ID. Patch provided by Lazar. (markt)

61782: When calling
AuthConfigFactory.doRegisterConfigProvider() and the
requested JASPIC config provider class is found by the web application
class loader, do not attempt to load the class with the class loader
that loaded the JASPIC API. Patch provided by Lazar. (markt)

61783: When calling
AuthConfigFactory.removeRegistration() and the registration
is persistent, it should be removed from the persistent store. Patch
provided by Lazar. (markt)

61784: Correctly handle the case when
AuthConfigFactoryImpl.registerConfigProvider() is called
with a provider name of null. Patch provided by Lazar.
(markt)

61795: Add a property to the Authenticator
implementations to enable a custom JASPIC CallbackHandler
to be specified. Patch provided by Lazar. (markt)

Coyote

Enable ALPN and also, therefore, HTTP/2 for the NIO and NIO2 HTTP
connectors when using the JSSE implementation for TLS when running on
Java 9. (markt)

60762: Add the ability to make changes to the TLS
configuration of a connector at runtime without having to restart the
Connector. (markt)

61568: Avoid a potential SecurityException when
using the NIO2 connector and a new thread is added to the pool. (markt)

61583: Correct a further regression in the fix to enable the
use of Java key stores that contained multiple keys that did not all
have the same password. This fixes PKCS11 key store handling with
multiple keys selected with an alias. (markt)

Web applications

Correct the description of how the CGI servlet maps a request to a
script in the CGI How-To. (markt)

Tribes

Fix incorrect behavior that attempts to resend channel messages more
than the actual setting value of maxRetryAttempts.
(kfujino)

Ensure that the remaining Sender can send channel messages by avoiding
unintended ChannelException caused by comparing the number
of failed members and the number of remaining Senders. (kfujino)

Ensure that remaining SelectionKeys that were not handled by throwing a
ChannelException during SelectionKey processing are
handled. (kfujino)

Other

Improve the fix for 61439 and exclude the JPA, JAX-WS and EJB
annotations completely from the Tomcat distributions. (markt)

Improve handling of endorsed directories. The endorsed directory
mechanism will only be used if the JAVA_ENDORSED_DIRS
system property is explictly set or if
$CATALINA_HOME/endorsed exists. When running on Java 9, any
such attempted use of the endorsed directory mechanism will trigger an
error and Tomcat will fail to start. (rjung)

Refactoring in preparation for Java 9. Refactor to avoid using some
methods that will be deprecated in Java 9 onwards. (markt)

51496: When using the Windows installer, check if the
requested service name already exists and, if it does, prompt the user
to select an alternative service name. Patch provided by Ralph
Plawetzki. (markt)

2017-10-01 Tomcat 8.5.23 (markt)

Catalina

Use the correct path when loading the JVM logging.properties
file for Java 9. (rjung)

Add additional validation to the resource handling required to fix
CVE-2017-12617 on Windows. The checks were being performed elsewhere but
adding them to the resource handling ensures that the checks are always
performed. (markt)

Other

not released Tomcat 8.5.22 (markt)

Catalina

60963: Add ExtractingRoot, a new
WebResourceRoot implementation that extracts JARs to the
work directory for improved performance when deploying packed WAR files.
(markt)

Add an option to reject requests that contain HTTP headers with invalid
(non-token) header names with a 400 response. (markt)

61542: Fix CVE-2017-12617 and prevent JSPs from being
uploaded via a specially crafted request when HTTP PUT was enabled.
(markt)

Implement the requirements of RFC 7230 (and RFC 2616) that HTTP/1.1
requests must include a Host header and any request that
does not must be rejected with a 400 response. (markt)

Implement the requirements of RFC 7230 that any HTTP/1.1 request that
specifies a host in the request line, must specify the same host in the
Host header and that any such request that does not, must
be rejected with a 400 response. This check is optional but disabled by
default. It may be enabled with the
allowHostHeaderMismatch attribute of the Connector. (markt)

Implement the requirements of RFC 7230 that any HTTP/1.1 request that
contains multiple Host headers is rejected with a 400
response. (markt)

Coyote

Add a way to set the property source in embedded mode. (remm)

61557: Correct a further regression in the fix to enable the
use of Java key stores that contain multiple keys that do not all have
the same password. The regression broke support for some FIPS compliant
key stores. (markt)

jdbc-pool

Other

Update fix for 59904 so that values less than zero are accepted
instead of throwing a NegativeArraySizeException. (remm)

2017-09-19 Tomcat 8.5.21 (markt)

Catalina

Before generating an error page in the ErrorReportValve,
check to see if I/O is still permitted for the associated connection
before generating the error page so that the page generation can be
skipped if the page is never going to be sent. (markt)

61189: Add the ability to set environment variables for
individual CGI scripts. Based on a patch by jm009. (markt)

61210: When running under a SecurityManager, do not print a
warning about not being able to read a logging configuration file when
that file does not exist. (markt)

61280: Add RFC 7617 support to the
BasicAuthenticator. Note that the default configuration
does not change the existing behaviour. (markt)

61424: Avoid a possible StackOverflowError when
running under a SecurityManager and using
Subject.doAs(). (markt)

Coyote

The minimum required Tomcat Native version has been increased to 1.2.14.
This version includes a new API needed for correct client certificate
support when using a Java connector with OpenSSL TLS implementation and
support for the SSL_CONF OpenSSL API. (rjung)

Add support for the OpenSSL SSL_CONF API when using
TLS with OpenSSL implementation. It can be used by adding
OpenSSLConf elements underneath SSLHostConfig.
The new element contains a list of OpenSSLConfCmd elements,
each with the attributes name and value.
(rjung)

When using a Java connector in combination with the OpenSSL TLS
implementation, do not configure each SSL connection object via
the OpenSSLEngine. For OpenSSL the SSL object inherits its
settings from the SSL_CTX which we have already configured.
(rjung)

When using JSSE TLS configuration with the OpenSSL implementation and
client certificates: include client CA subjects in the TLS handshake
so that the client can choose an appropriate client certificate to
present. (rjung)

If an invalid option is specified for the
certificateVerification attribute of an
SSLHostConfig element, treat it as required
which is the most secure / restrictive option in addition to reporting
the configuration error. (markt)

Improve the handling of client disconnections during the TLS
renegotiation handshake. (markt)

Prevent exceptions being thrown during normal shutdown of NIO
connections. This enables TLS connections to close cleanly. (markt)

48655: Enable Tomcat to shutdown cleanly when using sendfile,
the APR/native connector and a multi-part download is in progress.
(markt)

58244: Handle the case when OpenSSL resumes a TLS session
using a ticket and the full client certificate chain is not available.
In this case the client certificate without the chain will be presented
to the application. (markt)

Improve the warning message when JSSE and OpenSSL configuration styles
are mixed on the same SSLHostConfig. (markt)

Delay checking that the configured attributes for an
SSLHostConfig instance are consistent with the configured
SSL implementation until Connector start to avoid incorrect
warnings when the SSL implementation changes during initialisation.
(markt)

61451: Correct a regression in the fix to enable the use of
Java key stores that contained multiple keys that did not all have the
same password. The regression broke support for any key store that did
not store keys in PKCS #8 format such as hardware key stores and Windows
key stores. (markt)

WebSocket

60523: Reduce the number of packets used to send WebSocket
messages by not flushing between the header and the payload when the
two are written together. (markt)

61491: When using the permessage-deflate
extension, correctly handle the sending of empty messages after
non-empty messages to avoid the IllegalArgumentException.
(markt)

Web applications

Show connector cipher list in the manager web application in the
correct cipher order. (rjung)

Tribes

To avoid unexpected session timeout notification from backup session,
update the access time when receiving the map member notification
message. (kfujino)

Add member info to the log message when the failure detection check
fails in TcpFailureDetector. (kfujino)

Avoid Ping timeout until the added map member by receiving
MSG_START message is completely started. (kfujino)

When sending a channel message, make sure that the Sender has connected.
(kfujino)

jdbc-pool

61391: Ensure that failed queries are logged if the
SlowQueryReport interceptor is configured to do so and the
connection has been abandoned. Patch provided by Craig Webb. (markt)

61425: Ensure that transaction of idle connection has
terminated when the testWhileIdle is set to
true and defaultAutoCommit is set to
false. Patch provided by WangZheng. (kfujino)

Other

61439: Remove the Java Annotation API classes from
tomcat-embed-core.jar and package them in a separate JAR in the
embedded distribution to provide end users with greater flexibility to
handle potential conflicts with the JRE and/or other JARs. (markt)

61441: Improve the detection of JAVA_HOME by the
daemon.sh script when running on a platform where Java has
been installed from an RPM. (rjung)

Update the packaged version of the Tomcat Native Library to 1.2.14 to
pick up the latest Windows binaries built with APR 1.6.2 and OpenSSL
1.0.2l. (markt)

2017-08-08 Tomcat 8.5.20 (markt)

Catalina

Revert the fix for 49464 since it continued to trigger
regressions. (markt)

Correct a bug in the PushBuilder implementation that
meant push URLs containing %nn sequences were not correctly
decoded. Identified by FindBugs. (markt)

61164: Add support for the %X pattern in the
AccessLogValve that reports the connection status at the
end of the request. Patch provided by Zemian Deng. (markt)

61351: Correctly handle %nn decoding of URL patterns in
web.xml and similar locations that may legitimately contain characters
that are not permitted by RFC 3986. (markt)

61366: Add a new attribute, localDataSource, to
the JDBCStore that allows the Store to be configured to use
a DataSource defined by the web application rather than the default of
using a globally defined DataSource. Patch provided by Jonathan
Horowitz. (markt)

Coyote

61086: Ensure to explicitly signal an empty request body for
HTTP 205 responses. Additional fix to r1795278. Based on a patch
provided by Alexandr Saperov. (violetagg)

61345: Add a server listener that can be used to do system
property replacement from the property source configured in the
digester. (remm)

Add additional logging to record problems that occur while waiting for
the NIO pollers to stop during the Connector stop process. (markt)

Jasper

61364: Ensure that files are closed after detecting encoding
of JSPs so that files do not remain locked by the file system. (markt)

WebSocket

57767: Add support to the WebSocket client for following
redirects when attempting to establish a WebSocket connection. Patch
provided by J Fernandez. (markt)

2017-07-28 Tomcat 8.5.19 (markt)

Catalina

Performance improvements for service loader look-ups (and look-ups of
other class loader resources) when the web application is deployed in a
packed WAR file. (markt)

Correct a further regression in the fix for 49464 that could
cause an byte order mark character to appear at the start of content
included by the DefaultServlet. (markt)

61313: Make the read timeout configurable in the
JNDIRealm and ensure that a read timeout will result in an
attempt to fail over to the alternateURL. Based on patches by Peter
Maloney and Felix Schumacher. (markt)

Web applications

Correct the documentation for how StandardRoot is
configured. (markt)

Other

not released Tomcat 8.5.18 (markt)

Catalina

61232: When log rotation is disabled only one separator will
be used when generating the log file name. For example if the prefix is
catalina. and the suffix is .log then the log
file name will be catalina.log instead of
catalina..log. Patch provided by Katya Stoycheva.
(violetagg)

61264: Correct a regression in the refactoring to use
Charset rather than String to store request
character encoding that prevented getReader() throwing an
UnsupportedEncodingException if the user agent specifies
an unsupported character encoding. (markt)

Correct a regression in the fix for 49464 that could cause an
incorrect Content-Length header to be sent by the
DefaultServlet if the encoding of a static is not
consistent with the encoding of the response. (markt)

Coyote

Enable TLS connectors to use Java key stores that contain multiple keys
where each key has a separate password. Based on a patch by Frank
Taffelt. (markt)

Improve the handling of HTTP/2 stream resets due to excessive headers
when a continuation frame is used. (markt)

Jasper

53031: Add support for the fork option when
compiling JSPs with the Jasper Ant task and javac. (markt)

Other

52791: Add the ability to set the defaults used by the
Windows installer from a configuration file. Patch provided by Sandra
Madden. (markt)

not released Tomcat 8.5.17 (markt)

Catalina

49464: Improve the Default Servlet's handling of static files
when the file encoding is not compatible with the required response
encoding. (markt)

61215: Correctly define addConnectorPort and
invalidAuthenticationWhenDeny in the
mbean-descriptors.xml file for the
org.apache.catalina.valves package so that the attributes
are accessible via JMX. (markt)

Make asynchronous error handling more robust. In particular ensure that
onError() is called for any registered
AsyncListeners after an I/O error on a non-container
thread. (markt)

Additional permission for deleting files is granted to JULI as it is
required by FileHandler when running under a Security Manager. The
thread that cleans the log files is marked as daemon thread.
(violetagg)

61229: Correct a regression in 8.5.15 that broke WebDAV
handling for resources with names that included a &
character. (markt)

Coyote

Restore the ability to configure support for SSLv3. Enabling this
protocol will trigger a warning in the logs since it is known to be
insecure. (markt)

Do not log a warning when a null session is returned for an
OpenSSL based TLS session since this is expected when session tickets
are enabled. (markt)

When the access log valve logs a TLS related request attribute and the
NIO2 connector is used with OpenSSL, ensure that the TLS attributes are
available to the access log valve when the connection is closing.
(markt)

To ease migration from 8.0.x to 8.5.x, if the HTTP or AJP BIO connector
is explicitly configured, rather than failing to start the connector
because BIO has been removed, automatically switch to NIO and continue.
A warning will be logged to alert the user to the switch. (markt)

Web applications

Remove references to the Loader attribute
searchExternalFirst from the documentation since the
attribute is no longer supported. (markt)

61105: Add a new JULI FileHandler configuration for
specifying the maximum number of days to keep the log files.
(violetagg)

61125: Ensure that WarURLConnection returns the
correct value for calls to getLastModified() as this is
required for the correct detection of JSP modifications when the JSP is
packaged in a WAR file. (markt)

Improve the SSLValve so it is able to handle client
certificate headers from Nginx. Based on a patch by Lucas Ventura Carro.
(markt)

61134: Do not use '[' and ']' symbols around substituted
text fragments when generating the default error pages. Patch provided
by Katya Todorova. (violetagg)

61154: Allow the Manager and Host Manager web applications to
start by default when running under a security manager. This was
accomplished by adding a custom permission,
org.apache.catalina.security.DeployXmlPermission, that
permits an application to use a META-INF/context.xml file
and then granting that permission to the Manager and Host Manager.
(markt)

A new configuration property crawlerIps is added to the
o.a.catalina.valves.CrawlerSessionManagerValve. Using this
property one can specify a regular expression that will be used to
identify crawlers based on their IP address. Based on a patch provided
by Tetradeus. (violetagg)

61180: Log a warning message rather than an information
message if it takes more than 100ms to initialised a
SecureRandom instance for a web application to use to
generate session identifiers. Patch provided by Piotr Chlebda. (markt)

61185: When an asynchronous request is dispatched via
AsyncContext.dispatch() ensure that
getRequestURI() for the dispatched request matches that of
the original request. (markt)

61197: Ensure that the charset name used in the
Content-Type header has exactly the same form as that
provided by the application. This reverts a behavioural change in
8.5.15 that caused problems for some clients. (markt)

61201: Ensure that the SCRIPT_NAME environment
variable for CGI executables is populated in a consistent way regardless
of how the CGI servlet is mapped to a request. (markt)

2017-05-10 Tomcat 8.5.15 (markt)

General

Allow to exclude JUnit test classes using the build property
test.exclude and document the property in
BUILDING.txt. (rjung)

Catalina

Review those places where Tomcat re-encodes a URI or URI component and
ensure that that correct encoding (path differs from query string) is
applied and that the encoding is applied consistently. (markt)

Avoid a NullPointerException when reading attributes for a
initialised HTTP connector where TLS is enabled. (markt)

Always quote the hostName of an SSLHostConfig
element when using it as part of the JMX object name to avoid errors that
prevent the associated TLS connector from starting if a wild card
hostName is configured (because * is a
reserved character for JMX object names). (markt)

Switch to using Charset rather than String to
store encoding settings (including for configuration and for the
Content-Type header) to reduce the number of places the
associated Charset needs to be looked up. (markt)

Use a more reliable mechanism for the DefaultServlet when
determining if the current request is for custom error page or not.
(markt)

Ensure that when the Default or WebDAV servlets process an error
dispatch that the error resource is processed via the
doGet() method irrespective of the method used for the
original request that triggered the error. (markt)

If a static custom error page is specified that does not exist or cannot
be read, ensure that the intended error status is returned rather than a
404 or 403. (markt)

When the WebDAV servlet is configured and an error dispatch is made to a
custom error page located below WEB-INF, ensure that the
target error page is displayed rather than a 404 response. (markt)

Correct the logic that selects the encoding to use to decode the query
string in the SSIServletExternalResolver so that the
useBodyEncodingForURI attribute of the
Connector is correctly taken into account. (markt)

Within the Expires filter, make the content type value specified with the
ExpiresByType parameter, case insensitive. (markt)

Coyote

When a TrustManager is configured that does not support
certificateVerificationDepth only log a warning about that
lack of support when certificateVerificationDepth has been
explicitly set. (markt)

Web Applications

Other

Modify the Ant build script used to publish to a Maven repository so
that it no longer requires artifacts to be GPG signed. This is make it
possible for the CI system to upload snapshot builds to the ASF Maven
repository. (markt)

Update the early access Servlet 4.0 API implementation to reflect the
change in method name from getPushBuilder() to
newPushBuilder(). (markt)

Correct a regression in the X to comma refactoring that broke JMX
operations that take parameters. (markt)

Avoid a NullPointerException when reading attributes for a
running HTTP connector where TLS is not enabled. (markt)

60940: Improve the handling of the META-INF/ and
META-INF/MANIFEST.MF entries for Jar files located in
/WEB-INF/lib when running a web application from a packed
WAR file. (markt)

Pre-load the ExceptionUtils class. Since the class is used
extensively in error handling, it is prudent to pre-load it to avoid any
failure to load this class masking the true problem during error
handling. (markt)

Avoid potential NullPointerExceptions related to access
logging during shutdown, some of which have been observed when running
the unit tests. (markt)

When there is no javax.servlet.WriteListener registered
then a call to javax.servlet.ServletOutputStream#isReady
will return false instead of throwing
IllegalStateException. (violetagg)

When there is no javax.servlet.ReadListener registered
then a call to javax.servlet.ServletInputStream#isReady
will return false instead of throwing
IllegalStateException. (violetagg)

2017-03-30 Tomcat 8.5.13 (markt)

Catalina

60876: Ensure that Set-Cookie headers generated
by the Rfc6265CookieProcessor are aligned with the
specification. Patch provided by Jim Griswold. (markt)

60882: Fix a NullPointerException when obtaining
a RequestDispatcher for a request that will not have any
pathInfo associated with it. This was a regression in the changes in
8.5.12 for the Servlet 4.0 API early preview changes. (markt)

Align PushBuilder API with changes from Servlet expert
group. (markt)

Refactor the various implementations of X to comma separated list to a
single utility class and update the code to use the new utility class.
(markt)

60911: Ensure NPE will not be thrown when looking for SSL
session ID. Based on a patch by Didier Gutacker. (violetagg)

Coyote

60362: Add a new Connector configuration
sendReasonPhrase. When this attribute is set to
true, a reason phrase will be sent with the response.
By default a reason phrase will not be sent. This option is deprecated
and is not available in Tomcat 9. (violetagg)

Fix HTTP/2 incorrect input unblocking on EOF. (remm)

Close the connection sooner if an event occurs for a current connection
that is not consistent with the current state of that connection.
(markt)

Speed up shutdown when using multiple acceptor threads by ensuring that
the code that unlocks the acceptor threads correctly handles the case
where there are multiple threads. (markt)

60852: Correctly spell compressible when used in
configuration attributes and internal code. Based on a patch by Michael
Osipov. (markt)

60900: Avoid a NullPointerException in the APR
Poller if a connection is closed at the same time as new data arrives on
that connection. (markt)

Improve HPACK specification compliance by fixing some test failures
reported by the h2spec tool written by Moto Ishizawa. (markt)

Improve HTTP/2 specification compliance by fixing some test failures
reported by the h2spec tool written by Moto Ishizawa. (markt)

60918: Fix sendfile processing error that could lead to
subsequent requests experiencing an IllegalStateException.
(markt)

Improve sendfile handling when requests are pipelined. (markt)

Jasper

Improve the error handling for simple tags to ensure that the tag is
released and destroyed once used. (remm, violetagg)

60844: Correctly handle the error when fewer parameter values
than required by the method are used to invoke an EL method expression.
Patch provided by Daniel Gray. (markt)

jdbc-pool

60764: Implement equals() and
hashCode() in the StatementFacade in order to
enable these methods to be called on the closed statements if any
statement proxy is set. This behavior can be changed with
useStatementFacade attribute. (kfujino)

Other

Refactor the build script and the NSIS installer script so that either
NSIS 2.x or NSIS 3.x can be used to build the installer. This is
primarily to re-enable building the installer on the Linux based CI
system where the combination of NSIS 3.x and wine leads to failed
installer builds. (markt)

2017-03-13 Tomcat 8.5.12 (markt)

Catalina

60469: Refactor RealmBase for better code re-use
when implementing Realms that use a custom Principal.
(markt)

60490: Various formatting and layout improvements for the
ErrorReportValve. Patch provided by Michael Osipov. (markt)

60596: Improve performance of DefaultServlet when sendfile
feature is disabled on connector. (kkolinko)

Make it easier for sub-classes of Tomcat to modify the
default web.xml settings by over-riding
getDefaultWebXmlListener(). Patch provided by Aaron
Anderson. (markt)

Reduce the contention in the default InstanceManager
implementation when multiple threads are managing objects and need to
reference the annotation cache. (markt)

60674: Remove final marker from
CorsFilter to enable sub-classing. (markt)

60688: Update the internal fork of Apache Commons BCEL to
r1782855 to add early access Java 9 support to the annotation scanning
code. (markt)

60694: Prevent NPE during authentication when no JASPIC
AuthConfigFactory is available. (markt)

60697: When HTTP TRACE requests are disabled on the
Connector, ensure that the HTTP OPTIONS response from custom servlets
does not include TRACE in the returned Allow header. (markt)

60718: Improve error handling for asynchronous processing and
correct a number of cases where the requestDestroyed()
event was not being fired and an entry wasn't being made in the access
logs. (markt)

The default JASPIC AuthConfigFactory now correctly notifies
registered RegistrationListeners when a new
AuthConfigProvider is registered. (markt)

Improve the performance of AuthenticatorBase when there is
no JASPIC configuration available. (violetagg)

When HTTP TRACE requests are disabled on the Connector, ensure that the
HTTP OPTIONS response from the WebDAV servlet does not include
TRACE in the returned Allow header. (markt)

60722: Take account of the
dispatchersUseEncodedPaths setting on the current
Context when generating paths for dispatches triggered
by AsyncContext.dispatch(). (markt)

60728: Make the separator Tomcat uses in the Tomcat specific
war:file:... URL protocol customizable via a system
property. The separator is equivalent to the use of the !
character in jar:file:... URLs. The default separator of
* remains unchanged. (markt)

Update the org.apache.catalina.servlet4preview package that
can be used to gain early access to Servlet 4.0 features to align with
the latest proposals from the Servlet 4.0 expert group. This includes
updates to the new Servlet mapping API, new methods on the
ServletContext to make the available API more equivalent to
the deployment descriptor, updates to the HTTP push API and the ability
to set default request and response character encoding per web
application. Note that the Servlet 4.0 API is still a work in progress
and further changes are likely. (markt)

60798: Correct a bug in the handling of JARs in unpacked WARs
that meant multiple attempts to read the same entry from a JAR in
succession would fail for the second and subsequent attempts. (markt)

60808: Ensure that the Map returned by
ServletRequest.getParameterMap() is fully immutable. Based
on a patch provided by woosan. (markt)

60824: Correctly cache the Subject in the
session - if there is a session - when running under a
SecurityManager. Patch provided by Jan Engehausen. (markt)

Ensure request and response facades are used when firing application
listeners. (markt/remm)

Coyote

Improve handling of case when an HTTP/2 client sends more data that is
subject to flow control than the current window size allows. (markt)

59807: Provide a better error message when there is no
SSLHostConfig defined with a hostName that
matches the defaultSSLHostConfigName for the associated
Connector. (markt)

Include the value of SslHostConfig.truststoreAlgorithm when
warning that the algorithm does not support the
certificateVerificationDepth configuration option. (markt)

Ensure that executor thread pools used with connectors pre-start the
configured minimum number of idle threads. (markt)

60594: Allow some invalid characters that were recently
restricted to be processed in requests by using the system property
tomcat.util.http.parser.HttpParser.requestTargetAllow.
(csutherl)

60627: Modify the Rfc6265CookieProcessor so that
in addition to cookie headers that start with an explicit RFC 2109
$Version=1, cookies that start with $Version=0
are also parsed as RFC 2109 cookies. (markt)

60716: Add a new JSSE specific attribute,
revocationEnabled, to SSLHostConfig to permit
JSSE provider revocation checks to be enabled when no
certificateRevocationListFile has been configured. The
expectation is that configuration will be performed via a JSSE provider
specific mechanisms. (markt)

Modify the cookie header generated by the
Rfc6265CookieProcessor so it always sends an
Expires attribute as well as a Max-Age
attribute to avoid problems with Microsoft browsers that do not support
the Max-Age attribute. (markt)

60761: Expose a protected getter and setter for
NioEndpoint.stopLatch to make the class easier to extend.
(markt)

Jasper

Follow up to the fix for 58178. When creating the
ELContext for a tag file, ensure that any registered
ELContextListeners are fired. (markt)

Refactor code generated for JSPs to reduce the size of the code required
for tags. (markt)

60769: Correct a regression in the XML encoding detection
refactoring carried out for 8.5.10 that incorrectly always used the
detected BOM encoding in preference to any encoding specified in the
prolog. (markt)

Update to the Eclipse JDT Compiler 4.6.1. (markt)

Cluster

Make the accessTimeout configurable in
BackupManager and ClusterSingleSignOn. The
accessTimeout is used as a timeout period for PING in
replication map. (kfujino)

60806: To avoid ClassNotFoundException, make
sure that the web application class loader is passed to
ReplicatedContext. (kfujino)

2017-01-16 Tomcat 8.5.11 (markt)

Catalina

Coyote

Ensure UpgradeProcessor instances associated with closed connections are
removed from the map of current connections to Processors. (markt)

Remove a workaround for a problem previously reported with WebSocket,
TLS and APR that treated some error conditions as not errors. The
original problem cannot be reproduced with the current code and the
work-around is now causing problems. (markt)

Jasper

60497: Follow up fix using a better variable name for the
tag reuse flag. (remm)

Coyote

Expand the search process for a server certificate when OpenSSL is used
with a JSSE connector and an explicit alias has not been configured.
(markt)

60450: Improve the selection algorithm for the default trust
store type for a TLS Virtual Host. In particular, don't use
PKCS12 as a default trust store type. Better document how
the default trust store type is selected for a TLS virtual host. (markt)

60395: Log when an Authenticator passes an
incomplete GSSContext to a Realm since it indicates a bug
in the Authenticator. Patch provided by Michael Osipov.
(markt)

60400: When expanding the buffer used for reading the
request body, ensure the read position will be restored to the
original one. (violetagg)

60410: Ensure that multiple calls to
JarInputStreamWrapper#close() do not incorrectly trigger
the closure of the underlying JAR or WAR file. (markt)

60411: Implement support in the RewriteValve for
symbolic names to specify the redirect code to use when returning a
redirect response to the user agent. Patch provided by Michael Osipov.
(markt)

60413: In the RewriteValve write empty capture
groups as the empty string rather than as "null"
when generating the re-written URL. Based on a patch by Michael Osipov.
(markt)

Coyote

60372: Ensure the response headers' buffer limit is reset to
the capacity of this buffer when IOException occurs while writing the
headers to the socket. (violetagg)

Ensure that the availability of configured upgrade protocols that
require ALPN is correctly reported during Tomcat start. (markt)

60386: Implement a more sophisticated pruning algorithm for
removing closed streams from the priority tree to ensure that the tree
does not grow too large. (markt)

60409: When unable to complete sendfile request, ensure the
Processor will be added to the cache only once. (markt/violetagg)

Ensure that the endpoint is able to unlock the acceptor thread during
shutdown if the endpoint is configured to listen to any local address
of a specific type such as 0.0.0.0 or ::.
(markt)

Add a new configuration option, ipv6v6only to the APR
connectors that allows them to be configure to only accept IPv6
connections when configured with an IPv6 address rather than the
default which is to accept IPv4 connections as well if the operating
system uses a dual network stack. (markt)

Improve the logic that unlocks the acceptor thread so a better choice is
made for the address to connect to when a connector is configured for
any local port. This reduces the likelihood of the unlock failing.
(markt)

When configuring the JMX remote listener, specify the allowed types for
the credentials. (markt)

Coyote

Correct the HPACK header table size configuration that transposed the
client and server table sizes when creating the encoder and decoder.
(markt)

Don't continue to process an HTTP/2 stream if it is reset during header
parsing. (markt)

HTTP/2 uses separate headers for each Cookie. As required by RFC 7540,
merge these into a single Cookie header before processing continues.
(markt)

Align the HTTP/2 implementation with the HTTP/1.1 implementation and
return a 500 response when an unhandled exception occurs during request
processing. (markt)

Correct the HTTP header parser so that DEL is not treated as a valid
token character. (markt)

Add checks around the handling of HTTP/2 pseudo headers. (markt)

Add support for trailer headers to the HTTP/2 implementation. (markt)

60232: When processing headers for an HTTP/2 stream, ensure
that the read buffer is large enough for the header being processed.
(markt)

Add configuration options to the HTTP/2 implementation to control the
maximum number of headers allowed, the maximum size of headers allowed,
the maximum number of trailer headers allowed, the maximum size of
trailer headers allowed and the maximum number of cookies allowed.
(markt)

Correctly differentiate between sending and receiving a reset frame when
tracking the state of an HTTP/2 stream. (markt)

60319: When using an Executor, disconnect it from the
Connector attributes maxThreads,
minSpareThreads and threadPriority to enable
the configuration settings to be consistently reported. These Connector
attributes will be reported as -1 when an Executor is in
use. The values used by the executor may be set and obtained via the
Executor. (markt)

If an I/O error occurs during async processing on a non-container
thread, ensure that the onError() event is triggered.
(markt)

Improve detection of I/O errors during async processing on non-container
threads and trigger async error handling when they are detected. (markt)

Add additional checks for valid characters to the HTTP request line
parsing so invalid request lines are rejected sooner. (markt)

Other

Remove classes from tomcat-util-scan.jar that are duplicates of those in
tomcat-util.jar. (markt)

2016-10-10 Tomcat 8.5.6 (markt)

Catalina

59961: Add an option to the StandardJarScanner
to control whether or not JAR Manifests are scanned for additional
class path entries. (markt)

60013: Refactor the previous fix to align the behaviour of
the Rewrite Valve with mod_rewrite. As part of this, provide an
implementation for the B and NE flags and
improve the handling for the QSA flag. Includes multiple
test cases by Santhana Preethiand a patch by Tiago Oliveira. (markt)

60087: Refactor the web resources handling to use the Tomcat
specific war:file:... URL protocol to refer to WAR files
and their contents rather than the standard jar:file:...
form since some components of the JRE, such as JAR verification, give
unexpected results when the standard form is used. A side-effect of the
refactoring is that when using packed WARs, it is now possible to
reference a WAR and/or specific JARs within a WAR in the security policy
file used when running under a SecurityManager. (markt)

60116: Fix a problem with the rewrite valve that caused back
references evaluated in conditions to be forced to lower case when using
the NC flag. (markt)

Ensure Digester.useContextClassLoader is considered in
case the class loader is used. (violetagg)

60117: Ensure that the name of LogLevel is
localized when using OneLineFormatter. Patch provided by
Tatsuya Bessho. (kfujino)

60138: Fix the SSLHostConfig so that the
protocols attribute is limited to the protocols supported
by the current JSSE implementation rather than the default protocols
used by the implementation. (markt)

60146: Improve performance for resource retrieval by making
calls to WebResource.getInputStream() trigger caching if the resource is
small enough. Patch provided by mohitchugh. (markt)

60151: Improve the exception error messages when a
ResourceLink fails to specify the type, specifies an
unknown type or specifies the wrong type. (markt)

60167: Ignore empty lines in /etc/passwd files
when using the PasswdUserDatabase. (markt)

When starting web resources, ensure that class resources are only
started once. (markt)

Improve the access checks for linked global resources to handle the case
where the current class loader is a child of the web application class
loader. (markt)

60196: Ensure that the isMandatory flag is
correctly set when using JASPIC authentication. (markt)

60199: Log a warning if deserialization issues prevent a
session attribute from being loaded. (markt)

60208: When using RFC6265 compliant cookies, the
/ character should not be allowed in a cookie name since
the RFC6265 will drop such cookies as invalid. (markt)

Coyote

Refactor the code that implements the requirement that a call to
complete() or dispatch() made from a
non-container thread before the container initiated thread that called
startAsync() completes must be delayed until the container
initiated thread has completed. Rather than implementing this by
blocking the non-container thread, extend the internal state machine to
track this. This removes the possibility that blocking the non-container
thread could trigger a deadlock. (markt)

Fail earlier if the client closes the connection during SNI processing.
(markt)

60123: Avoid potential threading issues that could cause
excessively large vales to be returned for the processing time of
a current request. (markt)

Jasper

Web applications

Expand the documentation for the nested elements within a
Resources element to clarify the behaviour of different
configuration options with respect to the order in which resources are
searched. (markt)

Add an example of using the classesToInitialize attribute
of the JreMemoryLeakPreventionListener to the documentation
web application. Based on a patch by Cris Berneburg. (markt)

60192: Correct a typo in the status output of the Manager
application. Patch provided by Radhakrishna Pemmasani. (markt)

jdbc-pool

Notify jmx when returning the connection that has been marked suspect.
(kfujino)

Ensure that the POOL_EMPTY notification has been added to
the jmx notification types. (kfujino)

60099: Ensure that use all method arguments as a cache key
when using StatementCache. (kfujino)

Other

Update the download location for Objenesis. (violetagg)

60164: Replace log4j-core*.jar with
log4j-web*.jar since it is log4j-web*.jar that
contains the ServletContainerInitializer. (markt)

Add documentation to the bin/catalina.bat script to remind users that
environment variables don't affect the configuration of Tomcat when
run as a Windows Service. Based upon a documentation patch by
James H.H. Lampert. (schultz)

Update the packaged version of the Tomcat Native Library to 1.2.10 to
pick up the latest Windows binaries built with OpenSSL 1.0.2j. (markt)

2016-09-05 Tomcat 8.5.5 (markt)

Catalina

18500: Add limited support for wildcard host names and host
aliases. Names of the form *.domainname are now permitted.
Note that an exact host name match takes precedence over a wild card
host name match. (markt)

59813: Ensure that circular relations of the Class-Path
attribute from JAR manifests will be processed correctly. (violetagg)

Ensure that reading the singleThreadModel attribute of a
StandardWrapper via JMX does not trigger initialisation of
the associated servlet. With some frameworks this can trigger an
unexpected initialisation thread and if initialisation is not thread-safe
the initialisation can then fail. (markt)

Compatibility with rewrite from httpd for non existing headers.
(jfclere)

By default, treat paths used to obtain a request dispatcher as encoded.
This behaviour can be changed per web application via the
dispatchersUseEncodedPaths attribute of the Context.
(markt)

59839: Apply roleSearchAsUser to all nested searches
in JNDIRealm. (fschumacher)

Provide a mechanism that enables the container to check if a component
(typically a web application) has been granted a given permission when
running under a SecurityManager without the current execution stack
having to have passed through the component. Use this new mechanism to
extend SecurityManager protection to the system property replacement
feature of the digester. (markt)

When retrieving an object via a ResourceLink, ensure that
the object obtained is of the expected type. (markt)

59823: Ensure that JASPIC configuration is taken into account
when calling HttpServletRequest.authenticate(). (markt)

59862: Allow nested jar files scanning to be filtered with
the system property
tomcat.util.scan.StandardJarScanFilter.jarsToSkip. Patch
is provided by Terence Bandoian. (violetagg)

59866: When scanning WEB-INF/classes for
annotations, don't scan the contents of
WEB-INF/classes/META-INF (if present) since classes will
never be loaded from that location. (markt)

59888: Correctly handle tabs and spaces in quoted version one
cookies when using the Rfc6265CookieProcessor. (markt)

59912: Fix an edge case in input stream handling where an
IOException could be thrown when reading a POST body.
(markt)

59913: Correct a regression introduced with the support for
the Servlet 4 HttpServletRequest.getMapping() API that
caused the attributes for forwarded requests to be lost if requested
from within a subsequent include. (markt)

59966: Do not start the web application if the error page
configuration in web.xml is invalid. (markt)

Switch the CGI servlet to the standard logging mechanism and remove
support for the debug attribute. (markt)

60012: Improvements in the log messages. Based on
suggestions by Nemo Chen. (violetagg)

Changes to the allowLinking attribute of a
StandardRoot instance now invalidate the cache if caching
is enabled. (markt)

Add a new initialisation parameter, envHttpHeaders, to
the CGI Servlet to mitigate httpoxy
(CVE-2016-5388) by default and to provide a mechanism that can be
used to mitigate any future, similar issues. (markt)

When adding and removing ResourceLinks dynamically, ensure
that the global resource is only visible via the
ResourceLinkFactory when it is meant to be. (markt)

60008: When processing CORs requests, treat any origin with a
URI scheme of file as a valid origin. (markt)

Improve handling of exceptions during a Lifecycle events triggered by a
state transition. The exception is now caught and the component is now
placed into the FAILED state. (markt)

60022: Improve handling when a WAR file and/or the associated
exploded directory are symlinked into the appBase. (markt)

Fix a file descriptor leak when reading the global web.xml. (markt)

Consistently decode URL patterns provided via web.xml using the encoding
of the web.xml file where specified or UTF-8 where no explicit encoding
is specified. (markt)

Make timing attacks against the Realm implementations harder. (schultz)

A number of the JRE memory leaks addressed by the
JreMemoryLeakPreventionListener have been fixed in Java 9
so the associated protection is now disabled when running on Java 9
onwards. (markt)

Coyote

Correct a regression in refactoring to enable injection of custom
keystores that broke the automatic conversion of OpenSSL style PEM
key and certificate files for use with JSSE TLS connectors. (markt)

59910: Don't hardcode key alias value to "tomcat" for JSSE.
When using a keystore, OpenSSL will still default to it. (remm)

59904: Add a limit (default 200) for the number of cookies
allowed per request. Based on a patch by gehui. (markt)

59925: Correct regression in r1628368 and ensure that HTTP
separators are handled as configured in the
LegacyCookieProcessor. Patch provided by Kyohei Nakamura.
(markt)

59950: Correct log message when reporting that the current
number of HTTP/2 streams for a connection could not be pruned to below
the limit. (markt)

Ensure that Semaphore.release is called in all cases. Even
when there is an exception. (violetagg)

60030: Correct a potential infinite loop in the SNI parsing
code triggered by failing to handle an end of stream condition. (markt)

Small logging optimization in the Rfc6265CookieProcessor.
Patch provided by Svetlin Zarev. (markt)

OpenSSL now disables 3DES by default so reflect this when using OpenSSL
syntax to select ciphers. (markt)

Use the proper ERROR socket status code for async errors with NIO2.
(remm)

60035: Fix a potential connection leak if the client drops a
TLS connection before the handshake completes. (markt)

Refactor the JSSE client certificate validation so that the
effectiveness of the certificateVerificationDepth
configuration attribute does not depend on the presence of a certificate
revocation list. (markt)

Log a warning at start up if a JSSE TLS connector is configured with
a trusted certificate that is either not yet valid or has expired.
(markt)

Jasper

When writing out a full web.xml file with JspC ensure that the encoding
used in the XML prolog matches the encoding used to write the contents
of the file. (markt)

Improve the error handling for custom tags to ensure that the tag is
returned to the pool or released and destroyed once used. (markt)

Update the internal fork of Commons FileUpload to afdedc9. This pulls in
a fix to improve the performance with large multipart boundaries.
(markt)

2016-07-12 Tomcat 8.5.4 (markt)

Catalina

57705: Add debug logging for requests denied by the remote
host and remote address valves and filters. Based on a patch by Graham
Leggett. (markt)

Correct a regression in the fix for 58588 that removed the
entire org.apache.juli package from the embedded JARs
rendering them unusable. (markt)

59399: Add a new option to the Realm implementations that
ship with Tomcat that allows the HTTP status code used for HTTP -> HTTPS
redirects to be controlled per Realm. (markt)

Change the default of the
sessionCookiePathUsesTrailingSlash attribute of the
Context element to false since the problems
caused when a Servlet is mapped to /* are more significant
than the security risk of not enabling this option by default. (markt)

Do not attempt to start web resources during a web application's
initialisation phase since the web application is not fully configured
at that point and the web resources may not be correctly configured.
(markt)

59708: Modify the LockOutRealm logic. Valid authentication
attempts during the lock out period will no longer reset the lock out
timer to zero. (markt)

Improve error handling around user code prior to calling
InstanceManager.destroy() to ensure that the method is
executed. (markt)

Coyote

Refactor the certificate keystore and trust store generation to make it
easier for embedded users to inject their own key stores. (markt)

Add a maxConcurrentStreamExecution on the HTTP/2
protocol handler to allow restricting the amount of concurrent stream
that are being executed in a single connection. The default is to
not limit it. (remm)

Correct a problem with ServletRequest.getServerPort() for
secure HTTP/2 connections that meant an incorrect value was returned when
using the default port. (markt)

Improve error handling around user code prior to calling
InstanceManager.destroy() to ensure that the method is
executed. (markt)

Jasper

Improve error handling around user code prior to calling
InstanceManager.destroy() to ensure that the method is
executed. (markt)

WebSocket

Now the WebSocket implementation is not built directly on top of the
Servlet API and can use Tomcat internals, there is no need for the
dedicated WebSocket Executor. It has been replaced by the use of the
Connector/Endpoint provided Executor. (markt)

Improve error handling around user code prior to calling
InstanceManager.destroy() to ensure that the method is
executed. (markt)

Web Applications

Do not log an additional case of IOExceptions in the
error handler for the Drawboard WebSocket example when the root cause is
the client disconnecting since the logs add no value. (markt)

59642: Mention the localDataSource in the
DataSourceRealm section of the Realm How-To. (markt)

59672: Update the security considerations page of the
documentation web application to take account of the fact that the
Manager and HostManager applications now have a
RemoteAddrValve configured by default. (markt)

Follow-up to the fix for 59399. Ensure that the new attribute
transportGuaranteeRedirectStatus is documented for all
Realms. Also document the NullRealm and
when it is automatically created for an Engine. (markt)

Fix the description of maxAge attribute in jdbc-pool doc.
This attribute works both when a connection is returned and when a
connection is borrowed. (kfujino)

59774: Correct the prefix values in the
documented examples for configuring the AccessLogValve.
Patch provided by Mike Noordermeer. (markt)

Extras

58588: Remove the JULI extras package from the distribution.
It was only useful for switching Tomcat's internal logging to log4j
1.2.x and that version of log4j is no longer supported. No additional
Tomcat code is required if switching Tomcat's internal logging to log
via log4j 2.x. (markt)

Tribes

Add log message when the ping has timed-out. (kfujino)

If the ping message has been received at the
AbstractReplicatedMap#leftOver method, ensure that notify
the member is alive than ignore it. (kfujino)

Other

Use the mirror network rather than the ASF master site to download the
current ASF dependencies. (markt)

Update the packaged version of the Tomcat Native Library to 1.2.8 to
pick up the latest fixes and make 1.2.8 the minimum recommended version.
(markt)

Use UTF-8 with a standard prolog for all XML files. (markt)

2016-06-13 Tomcat 8.5.3 (markt)

Catalina

RMI Target related memory leaks are avoidable which makes them an
application bug that needs to be fixed rather than a JRE bug to work
around. Therefore, start logging RMI Target related memory leaks on web
application stop. Add an option that controls if the check for these
leaks is made. Log a warning if running on Java 9 with this check
enabled but without the command line option it requires. (markt)

Ensure NPE will not be thrown during deployment when scanning jar files
without MANIFEST.MF file. (violetagg)

Remove the clearReferencesStatic option from
StandardContext. It was known to cause problems with some
libraries (such as log4j) and was only linked to suspected memory leaks
rather than known memory leaks. It had been disabled by default with no
increase in the reports of memory leaks for some time. (markt)

59604: Correct the assumption made in the URL decoding that
the default platform encoding is always compatible with ISO-8859-1. This
assumption is not always valid, e.g. on z/OS. (markt)

59608: Skip over any invalid Class-Path attribute
from JAR manifests. Log errors at debug level due to many bad libraries.
(remm)

Fix error message when failed to register MBean. (kfujino)

59655: Configure the cookie name validation to use RFC6265 rules by default to
align it with the default cookie parser. Document the impact system properties have on
cookie name validation. (mark)

Coyote

Ensure that requests with HTTP method names that are not tokens (as
required by RFC 7231) are rejected with a 400 response. (markt)

When an asynchronous request is processed by the AJP connector, ensure
that request processing has fully completed before starting the next
request. (markt)

Improve handling of HTTP/2 stream resets. (markt)

58750: The HTTP Server header is no longer set by default. A
Server header may be configured by setting the server
attribute on the Connector. A new Connector
attribute, serverRemoveAppProvidedValues may be used to
remove any Server header set by a web application. (markt)

Modify the handling of read/write timeouts so that the appropriate error
handling (ReadListener.onError(),
WriteListener.onError() or
AsyncListener.onError()) is called. (markt)

If an async dispatch results in the completion of request processing,
ensure that any remaining request body is swallowed before starting the
processing of the next request else the remaining body may be read as the
start of the next request leading to a 400 response. (markt)

58626: Add support for a new environment variable
(USE_NOHUP) that causes nohup to be used when
starting Tomcat. It is disabled by default except on HP-UX where it is
enabled by default since it is required when starting Tomcat at boot on
HP-UX. (markt)

2016-05-16 Tomcat 8.5.2 (markt)

Catalina

Ensure that annotated web components packed in web fragments will be
processed when unpackWARs is enabled. (violetagg)

not released Tomcat 8.5.1 (markt)

Catalina

59206: Ensure NPE will not be thrown by
o.a.tomcat.util.file.ConfigFileLoader when
catalina.base is not specified. (violetagg)

59217: Remove duplication in the recycling of the path in
o.a.tomcat.util.http.ServerCookie. Patch is provided by
Kyohei Nakamura. (violetagg)

Ensure that javax.servlet.ServletRequest and
javax.servlet.ServletResponse provided during
javax.servlet.AsyncListener registration are made
available via javax.servlet.AsyncEvent.getSuppliedRequest
and javax.servlet.AsyncEvent.getSuppliedResponse
(violetagg)

59219: Ensure AsyncListener.onError() is called
if an Exception is thrown during async processing. (markt)

59220: Ensure that AsyncListener.onComplete() is
called if the async request times out and the response is already
committed. (markt)

59226: Process the Class-Path attribute from
JAR manifests for JARs on the class path excluding JARs packaged in
WEB-INF/lib. (markt)

59256: slf4j-taglib*.jar should not be excluded
from the standard JAR scanning by default. (violetagg)

Clarify in the log message that specifying both urlPatterns and value
attributes in WebServlet and WebFilter annotations is not allowed.
(violetagg)

Ensure the exceptions caused by Valves will be available in the log
files so that they can be evaluated when
o.a.catalina.valves.ErrorReportValve.showReport is
disabled. Patch is provided by Svetlin Zarev. (violetagg)

Remove unused distributable attribute that is defined as
TransientAttribute of Manager in StoreConfig.
(kfujino)

Fix handling of Cluster Receiver in StoreConfig. The bind
and host attributes define as
TransientAttribute. (kfujino)

59261: ServletRequest.getAsyncContext() now
throws an IllegalStateException as required by the Servlet
specification if the request is not in asynchronous mode when called.
(markt)

59269: Correct the implementation of
PersistentManagerBase so that minIdleSwap
functions as designed and sessions are swapped out to keep the active
session count below maxActiveSessions. (markt)

Add the org.apache.catalina.servlet4preview package that
can be used to gain early access to Servlet 4.0 features. Note that this
package will not be present in Tomcat 9. (markt)

Correctly configure the base path for a resources directory provided by
an expanded JAR file. Patch provided by hengyunabc. (markt)

When multiple compressed formats are available and the client does not
express a preference, use the server order to determine the preferred
format. Based on a patch by gmokki. (markt)

59284: Allow the Tomcat provided JASPIC
SimpleServerAuthConfig to pick up module configuration
properties from either the property set passed to its constructor or
from the properties passed in the call to getAuthContext.
Based on a patch by Thomas Maslen. (markt)

59310: Do not add a Content-Length: 0 header for
custom responses to HEAD requests that do not set a
Content-Length value. (markt)

When normalizing paths, improve the handling when paths end with
/. or /.. and ensure that input and output are
consistent with respect to whether or not they end with /.
(markt)

59317: Ensure that
HttpServletRequest.getRequestURI() returns an encoded URI
rather than a decoded URI after a dispatch. (markt)

Use the correct URL for the fragment when reporting errors processing
a web-fragment.xml file from a JAR located in an unpacked
WAR. (markt)

Ensure that JarScanner only uses the explicit call-back to
process WEB-INF/classes and only when configured to treat
the contents of WEB-INF/classes as a possible exploded JAR.
(markt)

Remove the java2DDisposerProtection option from the
JreMemoryLeakPreventionListener. The leak is fixed in Java
7 onwards and Tomcat 8 requires Java 7 so the option is unnecessary.
(markt)

Ensure that the value for the header X-Frame-Options is
constructed correctly according to the specification when
ALLOW-FROM option is used. (violetagg)

Fix an IllegalArgumentException if the first use of an
internal Response object requires JASPIC authentication.
(markt)

Do not trigger unnecessary session ID changes when using JASPIC and the
user is authenticated using cached credentials. (markt)

Coyote

Change the default for honorCipherOrder to
false. With the current default TLS configuration, it is no
longer necessary for this to be true for a reasonably
secure configuration. (markt)

Add a new environment variable JSSE_OPTS that is intended
to be used to pass JVM wide configuration to the JSSE implementation.
The default value is -Djdk.tls.ephemeralDHKeySize=2048
which protects against weak Diffie-Hellman keys. (markt)

When running on Java 7, exclude DHE ciphers from the default cipher list
for JSSE connectors since they use weak 768 bit DH keys and cannot be
configured to use more secure keys. (markt)

58970: Fix a connection counting bug in the NIO connector
that meant some dropped connections were not removed from the current
connection count. (markt)

59289: Do not recycle upgrade processors in unexpected close
situations. (remm)

59295: Use Locale.toLanguageTag() to construct
the Content-Language HTTP header to ensure the locale is
correctly represented. Patch provided by zikfat. (markt)

59295: Add support for using pem encoded certificates with
JSSE SSL. Submitted by Emmanuel Bourg with additional tweaks. (remm)

Make the TLS certificate chain available to clients when using
JSSE+OpenSSL with the certificate chain stored in a Java KeyStore.
(markt)

Work around a
known issue in OpenSSL that does not permit the TLS handshake to be
failed if the ALPN negotiation fails. (markt)

Tribes

Avoid NPE when a proxy node failed to retrieve a backup entry. (kfujino)

Add log of when received an unexpected messages. (kfujino)

Add the flag indicating that member is a localMember. (kfujino)

Fix potential NPE that depends on the setting order of attributes of
static member when using the static cluster. (kfujino)

Add get/set method for the channel that is related to
ChannelInterceptor. (kfujino)

As with the multicast cluster environment, in the static cluster
environment, the local member inherits properties from the cluster
receiver. (kfujino)

Add get/set method for the channel that is related to each Channel
services. (kfujino)

Add name to channel in order to identify channels. In tomcat cluster
environment, it is set the cluster name + "-Channel" as default value.
(kfujino)

Add the channel name to the thread which is invoked by channel services
in order to identify the associated channel. (kfujino)

Ensure that clear the channel instance from channel services when
stopping channel. (kfujino)

Implement map state in the replication map. (kfujino)

Ensure that the ping is not executed during the start/stop of the
replication map. (kfujino)

In ping processing in the replication map, send not the
INIT message but the newly introduced PING
message. (kfujino)

Other

59209: Remove honorCipherOrder=false attribute
from the connector example in server.xml. When the block is uncommented
the connector will use the default value for this attribute which is
false. If one needs to enable it, one can add it
explicitly to the connector definition. Use of this feature requires
Java 8 or later. Patch is provided by Huxing Zhang. (violetagg)

59280: Update the NSIS Installer used to build the
Windows Installers to version 2.51. (kkolinko)

Update the packaged version of the Tomcat Native Library to 1.2.7 to
pick up the Windows binaries that are based on OpenSSL 1.0.2h and APR
1.5.2. (markt)

2016-03-24 Tomcat 8.5.0 (markt)

General

Remove support for Comet. (markt)

Tighten up the default file permissions for the .tar.gz
distribution so no files or directories are world readable by default.
Configure Tomcat to run with a default umask of 0027 which
may be overridden by setting UMASK in
setenv.sh. (markt)

Catalina

The default HTTP cookie parser has been changed to
org.apache.tomcat.util.http.Rfc6265CookieProcessor. (markt)

Refactor creation of MapperListener to ensure that the
Mapper used is the Mapper associated with the
Service for which the listener was created. (markt)

Move the functionality that provides redirects for context roots and
directories where a trailing / is added from the Mapper to
the DefaultServlet. This enables such requests to be
processed by any configured Valves and Filters before the redirect is
made. This behaviour is configurable via the
mapperContextRootRedirectEnabled and
mapperDirectoryRedirectEnabled attributes of the Context
which may be used to restore the previous behaviour. (markt)

Refactor Service.getContainer() to return an
Engine rather than a Container. (markt)

34319: Only load those keys in
StoreBase.processExpire from JDBCStore that are old enough
to be expired. Based on a patch by Tom Anderson. (fschumacher)

58351: Make the server build date and server version number
accessible via JMX. Patch provided by Huxing Zhang. (markt)

56917: As per RFC7231 (HTTP/1.1), allow HTTP/1.1 and later
redirects to use relative URIs. This is controlled by a new attribute
useRelativeRedirects on the Context and
defaults to true. (markt)

58629: Allow an embedded Tomcat instance to start when the
Service has no Engine configured. (markt)

Correctly notify the MapperListener associated with a Service if the
Engine for that Service is changed. (markt)

Make a web application's CredentialHandler available through a context
attribute. This allows a web application to use the same algorithm
for validating or generating new stored credentials from cleartext
ones. (schultz)

58635: Enable break points to be set within agent code when
running Tomcat with a Java agent. Based on a patch by Huxing Zhang.
(markt)

58655: Fix an IllegalStateException when
calling HttpServletResponse.sendRedirect() with the
RemoteIpFilter. This was caused by trying to correctly
generate the absolute URI for the redirect. With the fix for
56917, redirects may now be relative making the
sendRedirect() implementation for the
RemoteIpFilter much simpler. This also addresses issues
where the redirect may not have behaved as expected when redirecting
from http to https to from https to http. (markt)

58657: Exceptions in a Servlet 3.1 ReadListener
or WriteListener do not need to be immediately fatal to the
connection. Allow an error response to be written. (markt)

Correct implementation of
validateClientProvidedNewSessionId so client provided
session IDs may be rejected if validation is enabled. (markt)

58701: Reset the instanceInitialized field in
StandardWrapper when unloading a Servlet so that a new
instance may be correctly initialized. (markt)

Add a new flag aprPreferred to the Apr listener. if set to
false, when using the connector defaults, it will use
NIO + OpenSSL if tomcat-native is available, rather than the APR
connector. (remm)

Add path parameter handling to
HttpServletRequest.getContextPath(). This is a follow-up to
the fix for 57215. (markt)

58692: Make StandardJarScanner more robust. Log
a warning if a class path entry cannot be scanned rather than triggering
the failure of the web application. Includes a test case written by
Derek Abdine. (markt)

58702: Ensure an access log entry is generated if the client
aborts the connection. (markt)

Fixed various issues reported by Findbugs. (violetagg)

58735: Add support for the X-XSS-Protection
header to the HttpHeaderSecurityFilter. Patch provided by
Jacopo Cappellato. (markt)

Add the StatusManagerServlet to the list of Servlets that
can only be loaded by privileged applications. (markt)

58751: Correctly handle the case where an
AsyncListener dispatches to a Servlet on an asynchronous
timeout and the Servlet uses sendError() to trigger an
error page. Includes a test case based on code provided by Andy
Wilkinson.(markt)

Ensure that the proper file encoding, if specified, will be used when
a readme file is served by DefaultServlet. (violetagg)

Fix declaration of localPort attribute of Connector MBean:
it is read-only. (kkolinko)

58836: Correctly merge query string parameters when
processing a forwarded request where the target includes a query string
that contains a parameter with no value. (markt/kkolinko)

Make sure that shared Digester is reset in an unlikely error case
in HostConfig.deployWAR(). (kkolinko)

Extend the feature available in the cluster session manager
implementations that enables session attribute replication to be
filtered based on attribute name to all session manager implementations.
Note that configuration attribute name has changed from
sessionAttributeFilter to
sessionAttributeNameFilter. Apply the filter on load as
well as unload to ensure that configuration changes made while the web
application is stopped are applied to any persisted data. (markt)

Extend the session attribute filtering options to include filtering
based on the implementation class of the value and optional
WARN level logging if an attribute is filtered. These
options are available for all of the Manager implementations that ship
with Tomcat. When a SecurityManager is used filtering will
be enabled by default. (markt)

Remove distributable and maxInactiveInterval
from the Manager interface because the attributes are never
used. The equivalent attributes from the Context always
take precedence. (markt)

58867: Improve checking on Host start for WAR files that have
been modified while Tomcat has stopped and re-expand them if
unpackWARs is true. (markt)

Ensure that /WEB-INF/classes is never processed as a web
fragment. (markt)

Switch default connector when native is installed. Unless configured
otherwise, the NIO endpoint will be used by default. If SSL is
configured, OpenSSL will be used rather than JSSE. (remm)

Correct a regression in the fix for 58867. When configuring a
Context to use an external directory for the docBase, and
that directory happens to be located along side the original WAR, use
the directory as the docBase rather than expanding the
WAR into the appBase and using the newly created expanded
directory as the docBase. (markt)

58988: Special characters in the substitutions for the
RewriteValve can now be quoted with a backslash. (fschumacher)

58999: Fix class and resource name filtering in
WebappClassLoader. It throws a StringIndexOutOfBoundsException if the
name is exactly "org" or "javax". (rjung)

Add JASPIC (JSR-196) support. (markt)

Make checking for var and map replacement in RewriteValve a bit stricter
and correct detection of colon in var replacement. (fschumacher)

Refactor the web application class loader to reduce the impact of JAR
scanning on the memory footprint of the web application. (markt)

Fix some resource leaks in the error handling for accessing files from
JARs and WARs. (markt)

Refactor the JAR and JAR-in-WAR resource handling to reduce the memory
footprint of the web application. (markt)

Refactor the web.xml parsing so a new parser is created every time the
web application starts rather than creating and caching the parser when
the Context is created. This enables the parser to take account of
modified Context configuration parameters and reduces (slightly) the
memory footprint of a running Tomcat instance. (markt)

Switch the web application class loader to the
ParallelWebappClassLoader by default. (markt)

57809: Remove the custom context attribute that held the
effective web.xml. Components needing access to configuration
information may access it via the Servlet API. (markt)

Refactor JAR scanning to reduce memory footprint. (markt)

59001: Correctly handle the case when Tomcat is installed on
a path where one of the segments ends in an exclamation mark. (markt)

Expand the fix for 59001 to cover the special sequences used
in Tomcat's custom jar:war: URLs. (markt)

59043: Avoid warning while expiring sessions associated with
a single sign on if HttpServletRequest.logout() is used.
(markt)

59054: Ensure that using the
CrawlerSessionManagerValve in a distributed environment
does not trigger an error when the Valve registers itself in the
session. (markt)

Add socket properties support to storeconfig. (remm)

Fix incorrect parsing of the NE and NC flags in rewrite rules. (remm)

59065: Correct the timing of the check for colons in paths
on non-Windows systems implemented in catalina.sh so it
works correctly with Cygwin. Patch provided by Ed Randall. (markt)

When a Host is configured with an appBase that does not exist, create
the appBase before trying to expand an external WAR file into it.
(markt)

59115: When using the Servlet 3.0 file upload, the submitted
file name may be provided as a token or a quoted-string. If a
quoted-string, unquote the string before returning it to the user.
(markt)

59123: Close NamingEnumeration objects used by
the JNDIRealm once they are no longer required.
(fschumacher/markt)

Implement the proposed Servlet 4.0 API to provide mapping type
information for the current request. (markt)

59138: Correct a false positive warning for ThreadLocal
related memory leaks when the key class but not the value class has been
loaded by the web application class loader. (markt)

59017: Make the pre-compressed file support in the Default
Servlet generic so any compression may be used rather than just gzip.
Patch provided by Mikko Tiihonen. (markt)

59145: Don't log an invalid warning when a user logs out of
a session associated with SSO. (markt)

59150: Add an additional flag on APR listener to allow
disabling automatic use of OpenSSL. (remm)

59151: Fix a regression in the fix for 56917 that
added additional (and arguably unnecessary) validation to the provided
redirect location. (markt)

59154: Fix a NullPointerException in the
JAASMemoryLoginModule resulting from the introduction of
the CredentialHandler to Realms.
(schultz/markt)

Coyote

Add support for HPACK header encoding and decoding, contributed
by Stuart Douglas. (remm)

57108: Add support for Server Name Indication (SNI). There
has been significant changes to the SSL configuration in server.xml to
support this. (markt)

Add SSL engine for JSSE backed by OpenSSL. Includes ALPN support.
Based on code contributed by Numa de Montmollin and derived from code
developed by Twitter and Netty. (remm)

RFC 7230 states that clients should ignore reason phrases in HTTP/1.1
response messages. Since the reason phrase is optional, Tomcat no longer
sends it. As a result the system property
org.apache.coyote.USE_CUSTOM_STATUS_MSG_IN_HEADER is no
longer used and has been removed. (markt)

The minimum required Tomcat Native version has been increased to 1.2.2.
The 1.2.x branch includes ALPN and SNI support which are required for
HTTP/2. (markt)

Add support for HTTP/2 including server push. (markt)

58621: The certificate chain cannot be set using the main
certificate attribute, so restore the certificate chain property. (remm)

Allow a new SSL config type where a connector can use either JSSE or
OpenSSL. Both could be allowed, but it would likely create support
issues. This type is used by the OpenSSL implementation for NIOx. (remm)

Jasper

57136#c25: Change default value of
quoteAttributeEL setting in Jasper to be true
for better compatibility with other implementations and older versions
of Tomcat. Add command line option -no-quoteAttributeEL in
JspC. (kkolinko)

57583: Improve the performance of
javax.servlet.jsp.el.ScopedAttributeELResolver when
resolving attributes that do not exist. This improvement only works when
Jasper is used with Tomcat's EL implementation. (markt)

Cluster

Enable an explicit configuration of local member in the static cluster
membership. (kfujino)

In order to avoid that the heartbeat thread and the background thread to
run Channel.heartbeat simultaneously, if
heartbeatBackgroundEnabled of SimpleTcpCluster
set to true, ensure that the heartbeat thread does not
start. (kfujino)

WebSocket

55006: The WebSocket client now honors the
java.net.java.net.ProxySelector configuration (using the
HTTP type) when establishing WebSocket connections to servers. Based on
a patch by Niki Dokovski. (markt)

57489: Ensure onClose() is called when a
WebSocket connection is closed even if the sending of the close message
fails. Includes test cases by Barry Coughlan. (markt)

58624: Correct a potential deadlock if the WebSocket
connection is closed when a message write is in progress. (markt)

Fix a timing issue on session close that could result in an exception
being thrown for an incomplete message even through the message was
completed. (markt)

Correctly handle compression of partial messages when the final message
fragment has a zero length payload. (markt)

58723: Clarify documentation and error messages for the text
interface of the manager to make clear that version must be used with
path when referencing contexts deployed using parallel deployment.
(markt)

Document test.threads option in BUILDING.txt. (kkolinko)

Correct an error in the documentation of the expected behaviour for
automatic deployment. If a WAR is updated and an expanded directory is
present, the directory will always be deleted and recreated by expanding
the WAR if unpackWARs is true. (markt)

58935: Remove incorrect references in the documentation to
using jar:file: URLs with the Manager application. (markt)