Fix a regression in refactoring for Hashtables which caused mbeans to
lose many of their attributes. (remm)
release in progress Tomcat 10.0.25 (markt)
Jasper
66203: Log an error message when the JSP compiler is unable
to create the output directory for the generated code. (markt)
Other
Update the Apache Tomcat migration tool for Jakarta EE library to 1.0.4.
(markt)
Further automation to the build process to reduce the number of manual
steps that release managers must perform. (markt)
not released Tomcat 10.0.24 (markt)
Catalina
Correct handling of HTTP TRACE requests where there are multiple
instances of an HTTP header with the same name. (markt)
Implement the requirements of RFC 7231 and do not include sensitive
headers in responses to HTTP TRACE requests. (markt)
Implement the clarification in RFC 9110 that the units in HTTP range
specifiers are case insensitive. (markt)
Properly-escape role and group information when writing
MemoryUserDatabase to an XML file. (schultz)
Move control of XML-export logic from individual support classes into
MemoryUserDatabase.save(). Deprecate and discontinue use of MemoryUser,
MemoryRole, and MemoryGroup classes. (schultz)
66183: When logging cookie values in an access log valve and
there are multiple cookies with the same name, log all cookie values
rather than just the first. Based on pull request #541 by Han
Li. (markt)
66184: Ensure that JULI root loggers have a default level of
INFO. Pull request #533 provided by Piotr P.
Karwasz. (markt)
Improve handling of stack overflow errors when parsing SSI expressions.
(markt)
66120: Enable FORM authentication to work correctly if
session persistence and restoration occurs during the authentication
process. (markt)
66233: Include an error message when sending a 400 response
because a request has too many cookies. (markt)
When web application deployment fails due to JARs with duplicate
fragment names, improve the error message by listing the JARs that
contain the duplicates. Based on pull request #535 by Mads
Rolsdorph. (markt)
Replace logging thread for JULI's AsyncFileHandler with an
executor to protect against failure of the logging thread. Based on pull
request #545 by Piotr P. Karwasz. (markt)
Coyote
Avoid potential NPE by skipping duplicate accept check when using a Unix
Domain Socket. Based on #532 by Han Li. (markt)
Address an edge case in HTTP header parsing that allowed CRCRLF to be
used as a valid line terminator. (markt)
Ensure HTTP/2 requests that include connection specific headers are
rejected. (markt)
When processing HTTP/2 requests, allow a host header to be
used in place of an :authority header. (markt)
When processing HTTP/2 requests, allow a host header and an
:authority header to be present providing they are
consistent. (markt)
Make parsing of invalid filename directives in
Content-Disposition headers more robust. Invalid filename
directives will now be ignored rather than triggering a 500 response.
(markt)
66194: Log HTTP/2 stream closures (usually caused by client
errors) via a UserDataHelper to broadly align it with the
behaviour of HTTP/1.1 for parsing issues and exceeding limits. (markt)
66236: Implement support for the special values zero and
minus one when configuring maxSavePostSize for a Connector
when used in conjunction with TLS renegotiation. (markt)
66240: Avoid int overflow when parsing octets by limiting
the maximum value to 255. Based on a PR #548 by Stefan Mayr.
(lihan)
#550: Correctly handle case where a Servlet responds to a
request with an expectation with a 2xx response without reading the
request body. Pull request provided by Malay Shah. (markt)
#551: Avoid potential IndexOutOfBoundsException by fixing
incorrect check when matching HTTP/2 preface. Submitted by 刘文章.
(lihan)
Jasper
Improve handling of stack overflow errors when parsing EL expressions.
(markt)
Correct parsing of integer and floating point literals in EL expressions
so that larger values are correctly parsed to BigInteger
and BigDecimal respectively. (markt)
66235: Fix various issues with the bean resolver used for
Graal. (remm)
Improve the performance of the ImportHandler in the
Expression Language implementation. This removes a previous optimisation
that is now detrimental rather than helpful. Pull request #547
provided by rmannibucau. (markt)
Improve handling of EL error messages so instances of Number are not
formatted in unexpected ways. (markt/kkolinko)
Switch to using ELException rather than IllegalArgumentException when a
type conversion fails during an EL arithmetic operation. This is an EL
error so ELException seems more appropriate. (markt)
Fix a bug in MethodExpression handling that triggered an
error when invoking a static method on an instance of the class rather
than directly on the class. (markt)
Use BigInteger.remainder() rather than
BigInteger.mod() when performing the modulus operation for
instances of BigInteger as part of an EL expression.
(markt)
Cluster
To aid future additions of new functionality, rather than throw an
IllegalArgumentException if a DeltaRequest is
passed an unrecognised action type, a warning message will now be
logged. (markt)
66120: Enable FORM authentication to work correctly if
session failover occurs during the authentication process. (markt)
WebSocket
62312: Add support for authenticating WebSocket clients with
an HTTP forward proxy when establishing a connection to a WebSocket
endpoint via a forward proxy that requires authentication. Based on a
patch provided by Joe Mokos. (markt)
Other
Ensure that zip archives use UTC for file modification times to ensure
repeatable builds across time zones. (markt)
Improvements to Chinese translations. (lihan)
Improvements to Czech translations. (markt)
Improvements to French translations. (remm)
Improvements to German translations. (markt)
Improvements to Japanese translations. Contributed by tak7iji and
Shirayuking. (markt)
Improvements to Korean translations. Contributed by 수현. (markt)
Improvements to Russian translations. (markt)
Improvements to Spanish translations. (markt)
Update the Apache Tomcat migration tool for Jakarta EE library to 1.0.3.
(markt)
2022-07-27 Tomcat 10.0.23 (markt)
Catalina
66104: Avoid error message by not trying to clean up old
files from the logging directory before the directory has been created.
Based on #521 by HanLi. (markt)
Coyote
Provide dedicated loggers
(org.apache.tomcat.util.net.NioEndpoint.handshake /
org.apache.tomcat.util.net.Nio2Endpoint.handshake) for TLS
handshake failures. (markt)
Enable the use of the FIPS provider for TLS enabled Connectors when
using Tomcat Native 1.2.34 onwards built with OpenSSL 3.0.x onwards.
(markt)
Deprecated the jvmRoute system property used to configure a
default value for the jvmRoute attribute of an Engine.
(markt)
Fix duplicate Poller registration with HTTP/2, NIO and async IO that
could cause HTTP/2 connections to unexpectedly fail. (markt)
Jasper
Add support for specifying Java 19 (with the value 19) as
the compiler source and/or compiler target for JSP compilation. If used
with an Eclipse JDT compiler version that does not support these values,
a warning will be logged and the default will used.
(markt)
Web applications
Documentation. 62245: Include contextXsltFile
when discussing options for configuring directory listings. (markt)
Examples. Fix CVE-2022-34305, a low severity XSS vulnerability in the
Form authentication example. (markt)
Documentation. Expand the description of the useSendfile
attribute for HTTP/2 and reference the possibility of file locking when
using this feature on Windows operating systems. (markt)
Other
Update to bnd 6.3.1. (markt)
The minimum Ant version required to build Tomcat 10.1.x is now 1.10.2.
(markt)
Add additional automation to the build process to reduce the number of
manual steps that release managers must perform. (schultz)
Implement support for reproducible builds. Reproducible builds are
independent of operating system but require the same Ant version and
same JDK (vendor and version) to be used as associated version
information is embedded in a number of build outputs such as JAR file
manifests. (markt)
Update the packaged version of the Tomcat Native Library to 1.2.34 to
improve the support for building with OpenSSL 3.0.x.(markt)
Remove and/or update references to the removed
org.apache.tomcat.util.threads.res package. The
LocalStrings*.properties files in that package were moved
to org.apache.tomcat.util.threads package for consistency
with the rest of the Tomcat code base.
66134: The NSIS based Tomcat installer for Windows now
correctly handles the combination of TomcatAdminRoles
defined in a configuration file and selecting the Manager and/or
Host Manager web applications in the installer's GUI. (markt)
Update the OWB module to Apache OpenWebBeans 2.0.27. (remm)
Update the CXF module to Apache CXF 3.5.3. (remm)
Update the Apache Tomcat migration tool for Jakarta EE library to 1.0.1.
(markt)
Improvements to French translations. (remm)
Improvements to Japanese translations contributed by tak7iji. (markt)
Update the packaged version of the Tomcat Native Library to 1.2.35 to
pick up Windows binaries built with OpenSSL 1.1.1q.(markt)
2022-06-11 Tomcat 10.0.22 (markt)
Catalina
Update the memory leak protection code to support stopping application
created executor threads when running on Java 19 and later. (markt)
Improve the error message if a required --add-opens option
is missing. (markt)
Disable the memory leak correction code enabled by the Context attribute
clearReferencesObjectStreamClassCaches when running on a
JRE that includes a fix for the underlying memory leak. (markt)
#515: Avoid deadlock on startup with some utility executor
configurations. Submitted by Han Li. (remm)
66068: Ensure that the changes made to a request by the
RemoteIPValve persist after the request is put into
asynchronous mode. (markt)
Include the major version in the recommended version used for Tomcat
Native with the AprLifecycleListener. (markt)
Coyote
Additional fix for 65118. Fix a potential
NullPointerException when pruning closed HTTP/2 streams
from the connection. (markt)
66076: When using TLS with non-blocking writes and the NIO
connector, ensure that flushing the buffers attempts to empty all of the
output buffers. (markt)
66084: Correctly calculate bytes written to a response. Pull
request #516 provided by aooohan HanLi. (markt)
Correct a regression in the support added for encrypted PKCS#1 formatted
private keys in the previous release that broke support for unencrypted
PKCS#1 formatted private keys. (jfclere/markt)
Remove support for NPN when using the Tomcat Native Connector as NPN was
never standardised and browser support for NPN was removed several years
ago. (markt)
Jasper
Update ImportHandler optimisation for new classes
introduced in Java 19. (markt)
Web applications
66064: Update the building page in the documentation web
application to reflect changes in required Java version and source
repository. (markt)
Documentation. Make the description of the HTTP/1.1 configuration
attributes that control the maximum allowed HTTP header size more
specific. (markt)
Tribes
Increase the default buffer size for replication messages from 43800 to
65536 bytes. This is expected to improve performance for large messages
when running on Linux based systems. (markt)
Other
Improvements to French translations. (remm)
Improvements to Japanese translations contributed by Shirayuking and
tak7iji. (markt)
Improvements to Chinese translations contributed by Dingzi2012. (markt)
2022-05-16 Tomcat 10.0.21 (markt)
Catalina
65736: Disable the forceString option for the
JNDI BeanFactory and replace it with an automatic search
for an alternative setter with the same name that accepts a
String. This is a security hardening measure. (markt)
65853: Refactor the CsrfPreventionFilter to make
it easier for sub-classes to modify the nonce generation and storage.
Based on suggestions by Marvin Fröhlich. (markt)
65991: Avoid NPE with SSLAuthenticator when
boundOnInit is used on a connector, during the check
for client certificate authentication availability. (remm)
66009: Use getSubjectX500Principal().toString()
rather than getSubjectX500Principal().getName(...) to
retrieve a certificate DN, to match the output of the deprecated
getSubjectDN().getName() that was used previously. (remm)
Revert the change in 10.0.17 that added a mapping of
Shift_JIS for the ja locale to the default
mappings used by ServletResponse.setLocale() as it
caused regressions for applications using UTF-8. (markt)
Provide a property source that sources values from Kubernetes service
bindings. Pull request #512 provided by Sumit Kulhadia and
Gareth Evans. (markt)
Coyote
#501: Add new maxHttpRequestHeaderSize and
maxHttpResponseHeaderSize attributes which allow setting
the maximum HTTP header sizes independently. If not specified, the
value of the maxHttpHeaderSize connector attribute will
be used. Submitted by Zhongming Hua. (remm)
The root cause of the Linux kernel duplicate accept bug has been
identified along with the version of the kernel that includes the fix.
The error message displayed when this bug occurs has been updated to
reflect this new information and to advise users to update to a version
of the OS that uses kernel 5.10 or later. Thanks to Christopher Gual for
the research into this issue. (markt)
66023: Improve the fix for 65726 and support HTTP
upgrade with a request body for a wider set of use cases. (markt)
Add support for encrypted PKCS#1 formatted private keys when configuring
the internal, in memory key store. Based on #511.
(jfclere/markt)
Remove the prestartminSpareThreads attribute of the
StandardThreadExecutor since all core threads are always
started by default making this attribute meaningless. Pull request
#510 provided by Aooohan. (markt)
Jasper
66031: Fix NPE when using a custom JspFactory. Patch by
Jean-Louis Monteiro. (remm)
Webapps
66008: In the documentation web application, clarify the
recommendation for the use the trimSpaces option for Jasper
in production environments. (markt)
Update the documentation web application to state that the
EncryptInterceptor does not provide sufficient protection
to run Tomcat clustering over an untrusted network. This is
CVE-2022-29885. (markt)
Other
Improvements to French translations. (remm)
Improvements to German translations contributed by Thomas Hoffmann.
(markt)
Improvements to Japanese translations contributed by Shirayuking.
(markt)
Improvements to Korean translations. (woonsan)
Update to Commons Daemon 1.3.1. This fixes a known regression in 1.3.0
when configuring the Windows service with custom scripts as described in
66055. (markt)
Update to JSign 4.1. (markt)
Update the packaged version of the Tomcat Native Library to 1.2.33 to
pick up Windows binaries built with OpenSSL 1.1.1o.(markt)
2022-04-01 Tomcat 10.0.20 (markt)
Catalina
Effectively disable the
WebappClassLoaderBase.getResources() method as it is not
used and if something accidently exposes the class loader this method
can be used to gain access to Tomcat internals. (markt)
not released Tomcat 10.0.19 (markt)
Catalina
Harden the CredentialHandler implementations by switching to a
constant-time implementation for credential comparisons. (schultz/markt)
Coyote
Use a constant for the default TLS cipher suite. This will allow
skipping setting it in some cases (for example, it does not make
sense for OpenSSL TLS 1.3). (remm)
#487: Improve logging of unknown settings frames. Pull request
by Thomas Hoffmann. (remm)
65975: Add a warning if a TLS virtual host is configured with
optional certificate authentication and the containing connector is also
configured to support HTTP/2 as HTTP/2 does not permit optional
certificate authentication. (markt)
65975: Add a warning if a TLS virtual host is configured for
TLS 1.3 with a JSSE implementation and a web application is configured
for CLIENT-CERT authentication. CLIENT-CERT
authentication requires post-handshake authentication (PHA) when used
with TLS 1.3 but the JSSE TLS 1.3 implementation does not support PHA.
(markt)
Improve the recycling of Processor objects to make it more robust.
(markt)
Jasper
65959: Serialize Function as String[] rather Class[]. (remm)
Web applications
65947: Correct the name of HTTP/1.1 configuration property
(maxHttpHeaderSize) that is inherited by the HTTP/2 upgrade
protocol. Thanks to Thomas Hoffmann. (markt)
65952: Align --add-opens configuration for jsvc
with the current Tomcat scripts. (markt)
Correct the AJP and HTTP/1.1 Connector configuration pages in the
documentation web application to show which attributes are applicable to
all Connectors and which are implementation specific. (markt)
Other
Correct a spelling mistake in the German translations. Thanks to Thomas
Hoffmann. (markt)
65951: Use the tomcat.output property for OSGi
bundle manifest paths. (isapir)
Update to Commons Daemon 1.3.0. (markt)
Update to Checkstyle 10.0. (markt)
Update to SpotBugs 4.6.0. (markt)
Expand the spotbugs Ant task to also cover test code.
(markt)
Update to bnd 6.2.0. (markt)
Remove OSGi annotations dependency as it is no longer required with bnd
6.2.0. (markt)
Refactor the resource files for the Apache Tomcat installer for Windows
so that all the resource files are located in a single directory in the
source tree. (markt)
Update the packaged version of the Tomcat Native Library to 1.2.32 to
pick up Windows binaries built with OpenSSL 1.1.1n.(markt)
Improvements to Chinese translations contributed by 15625988003. (markt)
Improvements to French translations. (remm)
Improvements to Japanese translations contributed by tak7iji. (markt)
Expand coverage of translations for jakarta.el package.
Based on #488 from Volodymyr Siedlecki. (markt)
2022-03-14 Tomcat 10.0.18 (markt)
Catalina
#477: Update the default list of JARs to skip to include the
Apache Log4j JAR for Jakarta EE platforms. Pull request by Michael
Seele. (markt)
65921: The type substitution flag for the
rewrite valve should set the content type for the response, not the
request. (markt)
#479: Enable the rewrite valve to redirect requests when the
original request cannot be mapped to a context. This typically happens
when no ROOT context is defined. Pull request by elkman. (markt)
65940: Fix NullPointerException if an exception
occurs during the destruction of a Servlet. (markt)
Coyote
Fix regression introduced with 65757 bugfix which better
identified non request threads but which introduced a similar problem
when user code was doing sequential operations in a single thread.
Test case code submitted by Istvan Szekely. (remm)
Fix potential thread-safety issue that could cause HTTP/1.1 request
processing to wait, and potentially timeout, waiting for additional
data when the full request has been received. (markt)
Throw IOException rather than
IllegalStateException when the application attempts to
write to an HTTP/2 stream after the client has closed the stream.
(markt)
Jasper
When resolving methods in EL expressions that use beans and/or static
fields, ensure that any custom type conversion is considered when
identifying the method to call. (markt)
Web applications
Correct the name of the value attribute in the new
documentation of OpenSSLConfCmd elements. (rjung)
2022-02-28 Tomcat 10.0.17 (markt)
Catalina
Add ha-api-*.jar and jaxws-rt-*.jar to the
list of JARs to skip when scanning for TLDs, web fragments and
annotations. (michaelo)
Expand the default mappings used by
ServletResponse.setLocale() to include a mapping from the
ja locale to the Shift_JIS encoding. (markt)
65806: Improve the handling of session ID generation when the
default algorithm for SecureRandom (SHA1PRNG)
is not supported by the configured providers as will be the case for a
FIPS compliant configuration. (markt)
#464: Fall back to the class loader used to load JULI when the
thread context class loader is not set. In a normal Tomcat
configuration, this will be the system class loader. Based on a pull
request by jackshirazi. (markt)
#469: Include the Jakarata Annotations API in the classes that
Tomcat will not load from web applications. Pull request provided by
ppkarwasz. (markt)
#471: Add support for additional user attributes to
TomcatPrincipal and GenericPrincipal.
Patch provided by Carsten Klein. (michaelo)
Fix a potential StringIndexOutOfBoundsException exception
when generating a WebDAV multi-status response after an error during a
copy or delete. Report the paths relative to the server root for any
resources with an error. (markt)
Improve the format of WebDAV XML responses to make them easier for
humans to read. The change ensures that there is always a line break
before starting a new element. (markt)
Improve validation of the Destination header for WebDAV
MOVE and COPY requests. (markt)
Coyote
Correct a regression in the fix for 65454 that meant that
minSpareThreads and maxThreads settings were
ignored when the Connector used an internal executor. (markt)
65776: Improve the detection of the Linux duplicate accept
bug and reduce (hopefully avoid) instances of false positives. (markt)
65848: Revert the change that attempted to align the
behaviour of client certificate authentication with NIO or NIO2 with
OpenSSL for TLS between MacOS and Linux/Windows as the root cause was
traced to configuration differences. (markt)
#467: When system time moves backwards (e.g. after clock
correction), ensure that the cached formatted current date used for
HTTP headers tracks this change. Pull request provided by zhenguoli.
(markt)
Jasper
#474: Prevent a tag file from corrupting the ELContext of the
calling page. Pull request provided by Dmitri Blinov. (markt)
Minor optimisation of serialization for FunctionMapperImpl
in response to pull request #476. (markt)
Web applications
Remove the applet example from the example web application as applets
are no longer supported in any major browser. (markt)
Refactor a small number of pages in the examples web application to
avoid an issue with reproducible builds due to differences in file
ordering across different operating systems with Ant's zip task. (markt)
Better documentation for the protocol attribute of the
JNDIRealm. (markt)
Clarify the settings described in the documentation web application to
configure a cluster using static membership. (markt)
Add information on the OpenSSLConf and
OpenSSLConfCmd elements to the HTTP SSL configuration page
in the documentation web applications. (markt)
jdbc-pool
Use LF line endings for text files in JARs to support reproducible
builds across different operating systems. (markt)
Other
Use LF line endings for text files in JARs to support reproducible
builds across different operating systems. (markt)
Fix dependencies for individual test targets in Ant build file. Based on
#468 provided by Totoo chenyonghui. (markt)
Update the OWB module to Apache OpenWebBeans 2.0.26. (remm)
Revert the cherry-pick of JavaDoc fix from DBCP applied in 10.0.15
that broke the DataSourceMXBean by using a type that isn't
supported by MXBeans. (markt)
2022-01-20 Tomcat 10.0.16 (markt)
Coyote
Correct a regression in the fix for 65785 that broke HTTP/2
server push. (markt)
Other
Switch to building with Java 11 and using --release to
target Java 8. Once back-ported to all currently supported branches this
will reduce the number of Java versions developers need to juggle.
(markt)
not released Tomcat 10.0.15 (markt)
Catalina
Add additional locking to DataSourceUserDatabase to provide
improved protection for concurrent modifications. (markt)
Add recycling check in the input and output stream isReady to try to
give a more informative ISE when the facade has been recycled. (remm)
Make the calculation of the session storage location more robust when
using file based persistent storage. (markt)
Coyote
65726: Implement support for HTTP/1.1 upgrade when the
request includes a body. The maximum permitted size of the body is
controlled by maxSavePostSize. (markt)
Restore pre-starting of minSpareThreads lost in the fix for
65454. (markt)
Revert the previous fix for 65714 and implement a more
comprehensive fix. (markt)
65757: Missing initial IO listener notification on Servlet
container dispatch to another container thread. (remm)
Expand the fix for 65757 so that rather than just checking if
processing is happening on a container thread, the check is now if
processing is happening on the container thread currently allocated to
this request/response. (markt)
Improve the fix for RST frame ordering added in 10.0.14 to avoid a
potential deadlock on some systems in non-default configurations.
(markt)
65767: Add support for certificates that use keys encrypted
using PBES2. Based on a pull request provided by xiezhaokun. (markt)
Refactor testing whether a String is a valid HTTP token. (markt)
65785: Perform additional validation of HTTP headers when
using HTTP/2. (markt)
When a Connector or Endpoint is paused, ensure that only new connections
and new requests on existing connections are stopped while allowing in
progress requests to run to completion. (markt)
Explicitly release ByteBuffer instances associated with pooled channels
when stopping the NioEndpoint and Nio2Endpoint. (markt)
Narrow the scope of the logging of invalid cookie headers to just the
invalid cookie rather than the whole cookie header. (markt)
Jasper
65724: Fix missing messages for some
PropertyNotWritableExceptions caused by a typo in the name
used for a resource string. (markt)
Add support for specifying Java 18 (with the value 18) as
the compiler source and/or compiler target for JSP compilation. If used
with an Eclipse JDT compiler version that does not support these values,
a warning will be logged and the default will used.
(markt)
WebSocket
Add support for POJO WebSocket endpoints to the programmatic upgrade
that allows applications to opt to upgrade an HTTP connection to
WebSocket. (markt)
65763: Improve handling of WebSocket connection close if a
message write times out before the message is fully written. (markt)
Other
Update the OWB module to Apache OpenWebBeans 2.0.25. (remm)
Update the CXF module to Apache CXF 3.5.0. (remm)
Improvements to Chinese translations contributed by zhnnn. (markt)
Improvements to French translations. (remm)
Improvements to Japanese translations contributed by Shirayuking, yoshy
and tak7iji. (markt)
Improvements to Korean translations. (woonsan)
Update SpotBugs to 4.5.2. (markt)
Update the NSIS installer to 3.08. (markt)
Update UnboundID to 6.0.3. (markt)
Update CheckStyle to 9.2.1. (markt)
Update BND to 6.1.0. (markt)
Update OSGI annotations to 1.1.1. (markt)
2021-12-08 Tomcat 10.0.14 (markt)
Catalina
Make SPNEGO authentication more robust for the case where the provided
credential has expired. (markt)
65684: Fix a potential NullPointerException when
using JULI. (markt)
Document conditions under which the AprLifecycleListener
can be used to avoid JVM crashes. (michaelo)
Refactor the AsyncFileHandler to reduce the possibility of
log messages being lost on shutdown. (markt)
Refactor the AsyncFileHandler to remove the need for the
org.apache.juli.AsyncLoggerPollInterval. If set, this
property now has no effect. (markt)
Add debug logging to the RestCsrfPreventionFilter. Based on
pull request #452 by Polina Georgieva. (markt)
65710: Implement a workaround for a JVM bug that can trigger
a file descriptor leak when using multi-part upload and the application
does not explicitly close an input stream for an uploaded file that was
cached on disk. (markt)
Coyote
Improve error handling if APR/Native fails to attach TLS capabilities to
a TLS enabled client connection. (markt)
Improve error handling if APR/Native fails to accept an incoming
connection. (markt)
Provide protection against a known OS
bug that causes the acceptor to report an incoming connection more
than once. (markt)
Avoid unnecessary duplicate read registrations for blocking I/O with the
NIO connector. (markt)
65677: Improve exception handling for errors during HTTP/1.1
reads with NIO2. (markt)
Refactor APR/native connector shutdown to remove a potential source of
JVM crashes on shutdown when sendfile is used. (markt)
When an error occurs that triggers a stream reset, ensure that the first
RST frame sent to the client is the one associated with the
error that triggered the reset. (markt)
65714: Fix exceptions when the security manager is enabled
and the first request received after starting is an HTTP request to a
TLS enabled NIO2 connector. (markt)
Ensure that using NIO or NIO2 with OpenSSL for TLS behaves the same way
on MacOS as it does on Linux and Windows when no trusted certificate
authorities are configured and reject all client certificates. (markt)
Avoid a potential deadlock during the concurrent processing of incoming
HTTP/2 frames for a stream and that stream being reset. (markt)
2021-11-15 Tomcat 10.0.13 (markt)
Catalina
Improve robustness of JNDIRealm for exceptions occurring when getting
the connection. Also add missing close when running into issues
getting the passord of a user. (remm)
Add Javadoc comment which listeners must be nested whithin
Server elements only. (michaelo)
Add support for custom caching strategies for web application resources.
This initial implementation allows control over whether or not a
resource is cached. (markt)
Log warning if a listener is not nested inside a Server element
although it must have been. (michaelo)
Coyote
Improve performance of Connector shutdown - primarily to reduce the time
it takes to run the test suite. (markt)
Refactor the APR/native connector shutdown to reduce the possibility of
a JVM crash during the connector shutdown. (markt)
#457: Add a toString() method to
MimeHeader to aid debugging. (dblevins)
Add experimental OpenSSL support through the Panama API incubating in
Java 17, with support for OpenSSL 1.1+. This no longer requires
tomcat-native or APR. Please refer to the openssl-java17
module from the main branch for more details. (remm)
Fix APR connector stop so it correctly waits for the sendfile thread, if
any, to exit. (markt)
Do not ignore the error condition if the APR connector is not able to
open a server socket as continuing in this case will trigger a JVM crash.
(markt)
Fix a potential JVM crash when using the APR/Native connector with TLS.
A crash could occur if the connector was stopped whilst a connection was
performing a TLS handshake. (markt)
Jasper
Regenerate the EL parser using JavaCC 7.0.10. (markt)
Fix a bug that prevented the EL parser correctly parsing a literal Map
that used variables rather than literals for both keys and values.
(markt)
WebSocket
Add a new method WsServerContainer.upgradeHttpToWebSocket()
to align with the new method that will be available from WebSocket 2.1
onwards. (markt)
Tribes
#454: Differentiate warning messages in
KubernetesMembershipProvider so that the missing attribute
is clear to the user. PR provided by Hal Deadman. (markt)
Other
Switch from Cobertura to JaCoCo for code coverage as Cobertura does not
support code coverage for code compiled for Java 11 onwards. It also
removes the need to use a single thread to run the tests. (markt)
2021-10-01 Tomcat 10.0.12 (markt)
Catalina
Provide the DataSource in the constructor of
DataSourceUserDatabase, since it is always global. (remm)
Fix delete then create object manipulations with
DataSourceUserDatabase. (remm)
65553: Implement a work-around for a
JRE bug
that can trigger a memory leak when using the JNDI realm. (markt)
65586: Fix the bloom filter used to improve performance of
archive file look ups in the web resources implementation so it works
correctly for directory lookups whether or not the provided directory
name includes the trailing /. (markt)
#451: Improve the usefulness of the thread name cache used in
JULI. Pull request provided by t-gergely. (markt)
Coyote
65563: Correct parsing of HTTP Content-Range
headers. Tomcat was incorrectly requiring an = character
after bytes. Fix based on pull request #449 by
Thierry Guérin. (markt)
Correct a potential StackOverflowException with HTTP/2 and
sendfile. (markt)
Further improvements in the management of the connection flow control
window. This addresses various bugs that caused streams to incorrectly
report that they had timed out waiting for an allocation from the
connection flow control window. (markt)
65577: Fix a AccessControlException reporting
when running an NIO2 connector with TLS enabled. (markt)
Reclassify TLS ciphers that use AESCCM8 as medium security rather than
high security to align with recent changes in OpenSSL. (markt)
Fix an issue that caused some Servlet non-blocking API reads of the HTTP
request body to incorrectly use blocking IO. (markt)
Jasper
Fix the implementation of MethodExpression.getMethodInfo()
so that it returns the expected value rather than failing when the
method expression is defined with the parameter values in the expression
rather than the types being passed explicitly to
ExpressionFactory.createMethodExpression(). (markt)
WebSocket
The internal upgrade handler should close the associated
WebConnection on destroy. (remm)
Web applications
Clarify the JASPIC configuration options in the documentation web
application. (markt)
Other
65585: Update obsolete comments at the start of the
build.properties.default file. (markt)
2021-09-10 Tomcat 10.0.11 (markt)
Catalina
Enable Tomcat to start if an (old) XML parser is configured that does
not support allow-java-encodings. A warning will be logged
if such an XML parser is detected. (markt)
Change the behaviour of custom error pages. If an error occurs after the
response is committed, once the custom error page content has been added
to the response the connection is now closed immediately rather than
closed cleanly. i.e. the last chunk that marks the end of the response
body is no longer sent. This acts as an additional signal to the client
that the request experienced an error. (markt)
65479: When handling requests using JASPIC authentication,
ensure that PasswordValidationCallback.getResult() returns
the result of the password validation rather than always returning
false. Fixed via pull request #438 provided by
Robert Rodewald. (markt)
Refactor the authenticators to delegate the check for preemptive
authentication to the individual authenticators where an authentication
scheme specific check can be performed. Based on pull request
#444 by Robert Rodewald. (markt)
Improve the reusability of the UserDatabase by adding
intermediate concrete implementation classes and allowing to do
partial database updates on save. (remm)
Add a UserDatabase implementation as a superset of the
DataSourceRealm functionality. (remm)
Make sure the dynamic Principal returned by
UserDatabaseRealm stays up to date with the database
contents, and add an option to have it be static, similar to the other
realms. (remm)
Add derby-*.jar to the list of JARs to skip when scanning
for TLDs, web fragments and annotations. (markt)
#447. Correct JPMS metadata for catalina.jar. Pull request
provided by Hui Wang. (markt)
Coyote
Correct a logic error that meant setting
certificateKeystoreFile to NONE did not have
the expected effect. NONE was incorrectly treated as a file
path. Patch provided by Mikael Sterner. (markt)
65505: When an HTTP header value is removed, ensure that the
order of the remaining header values is unchanged. (markt)
WebSocket
65506: Fix write timeout check that was using the read
timeout value. Patch submitted by Gustavo Mahlow. (remm)
Web applications
Remove unnecessary Context settings from the examples web application.
(markt)
Document default value for unpackWARs and related clean-up.
Pull request #439 provided by Robert Rodewald. (markt)
Clarify the documentation of the compressionMinSize and
compressibleMimeType HTTP Connector
attributes. Pull request #442 provided by crisgeek. (markt)
Other
Fix failing build when building on non-English locales. Pull request
#441 provided by Dachuan J. (markt)
Update to JSign version 4.0 to enable code signing without the need for
the installation of additional client tools. (markt)
Add Apache Derby 10.14.2.0 to the testsuite dependencies, for JDBC
and DataSource testing. (remm)
Update the internal fork of Apache Commons BCEL to 40d5eb4 (2021-09-01,
6.6.0-SNAPSHOT). Code clean-up only. (markt)
Update the internal fork of Apache Commons Codec to fd44e6b (2021-09-01,
1.16-SNAPSHOT). Minor refactoring. (markt)
65661: Update the internal fork of Apache Commons FileUpload
to 33d2d79 (2021-09-01, 2.0-SNAPSHOT). Refactoring and code clean-up. As
a result of Commons File Upload now using
java.nio.file.Files, applications using multi-part uploads
need to ensure that the JVM is configured with sufficient direct memory
to store all in progress multi-part uploads. (markt)
Update the internal fork of Apache Commons Pool to 2.11.1 (2021-08-17).
Improvements, code clean-up and refactoring. (markt)
Update the internal fork of Apache Commons DBCP to 2.9.0 (2021-08-03).
Improvements, code clean-up and refactoring. (markt)
Update the packaged version of the Tomcat Native Library to 1.2.31 to
pick up Windows binaries built with OpenSSL 1.1.1l.(markt)
Switch to the CDN as the primary download location for ASF dependencies.
(markt)
Improvements to Chinese translations contributed by syseal, wolibo,
ZhangJieWen and DigitalFatCat. (markt)
Improvements to Japanese translations contributed by tak7iji. (markt)
Improvements to Korean translations. (woonsan)
2021-08-05 Tomcat 10.0.10 (markt)
Catalina
65476: Correct an error in some code clean-up that mean that
web application classes were not configured with the correct package.
(markt)
not released Tomcat 10.0.9 (markt)
Catalina
65411: Always close the connection when an uncaught
NamingException occurs to avoid connection locking.
Submitted by Ole Ostergaard. (remm)
65433: Correct a regression in the fix for 65397
where a StringIndexOutOfBoundsException could be triggered
if the canonical path of the target of a symlink was shorter than the
canonical path of the directory in which the symlink had been created.
Patch provided by Cedomir Igaly. (markt)
65443: Refactor the CorsFilter to make it easier
to extend. (markt)
To avoid unnecessary cache revalidation, do not add an HTTP
Expires header when setting adding an HTTP header of
CacheControl: private. (markt)
Coyote
When writing an HTTP/2 response via sendfile (only enabled when
useAsyncIO is true) the connection flow control window was
sometimes ignored leading to various error conditions. sendfile now
checks both the stream and connection flow control windows before
writing. (markt)
Add debug logging for writing an HTTP/2 response via sendfile. (markt)
Correct bugs in the HTTP/2 connection flow control management that meant
it was possible for a connection to stall waiting for a connection flow
control window update that had already arrived. Any streams on that
connection that were trying to write when this happened would time out.
(markt)
65448: When using TLS with NIO, it was possible for a
blocking response write to hang just before the final TLS packet
associated with the response until the connection timed out at which
point the final packet would be sent and the connection closed. (markt)
65454: Fix a race condition that could result in a delay to
a new request. The new request could be queued to wait for an existing
request to finish processing rather than the thread pool creating a new
thread to process the new request. (markt)
65460: Correct a regression introduced in the previous
release in the change to reduce the number of small HTTP/2 window
updates sent for streams. A logic error meant that small window updates
for the connection were dropped. This meant that the connection flow
window slowly reduced over time until nothing could be sent. (markt)
Web applications
65404: Correct a regression in the fix for 63362
that caused the server status page in the Manager web application to be
truncated if HTTP upgrade was used such as when starting a WebSocket
connection. (markt)
Other
Improvements to Chinese translations contributed by ZhangJieWen and
chengzheyan. (markt)
Improvements to French translations. (remm)
Improvements to Japanese translations contributed by tak7iji. (markt)
Improvements to Korean translations. (woonsan)
Use of GraalVM native images no longer automatically disables JMX
support. JMX support may still be disabled by calling
org.apache.tomcat.util.modeler.Registry.disableRegistry().
(markt)
2021-07-02 Tomcat 10.0.8 (markt)
Catalina
Refactor the RemoteIpValve to use the common utility method
for list to comma separated string conversion. (markt)
Refactor JNDIRealm$JNDIConnection so its fields are
accessible to sub-classes of JNDIRealm. (markt)
Fix serialization warnings in UserDatabasePrincipal
reported by SpotBugs. (markt)
65397: Calls to
ServletContext.getResourcePaths() no longer include
symbolic links in the results unless allowLinking has been
set to true. If a resource is skipped because of this
change, a warning will be logged as this typically indicates a
configuration issue. (markt)
Coyote
65368: Improve handling of clean closes of inbound TLS
connections. Treat them the same way as clean closes of non-TLS
connections rather than as unknown errors. (markt)
Modify the HTTP/2 connector not to sent small updates for stream flow
control windows to the user agent as, depending on how the user agent is
written, this may trigger small writes from the user agent that in turn
trigger the overhead protection. Small updates for stream flow control
windows are now combined with subsequent flow control window updates for
that stream to ensure that all stream flow control window updates sent
from Tomcat are larger than overheadWindowUpdateThreshold.
(markt)
Add additional debug logging to track the current state of the HTTP/2
overhead count that Tomcat uses to detect and close potentially
malicious connections. (markt)
Many HTTP/2 requests from browsers will trigger one overhead frame and
one non-overhead frame. Change the overhead calculation so that a
non-overhead frame reduces the current overhead count by 2 rather than
1. This means that, over time, the overhead count for a well-behaved
connection will trend downwards. (markt)
Change the initial HTTP/2 overhead count from -10 to
-10 * overheadCountFactor. This means that, regardless of
the value chosen for overheadCountFactor, when a connection
opens 10 overhead frames in a row will be required to trigger the
overhead protection. (markt)
Increase the default overheadCountFactor from
1 to 10 and change the reduction in overhead
count for a non-overhead frame from -2 to -20.
This allows for a larger range (0-20) to be used for
overheadCountFactor providing for finer-grained control.
(markt)
Modify the parsing of HTTP header values that use the
1#token to ignore empty elements as per RFC 7230 section 7
instead of treating the presence of empty elements as an error. (markt)
Expand the unit tests for HttpServlet.doHead() and correct
the flushing of the response buffer. The buffer used to behave as if it
was one byte smaller than the configured size. The buffer was flushed
(and the response committed if required) when the buffer was full. The
buffer is now flushed (and the response committed if required) if the
buffer is full and there is more data to write. (markt)
Fix an issue where concurrent HTTP/2 writes (or concurrent reads) to the
same connection could hang and eventually timeout when async IO was
enabled (it is enabled by default). (markt)
Jasper
65387: Correct a regression in the fix for 65124
and restore the local definition of out for tags that
implement TryCatchFinally. (markt)
65390: Correct a regression in the fix for 65124
and restore code that was removed in error leading to JSP compilation
failures in some circumstances. (markt)
Update to the Eclipse JDT compiler 4.20. (markt)
Add support for specifying Java 17 (with the value 17) as
the compiler source and/or compiler target for JSP compilation. If used
with an Eclipse JDT compiler version that does not support these values,
a warning will be logged and the latest supported version will used.
(markt)
65377: Update the Java code generation for JSPs not to use
the boxed primitive constructors as they have been deprecated in Java 9
and marked for future removal in Java 16. valueOf() is now
used instead. (markt)
WebSocket
Refactor the DigestAuthenticator to reuse a shared
SecureRandom instance rather than create a new one to
generate the cnonce if required. (markt)
Web applications
65385: Correct the link in the documentation web application
the Maven Central repository. (markt)
Other
Use JSign to integrate the build script with the code signing service to
enable release builds to be created on Linux as well as Windows. (markt)
Update the OWB module to Apache OpenWebBeans 2.0.23. (remm)
Update the CXF module to Apache CXF 3.4.4. (remm)
65369 / #422: Add the additional
--add-opens=... options required for running Tomcat on Java
16 onwards to the service.bat script to align it with the
other start-up scripts. PR provided by MCMicS. (markt)
Update JUnit to version 4.13.2. (markt)
Update EasyMock to 4.3. (markt)
Update Objenesis to 3.2. (markt)
Update UnboundID to 6.0.0. (markt)
Update CheckStyle to 8.43. (markt)
Update SpotBugs to 4.2.3. (markt)
Update OSGi annotations to 1.1.0. (markt)
2021-06-15 Tomcat 10.0.7 (markt)
Catalina
65301: RemoteIpValve will now avoid getting
the local host name when it is not needed. (remm)
65308: NPE in JNDIRealm when no userRoleAttribute
is given. (fschumacher)
#412: Add commented out, sample users for the Tomcat Manager app
to the default tomcat-users.xml file. Based on a PR by
Arnaud Dagnelies. (markt)
#418: Add a new option, pass-through, to the
default servlet's useBomIfPresent initialization parameter
that causes the default servlet to leave any BOM in place when
processing a static file and not to use the BOM to determine the
encoding of the file. Based on a pull request by Jean-Louis Monteiro.
(markt)
#419: When processing POST requests of type
multipart/form-data for parts without a filename that are
added to the parameter map in String form, check the size of the part
before attempting conversion to String. Pull request provided by
tianshuang. (markt)
AprLifecycleListener does not show dev version suffix for libtcnative
and libapr. (michaelo)
Refactor principal handling in UserDatabaseRealm using
an inner class that extends GenericPrincipal. (remm)
Enable the default doHead() implementation in
HttpServlet to correctly handle responses where the content
length needs to be represented as a long since it is larger than the
maximum value that can be represented by an int. (markt)
Avoid synchronization on roles verification for the memory
UserDatabase. (remm)
Fix the default doHead() implementation in
HttpServlet to correctly handle responses where the Servlet
calls ServletResponse.reset() and/or
ServletResponse.resetBuffer(). (markt)
Fix the default doHead() implementation in
HttpServlet to correctly handle responses generated using
the Servlet non-blocking API. (markt)
Coyote
65303: Fix a possible NullPointerException if
an error occurs on an HTTP/1.1 connection being upgraded to HTTP/2 or on
a pushed HTTP/2 stream. (markt)
Simplify AprEndpoint socket bind for all platforms. (michaelo)
65340: Add missing check for a negative return value for
Hpack.decodeInteger in the HpackDecoder,
which could cause a NegativeArraySizeException exception.
Submitted by Thomas, and verified the fix is present in the donated
hpack code in a further update. (remm)
Add debug logging for HTTP/2 HPACK header decoding. (markt)
Correct parsing of HTTP headers consisting of a list of tokens so that a
header with an empty token is treated consistently regardless of whether
the empty token is at the start, middle or end of the list of tokens.
(markt)
Remove support for the identity transfer encoding. The
inclusion of this encoding in RFC 2616 was an error that was corrected
in 2001. Requests using this transfer encoding will now receive a 501
response. (markt)
Process transfer encoding headers from both HTTP 1.0 and HTTP 1.1
clients. (markt)
Ensure that if the transfer encoding header contains the
chunked, that the chunked encoding is the
final encoding listed. (markt)
Jasper
Review code used to generate Java source from JSPs and tags and remove
code found to be unnecessary. (markt)
Refactor use of internal ChildInfo class to use compile
time type checking rather than run time type checking. (markt)
65124: Partial fix. When generating Java source code to call
a tag handler, only define the local variable JspWriter out
when it is going to be used. (markt)
Update the web-fragment.xml included in
jasper.jar and jasper-el.jar to use the
Servlet 5.0 schema. (markt)
Update JspC to generate web.xml and
web-fragment.xml files using Servlet 5.0 schemas. (markt)
65358: Improve expression language method matching for
methods with varargs. Where multiple methods may match the provided
parameters, the method that requires the fewest varargs is preferred.
(markt)
65332: Add a commented out section in
catalina.policy that provides the necessary permissions to
compile JSPs with javac when running on Java 9 onwards with a security
manager. It is commented out as it will cause errors if used with
earlier Java versions. (markt)
WebSocket
65317: When using permessage-deflate, the
WebSocket connection was incorrectly closed if the uncompressed payload
size was an exact multiple of 8192. Based on a patch provided by Saksham
Verma. (markt)
Update the web-fragment.xml included in
tomcat-websocket.jar to use the Servlet 5.0 schema. (markt)
65342: Correct a regression introduced with the fix for
65262 that meant Tomcat's WebSocket implementation would only
work with Tomcat's implementation of the Jakarta WebSocket API. (markt)
Web applications
Improve the description of the maxConnections and
acceptCount attributes in the Connector section of the
documentation web application. (markt)
Other
Improvements to French translations. (remm)
Improvements to Korean translations. (woonsan)
65362: Correct a regression in the previous release. The
change to create OSGi Require-Capability sections in
manifests for Jakarta API JARs manually rather than with bnd annotations
did not add the necessary manual entries to the embedded JARs. (markt)
Update the packaged version of the Tomcat Native Library to 1.2.30. Also
update the minimum recommended version to 1.2.30. (markt)
2021-05-12 Tomcat 10.0.6 (markt)
Catalina
Expand coverage of unit tests for JNDIRealm using the UnboundID LDAP SDK
for Java. (markt)
65224: Ensure the correct escaping of attribute values and
search filters in the JNDIRealm. (markt)
65235: Add missing attributes to the MBean descriptor file
for the RemoteIpValve. (markt)
65244: HandlesTypes should include classes that use
the specified annotation types on fields or methods. (remm)
65251: Correct a regression introduced in 10.0.3 that meant
that the auto-deployment process may attempt a second, concurrent
deployment of a web application that is being deployed by the Manager
resulting in one of the deployments failing and errors being reported.
(markt)
Improve the SSLValve so it is able to handle escaped
client certificate headers from Nginx. Based on a patch by Florent
Guillaume. (markt)
Coyote
Ensure that all HTTP requests that contain an invalid character in the
protocol component of the request line are rejected with a 400 response
rather than some requests being rejected with a 505 response. (markt)
When generating the error message for an HTTP request with an invalid
request line, ensure that all the available data is included in the
error message. (markt)
65272: Restore the optional HTTP feature that allows
LF to be treated as a line terminator for the request line
and/or HTTP headers lines as well as the standard CRLF.
This behaviour was previously removed as a side-effect of the fix for
CVE-2020-1935. (markt)
Jasper
Review code used to generate Java source from JSPs and tags and remove
code found to be unnecessary. (markt)
<servlet> entries in web.xml that include a
<jsp-file> element and a negative
<load-no-startup> element that is not the default
value of -1 will no longer be loaded at start-up. This
makes it possible to define a <jsp-file> that will
not be loaded at start-up. (markt)
Allow the JSP configuration option
useInstanceManagerForTags to be used with Tags that are
implemented as inner classes. (markt)
WebSocket
Refactor the way Tomcat passes path parameters to POJO end points to
simplify the code. (markt)
65262: Refactor the creation of WebSocket end point, decoder
and encoder instances to be more IoC friendly. Instances are now created
via the InstanceManager where possible. (markt)
Web applications
65235: Correct name of changeLocalName in the
documentation for the RemoteIpValve. (markt)
65265: Avoid getting the boot classpath when it is not
available in the Manager diagnostics. (remm)
Other
Create OSGi Require-Capability sections in manifests for
Jakarta API JARs manually rather than via the
aQute.bnd.annotation.spi.ServiceConsumer annotation as this
triggers TCK failures for downstream consumers of the API JARs. (markt)
Update the packaged version of the Tomcat Native Library to 1.2.28.
(markt)
Update the OWB module to Apache OpenWebBeans 2.0.22. (remm)
Update the CXF module to Apache CXF 3.4.3. (remm)
65218: Update the version number shown on the left-hand
banner of the Tomcat installer for Windows to Apache Tomcat 10. (markt)
Move SystemPropertySource to be a regular class to allow
more precise configuration if needed. The system property source will
still always be enabled. (remm)
Improvements to Chinese translations. Provided by bytesgo. (mark)
Improvements to French translations. (remm)
Improvements to Korean translations. (woonsan)
Update the version of the Tomcat Migration Tool for Jakarta EE used to
provide automatic deployment for Java EE applications to 1.0.0. (markt)
2021-04-06 Tomcat 10.0.5 (markt)
Catalina
Avoid NPE when a JNDI reference cannot be resolved in favor of a
NamingException. (remm)
Avoid using reflection for setting properties on the webapp
classloader. Based on a patch submitted by Romain Manni-Bucau. (remm)
Coyote
Improve consistency of OpenSSL error stack handling in the TLS engine,
and log all errors found as debug. (remm)
Ensure that HTTP/2 streams are only recycled once as multiple attempts
to recycle an HTTP/2 stream may result in
NullPointerExceptions. (markt)
Simplify the closing on an HTTP/2 stream when an error condition is
present. (markt)
64771: Prevent concurrent calls to
ServletInputStream.isReady() corrupting the input buffer.
(markt)
65179: Ensure that the connection level flow control window
from the client to the server is updated when handling DATA frames
received for completed streams else the flow control window may become
exhausted. (markt)
65203: Fix a regression introduced in 10.0.4 that meant that
an error during an asynchronous read broke all future asynchronous reads
associated with the same request instance. (markt)
Disable keep-alive when inconsistent content delimitation is present in
a request. (remm)
Jasper
Include the new org.apache.jasper.optimizations package in
the list of OSGi exported packages for the Jasper embedded JAR. Patch
provided by Sokratis Zappis. (markt)
Add a new option for the trimSpaces configuration.
extended will attempt to remove leading and trailing
whitespace from template text and collapse sequences of whitespace and
newlines within template text into a single new line. Based on a pull
request by kamnani. (markt)
Other
Implement the first phase of reproducible builds. Sequential builds on
the same machine now produce identical output provided that the Ant
property ant.tstamp.now is set. The minimum required Ant
version is now 1.9.10. (markt)
Improvements to Chinese translations. Provided by Ruan Wenjun. (mark)
Improvements to French translations. (remm)
Improvements to Japanese translations. Provided by kfujino and
Shirayuking. (markt)
Improvements to Korean translations. (woonsan)
Update the packaged version of the Tomcat Native Library to 1.2.27.
(markt)
2021-03-10 Tomcat 10.0.4 (markt)
Catalina
Fix rename operation throwing an exception during the webapp migration
process. (remm)
not released Tomcat 10.0.3 (markt)
Catalina
Revert an incorrect fix for a potential resource leak that broke
deployment via the Ant deploy task. (markt)
Improve error message for failed ConfigurationSource lookups in the
Catalina implementation. (remm)
65135: Rename Context method
isParallelAnnotationScanning to
getParallelAnnotationScanning for consistency and ease
of use in JMX descriptors. (remm)
Allow the loader to directly use the Tomcat Migration Tool for JakartaEE
as a ClassFileTransformer using the
jakartaConverter attribute. This only supports javax to
jakarta conversion for classes, not for classloader resources or
static files. (remm)
Integrate the Tomcat Migration Tool for JakartaEE at deployment time.
Java EE web applications placed in the webapps-javaee
directory will be migrated to Jakarta EE 9 and placed in the
webapps where it will be deployed (or not) based on the
current settings for automatic deployment. (markt)
64938: Align the behaviour when null is passed
to the ServletResponse methods
setCharacterEncoding(), setContentType() and
setLocale() with the recent clarification from the Jakarta
Servlet project of the expected behaviour in these cases. (markt)
Ensure that the AsyncListener.onError() event is triggered
when a I/O error occurs during non-blocking I/O. There were some cases
discovered where this was not happening. (markt)
Make the non-blocking I/O error handling more robust by handling the
case where the application code swallows an IOException in
WriteListener.onWritePossible() and
ReadListener.onDataAvailable(). (markt)
Correct syntax error in output of JsonErrorReportValve.
Pull request provided by Viraj Kanwade. (markt)
Make the StandardContext.postWorkDirectory() protected
rather than private to help users wishing to customise the default
work directory behaviour. (markt)
Coyote
64943: Add support for Unix Domain Sockets to
org.apache.coyote.http11.Http11AprProtocol. Depends on
tomcat-native 1.2.26 and up. (minfrin)
65118: Fix a potential NullPointerException when
pruning closed HTTP/2 streams from the connection. (markt)
Avoid NullPointerException when a secure channel is closed before the
SSL engine was initialized. (remm)
Ensure that the ReadListener's onError() event
is triggered if the client closes the connection before sending the
entire request body and the server is ready the request body using
non-blocking I/O. (markt)
65137: Ensure that a response is not corrupted as well as
incomplete if the connection is closed before the response is fully
written due to a write timeout. (markt)
Related to bug 65131, make sure all errors from OpenSSL are
fully cleared, as there could be more than one error present after
an operation (confirmed in the OpenSSL API documentation). (remm)
Make handling of OpenSSL read errors more robust when plain text data is
reported to be available to read. (markt)
Correct handling of write errors during non-blocking I/O to ensure that
the associated AsyncContext was closed down correctly.
(markt)
Web applications
65136: Remove the restriction that prevented the Manager web
application deploying different web applications in parallel. This
required some refactoring, most notably to
HostConfig.check() and how it is used. (markt)
Other
Update the OWB module to Apache OpenWebBeans 2.0.21. (remm)
Update the CXF module to Apache CXF 3.4.2. (remm)
Improvements to French translations. (remm)
Improvements to Korean translations. (woonsan)
Improvements to Brazilian Portuguese translations. Provided by Thiago.
(mark)
Improvements to Russian translations. Provided by Azat. (mark)
Improvements to Chinese translations. Provided by shawn. (mark)
Update to bnd 5.3.0. (markt)
2021-02-02 Tomcat 10.0.2 (markt)
Catalina
65106: Fix the ConfigFileLoader handling of file URIs when
running under a security manager on some JREs. (markt)
Coyote
Ensure that SNI provided host names are matched to SSL virtual host
configurations in a case insensitive manner. (markt)
65111: Free direct memory buffers in the APR connector.
(remm)
not released Tomcat 10.0.1 (markt)
Catalina
60781: Escape elements in the access log that need to be
escaped for the access log to be parsed unambiguously.
(fschumacher/markt)
64110: Add support for additional TLS related request
attributes that provide details of the protocols and ciphers requested
by a client in the initial TLS handshake. (markt)
Let the RemoteCIDRValve inherit from
RequestFilterValve and support all of its features.
Especially add support for connector specific configuration
using addConnectorPort. (rjung)
Add peerAddress to coyote request, which contains
the IP address of the direct connection peer. If a reverse proxy
sits in front of Tomcat and the protocol used is AJP or HTTP
in combination with the RemoteIp(Valve|Filter),
the peer address might differ from the remoteAddress.
The latter then contains the address of the client in front of the
reverse proxy, not the address of the proxy itself.
Support for the peer address has been added to the
RemoteAddrValve and RemoteCIDRValve with the new attribute
usePeerAddress. This can be used to restrict access
to Tomcat based on the reverse proxy IP address, which is especially
useful to harden access to AJP connectors. The peer address can also
be logged in the access log using the new %{peer}a
syntax. (rjung)
Avoid uncaught InaccessibleObjectException on Java 16 trying to clear
references threads. (remm)
65033: Fix JNDI realm error handling when connecting to a
failed server when pooling was not enabled. (remm)
65047: If the AccessLogValve is unable to open
the access log file, include information on the current user in the
associated log message (markt)
Coyote
Additional fix for 64830 to address an edge case that could
trigger request corruption with h2c connections. (markt)
64974: Improve handling of pipelined HTTP requests in
combination with the Servlet non-blocking IO API. It was possible that
some requests could get dropped. (markt)
Add support for using Unix domain sockets for NIO when running
on Java 16 or later. This uses NIO specific
unixDomainSocketPath and
unixDomainSocketPathPermissions attributes.
Based on a PR submitted by Graham Leggett. (remm)
65001: Fix error handling for exceptions thrown from calls
to ReadListener and WriteListener. (markt)
Avoid possible infinite loop in OpenSSLEngine.unwrap
when the destination buffers state is changed concurrently. (remm)
Jasper
Add a new StringInterpreter interface that allows
applications to provide customised string attribute value to type
conversion within JSPs. This allows applications to provide a conversion
implementation that is optimised for the application. (markt)
64965: JspContextWrapper.findAttribute should
ignore expired sessions rather than throw an
IllegalStateException. (remm)
Update to the Eclipse JDT compiler 4.18. (markt)
Web applications
65007: Clarify that the commands shown in the TLS
documentation for importing a signed TLS certificate from a certificate
authority are typical examples that may need to be adjusted in some
cases. (markt)
Tribes
Work around DNS caching for the DNS provider of the cloud membership.
(jfclere)
Other
Improvements to Chinese translations. Provided by leeyazhou and Yi Shen.
(markt)
Improvements to French translations. (remm)
Improvements to Korean translations. (woonsan)
Update the packaged version of the Tomcat Native Library to 1.2.26.
(markt)
Update the internal fork of Apache Commons Pool to 2.9.1-SNAPSHOT
(2021-01-15). (markt)
Update the internal fork of Apache Commons DBCP to 2.9.0-SNAPSHOT
(2021-01-15). (markt)
Migrate to new code signing service. (markt)
Use java.nio.file.Path to test for one directory being a
sub-directory of another in a consistent way. (markt)
Update to Commons Daemon 1.2.4. (markt)
Improvements to Brazilian Portuguese translations. Provided by Rual
Zaninetti Rosa and Lucas. (markt)
Improvements to Russian translations. Provided by Polina and Azat.
(markt)
Update the NSIS Installer used to build the Windows installer to version
3.06.1. (kkolinko)
2020-12-08 Tomcat 10.0.0 (markt)
Catalina
56181: Update the RemoteIpValve and RemoteIpFilter so that
calls to ServletRequest.getRemoteHost() are consistent with
the return value of ServletRequest.getRemoteAddr() rather
than always returning a value for the proxy. (markt)
56890: Align the behaviour of
ServletContext.getRealPath(String path) with the recent
clarification from the Servlet specification project. If the path
parameter does not start with / then Tomcat processes the
call as if / is appended to the beginning of the
provided path. (markt)
64080: Enhance the graceful shutdown feature. Includes a new
option for StandardService,
gracefulStopAwaitMillis, that allows a time to be
specified to wait for client connections to complete and close before
the Container hierarchy is stopped. (markt)
64921: Ensure that the LoadBalancerDrainingValve
uses the correct setting for the secure attribute for any session
cookies it creates. Based on a pull request by Andreas Kurth. (markt)
64947: Don't assume that the Upgrade header has
been set on the HttpServletResponse before any call is made
to HttpServletRequest.upgrade(). (markt)
Ensure that values are not duplicated when manipulating the vary header.
Based on a pull request by Fredrik Fall. (markt)
Coyote
The APR/Native Connectors for both HTTP and AJP have been deprecated and
will be removed in Apache Tomcat 10.1.x onwards. (markt)
64944: Ensure that the bytesSent metric is correctly updated
when compression is enabled. (markt)
WebSocket
64951: Fix a potential file descriptor leak when WebSocket
connections are attempted and fail. Patch provided by Maurizio Adami.
(markt)
Web applications
Correct a regression in the addition of the HTTP header security filter
to the examples web application that prevented the Servlet examples that
depend on the asynchronous API from functioning correctly.
(kkolinko/markt)
Tribes
Start all core threads when starting the receiver and dispatch
interceptor. (kfujino)
Other
Update the OWB module to Apache OpenWebBeans 2.0.20. (remm)
Update the CXF module to Apache CXF 3.4.1. (remm)
64931: Implement validation of changelog.xml
file at build time. (kkolinko)
Update to Maven Ant Resolver Tasks 1.3.0. (markt)
62695: Provide SHA-256 and SHA-512 checksums for files
published via Maven. (markt)
2020-11-19 Tomcat 10.0.0-M10 (markt)
Catalina
55559: Add a new attribute, localJndiResource,
that allows a UserDatabaseRealm to obtain a UserDatabase instance from
the local (web application) JNDI context rather than the global JNDI
context. This option is only useful when the Realm is defined on the
Context. (markt)
64805: Correct imports used by JMXProxyServlet.
(markt)
Fix JNDIRealm pooling problems retrying on another bad connection. Any
retries are made on a new connection, just like with the single
connection scenario. Also remove all connections from the pool after
an error. (remm)
Add org.apache.coyote.http11.Http11Nio2Protocol to the list
of classes which could be instantiated via reflection in GraalVM.
(mgrigorov)
Add JsonErrorReportValve that extends the
ErrorReportValve that returns response as JSON instead of
HTML. (kfujino)
Add GraalVM config for Tomcat JNI related classes. This makes it
possible to use the APR protocol in GraalVM native images.
To use it add the following to the native-image arguments:
-H:JNIConfigurationResources=META-INF/native-image/org.apache.tomcat.embed/tomcat-embed-core/tomcat-jni.json
(mgrigorov)
JNDIRealm connections should only be created with the container
classloader as the thread context classloader, just like for the JAAS
realm. (remm)
64871: Log a warning if Tomcat blocks access to a file
because it uses symlinks. (markt)
Rename JDBCStore to DataSourceStore
and remove bottlenecks for database backed session store. Legacy JDBC
driver configuration is no longer supported. Patch submitted by
Philippe Mouawad. (remm)
Coyote
Refactor the HTTP/2 window update handling for padding in data frames to
ensure that the connection window is correctly updated after a data
frame with zero length padding is received. (markt)
Fix processing of URIs with %nn encoded solidus characters when
encodedSolidusHandling was set to passthrough
and the encoded solidus was preceded by other %nn encoded characters.
Based on a pull request by willmeck. (markt)
63362: Add collection of statistics for HTTP/2, WebSocket and
connections upgraded via the HTTP upgrade mechanism. (markt)
Restore exception catch around Poller.events, as it would cause
the NIO poller thread to exit. This is a regression caused when
the Poller.events method was refactored. (remm)
Provide messages for some SocketTimeoutException instances
that did not have one. (markt)
Avoid most of the thread pool use during NIO2 socket accept. Patch
submitted by Anil Gursel. (remm)
Add additional debug logging for I/O issues when communicating with the
user agent. (markt)
64830: Fix concurrency issue in HPACK decoder. (markt)
Fix a concurrency issue in the NIO connector that could cause newly
created connections to be removed from the poller. (markt)
Jasper
64784: Don't include the time the Java file was generated as
a comment when generating Java files for JSPs and/or tags if the Java
file was created during pre-compilation. This is to aid repeatable
builds. (markt)
64794: Security exception reading system property on
JspRuntimeLibrary use. (remm)
Add support for specifying Java 16 (with the value 16) as
the compiler source and/or compiler target for JSP compilation. If used
with an ECJ version that does not support these values, a warning will
be logged and the latest supported version will used. (markt)
Update to the Eclipse JDT compiler 4.17. (markt)
64849: Correct JPMS metadata for the Jakarta Expression
Language JARs to provide missing ServiceLoader information. (markt)
WebSocket
64848: Fix a variation of this memory leak when a write I/O
error occurs on a non-container thread. (markt)
Web applications
64799: Added missing resources to host-manager web app. (isapir)
64797: Align manager.xml template file in Host-Manager with
context.xml of real Manager web application. (isapir)
Configure the examples web applications to set
SameSite=strict for all cookies, including session cookies,
created by the application. (markt)
Configure the examples, Manager and Host Manager to use the HTTP header
security filter with default settings apart from no HSTS header. Based
on a suggestion by Debangshu Kundu. (markt)
Other
Improvements to French translations. (remm)
Improvements to Korean translations. (woonsan)
Improvements to Russian translations. Provided by Azat. (markt)
64870: Update to bnd 5.3.0-SNAPSHOT to work around a
JRE bug.
(markt)
2020-10-09 Tomcat 10.0.0-M9 (markt)
Catalina
The health check valve will now check the state of its associated
containers to report availability. (remm)
Fix race condition when saving and recycling session in
PersistentValve. (kfujino)
Remove the JDBCRealm. (markt)
Correct numerous spellings throughout the code base. Based on a pull
request from John Bampton. (markt)
64715: Add PasswordValidationCallback to the Jakarta
Authentication implementation. Patch provided by Robert Rodewald.
(markt)
Allow using the utility executor for annotation scanning. Patch
provided by Jatin Kamnani. (remm)
64751: Correct the JPMS module descriptor so the embedded
JARs may be used with JPMS. (markt)
When performing an incremental build, ensure bnd does not create
unwanted JPMS dependencies between embedded JARs. (markt)
Add a bloom filter to speed up archive lookup and improve deployment
speed of applications with a large number of JARs. Patch
provided by Jatin Kamnani. (remm)
Throw SQLException instead of
NullPointerException when failing to connect to the
database. (kfujino)
64735: Ensure that none of the methods on a
ServletContext instance always fail when running under a
SecurityManager. Pull request provided by Kyle Stiemann. (markt)
64765: Ensure that the number of currently processing threads
is tracked correctly when a web application is undeployed, long running
requests are being processed and
renewThreadsWhenStoppingContext is enabled for the web
application. (markt)
Improve the error messages when running under JPMS without the necessary
options to enable reflection required by the memory leak prevention /
detection code. (markt)
When estimating the size of a resource in the static resource cache,
include a specific allowance for the path to the resource. Based on a
pull request by blueSky1825821. (markt)
Coyote
Do not send an HTTP/2 PING frame to measure round-trip time when it is
known that the HTTP/2 connection is not in a good state. (markt)
Ensure HTTP/2 timeouts are processed for idle connections. (markt)
64743: Correct a regression introduced in 10.0.0-M7 that
caused a Connection: close header to be added to the
response if the Connector was configured with
maxSwallowSize=-1. (markt)
When logging HTTP/2 debug messages, use consistent formatting for stream
identifiers. (markt)
Correct some double counting in the code that tracks the number of
in-flight asynchronous requests. The tracking enables Tomcat to shutdown
gracefully when asynchronous processing is in use. (markt)
Improve the error handling for the HTTP/2 connection preface when the
Connector is configured with useAsyncIO="true".
(markt)
Refactor the handling of closed HTTP/2 streams to reduce the heap usage
associated with used streams and to retain information for more streams
in the priority tree. (markt)
Don't send the Keep-Alive response header if the connection has been
explicitly closed. (markt)
64710: Avoid a BufferOverflowException if an
HTTP/2 connection is closed while the parser still has a partial HTTP/2
frame in the input buffer. (markt)
Jasper
Use lazy instantiation to improve the performance when working with
listeners added to the ELContext. Pull request provided by
Thomas Andraschko. (markt)
Web applications
Configure the Manager and Host Manager web applications to set
SameSite=strict for all cookies, including session cookies,
created by the application. (markt)
Update the Manager How-To in the documentation web application to
clarify when a user may wish to deploy additional instances of the
Manager web application. (markt)
64774: Review references to Tomcat 9 in the documentation
web application and remove them or update them to refer to Tomcat 10 as
appropriate. (markt)
Other
Update to Commons Daemon 1.2.3. This adds support to jsvc for
--enable-preview and native memory tracking (Procrun
already supported these features), adds some additional debug logging and
adds a new feature to Procrun that outputs the command to (re-)configure
the service with the current settings. (markt)
When building, only rebuild JAR files (including OSGi and JPMS metadata)
if the contents has changed. (markt)
Improvements to Chinese translations. Pull request provided by Yang
Yang. (markt)
Expand coverage of Russian translations. Pull request provided by
Nikolay Gribanov. (markt)
Update the OWB module to Apache OpenWebBeans 2.0.18. (remm)
Update the CXF module to Apache CXF 3.4.0. (remm)
Fix running service.bat when called from $CATALINA_HOME.
(markt)
Complete the fix for 63815. Users wishing to use system
properties that require quoting with catalina.sh and the
debug option must use a JRE that includes the fix for JDK-8234808.
(markt)
Improvements to Chinese translations. Provided by leeyazhou. (markt)
Improvements to Czech translations. Provided by Dušan Hlaváč and Arnošt
Havelka. (markt)
Improvements to French translations. (remm)
Improvements to Korean translations. (woonsan)
Improvements to Spanish translations. Provided by Andrewlanecarr.
(markt)
2020-09-14 Tomcat 10.0.0-M8 (markt)
Catalina
64582: Pre-load the CoyoteOutputStream class to
prevent a potential exception when running under a security manager.
Patch provided by Johnathan Gilday. (markt)
64593: If a request is not matched to a Context, delay
issuing the 404 response to give the rewrite valve, if configured, an
opportunity to rewrite the request. (remm/markt)
Change top package name for generated embedded classes to avoid
conflict with default host name on case insensitive filesystems.
(remm)
Add missing code generation for remaining digester rules. (remm)
Add a dedicated loader for generated code to avoid dynamic class
loading. (remm)
Refactor the Default servlet to provide a single method that can be
overridden (generateETag()) should a custom entity tag
format be required. (markt)
Improve the validation of entity tags provided with conditional
requests. Requests with headers that contain invalid entity tags will be
rejected with a 400 response code. Improve the matching algorithm used
to compare entity tags in conditional requests with the entity tag for
the requested resource. Based on a pull request by Sergey Ponomarev.
(markt)
Correct the description of the storage format for salted hashes in the
Javadoc for MessageDigestCredentialHandler and refactor the
associated code for clarity.
Based on a patch provided by Milo van der Zee. (markt)
Correct the path validation to allow the use of the file system root for
the docBase attribute of a Context. Note that
such a configuration should be used with caution. (markt)
Added filtering expression for requests that are not supposed to use
session in PersistentValve. (kfujino)
Use the correct method to calculate session idle time in
PersistentValve. (kfujino)
Fix path used by the health check valve when it is not associated with
a Context. (remm)
64712: The JASPIC authenticator now checks the
ServerAuthModule for
jakarta.servlet.http.authType and, if present, uses the
value provided. Based on a patch by Robert Rodewald. (markt)
64713: The JASPIC authenticator now checks the value of
jakarta.servlet.http.registerSession set by the
ServerAuthModule when deciding whether or nor to register
the session. Based on a patch by Robert Rodewald. (markt)
Coyote
57661: For requests containing the
Expect: 100-continue header, add optional support to delay
sending an intermediate 100 status response until the servlet reads the
request body, allowing the servlet the opportunity to respond without
asking for the request body. Based on a pull request by malaysf. (markt)
Refactor the implementation of
ServletInputStream.available() to provide a more accurate
return value, particularly when end of stream has been reached. (markt)
Refactor the stopping of the acceptor to ensure that the acceptor thread
stops when a connector is started immediately after it is stopped.
(markt)
64614: Improve compatibility with FIPS keystores. When a FIPS
keystore is configured and the keystore contains multiple keys, the
alias attribute will be ignored and the key used will be implementation
dependent. (jfclere)
64621: Improve handling HTTP/2 stream reset frames received
from clients. (markt)
64660: Avoid a potential NPE in the AprEndpoint if a socket
is closed in one thread at the same time as the poller is processing an
event for that socket in another. (markt)
64671: Avoid several potential NPEs introduced in the changes
in the previous release to reduce the memory footprint of closed HTTP/2
streams. (markt)
Refactor the HTTP/2 implementation to more consistently return a stream
closed error if errors occur after a stream has been reset by the
client. (markt)
Improve handling of HTTP/2 stream level flow control errors and notify
the stream immediately if it is waiting for an allocation when the flow
control error occurs. (markt)
Ensure that window update frames are sent for HTTP/2 connections to
account for DATA frames containing padding including when the associated
stream has been closed. (markt)
Ensure that window update frames are sent for HTTP/2 connections and
streams to account for DATA frames containing zero-length padding.
(markt)
64710: Revert the changes to reduce the memory footprint of
closed HTTP/2 streams as they triggered multiple regressions in the form
of NullPointerExceptions. (markt)
Ensure that the HTTP/2 overhead protection check is performed after
each HTTP/2 frame is processed. (markt)
WebSocket
Requests received via proxies may be marked as using the ws
or wss protocol rather than http or
https. Ensure that such requests are not rejected. PR
provided by Ronny Perinke. (markt)
64848: Fix a potential issue where the write lock for a
WebSocket connection may not be released if an exception occurs during
the write. (markt)
64644: Add support for a read idle timeout and a write idle
timeout to the WebSocket session via custom properties in the user
properties instance associated with the session. Based on a pull request
by sakshamverma. (markt)
Web applications
Remove the localization of the text output of the Manager application
list of contexts and the Host Manager application list of hosts so that
the output is more consistent. PR provided by Holomark. (markt)
Clean-up / standardize the XSL files used to generate the documentation.
PR provided by John Bampton. (markt)
62723: Clarify the effects of some options for cluster
channelSendOptions. Patch provided by Mitch Claborn.
(schultz)
Remove the out of date functional specification section from the
documentation web application. (markt)
Extracted CSS styles from the Manager we application for better code
maintenance and replaced the GIF logo with SVG. (isapir)
Add document for PersistentValve. (kfujino)
Other
Correct a regression in the fix for 64540 and include
org.apache.tomcat.util.modeler.modules and
org.apache.tomcat.util.net.jsse in the list of exported
packages. (markt)
Remove the local copy of the javax.transaction.xa package
which is only used during compilation. The package is provided by the
JRE from Java 1.4 onwards so the local copy should be unnecessary.
(markt)
Rename the local copy of the javax.xml.ws package to
jakarta.xml.ws. (markt)
Improve the quality of the Japanese translations provided with Apache
Tomcat. Includes contributions from Yuki Shira. (markt)
64645: Use a non-zero exit code if the
service.bat does not complete normally. (markt)
Update the internal fork of Apache Commons BCEL to 6.5.0. Code clean-up
only. (markt)
Update the internal fork of Apache Commons Codec to 53c93d0 (2020-08-18,
1.15-SNAPSHOT). Code clean-up. (markt)
Update the internal fork of Apache Commons FileUpload to c25a4e3
(2020-08-26, 2.0-SNAPSHOT). Code clean-up and RFC 2231 support. (markt)
Update the internal fork of Apache Commons Pool to 2.8.1. Code clean-up
and improved abandoned pool handling. (markt)
Update the internal fork of Apache Commons DBCP to 6d232e5 (2020-08-11,
2.8.0-SNAPSHOT). Code clean-up various bug fixes. (markt)
Update the packaged version of the Tomcat Native Library to 1.2.25.
(markt)
2020-07-05 Tomcat 10.0.0-M7 (markt)
Catalina
Remove the error message on start if java.io.tmpdir is
missing and add an explicit error message on application deployment when
the sole feature that depends on it (anti-resource locking) is
configured and can't be used. (markt)
Implement a significant portion of the TLS environment variables for
the rewrite valve. (remm)
Add the Jakarta EE 9 schema. (markt)
64506: Correct a potential race condition in the resource
cache implementation that could lead to
NullPointerExceptions during class loading. (markt)
Add application/wasm to the media types recognised by
Tomcat. Based on a PR by Thiago Henrique Hüpner. (markt)
Fix a bug in HttpServlet so that a 405
response is returned for an HTTP/2 request if the mapped servlet does
implement the requested method rather than the more general
400 response. (markt)
Add generated classes using Tomcat embedded as an optional replacement
for the Catalina configuration files. (remm)
64541: Refactor the DTD used to validate
mbeans-descriptors.xml files to avoid issues when XML
entity expansion is limited or disabled. (markt)
Coyote
Include a Connection: close HTTP header when committing a
response and it is known that the maxSwallowSize limit is
going to be exceeded. (markt)
64509: Correctly parse RFC 2109 version 1 cookies that use a
comma as a separator between cookies when using the RFC 6265 cookie
processor. Based on a patch by W J Carpenter. (markt)
Fix the utility code that converted IPv6 addresses to a canonical form
to correctly handle input addresses that ended with a pair of colons.
Based on a patch by syarramsetty-skyhook. (markt)
Correctly parse RFC 2109 version 1 cookies that have additional linear
white space around cookie attribute names and values when using the RFC
6265 cookie processor. (markt)
Once an HTTP/2 stream has been closed, ensure that the code that cleans
up references that are no longer required is called. (markt)
Reduce the memory footprint of closed HTTP/2 streams. (markt)
Ensure that the HTTP/1.1 processor is correctly recycled when a direct
connection to h2c is made. (markt)
Jasper
Update the JSP document validation to permit 3.0 as a valid
version attribute for the <jsp-root> element. (markt)
Cluster
64560: Refactor the replication of a changed session ID for a
replicated session so that the list of changes associated with the
session is not reset when the session ID changes. (markt)
WebSocket
64563: Add additional validation of payload length for
WebSocket messages. (markt)
Correct the calculation of payload length when four or more bytes are
required to represent the payload length. (markt)
Web Applications
Update all web applications to use the Jakarta EE 9 schema for web.xml.
(markt)
Other
Fix incorrect version format in OSGi manifests. Patch provided by
Raymond Augé. (markt)
64513: Remove bndlib from dependencies as it is not required.
Pull request provided by Raymond Augé. (markt)
64515: Bnd files don't need to be filtered (save some work).
Pull request provided by Raymond Augé. (markt)
Update the OWB module to Apache OpenWebBeans 2.0.17. (remm)
64514: Fixes some missing class dependency issues in bootstrap
to address packaging/dependency concerns for JPMS and OSGi. Pull request
provided by Raymond Augé. (markt)
64521: Avoid moving i18n translations into classes dir since
they are packaged into separate jars. Pull request provided by Raymond
Augé. (markt)
64522: Package jars in effective dependency order. Pull
request provided by Raymond Augé. (markt)
Store common build details in a shared build-defaults.bnd. Pull
request provided by Raymond Augé. (markt)
64532: Update to bnd 5.1.1. Pull request provided by Raymond
Augé. (markt)
64540: Switch from bndwrap task to bnd task, begin generating
a better manifest and make sure the resulting jar contents are correct.
Pull request provided by Raymond Augé. (markt)
64544: Add built libs to the bnd classpath for introspection.
Pull request provided by Raymond Augé. (markt)
Improve the quality and expand the coverage of the French translations
provided with Apache Tomcat. (remm)
64432: Correct a refactoring regression that broke handling
of multi-line configuration in the RewriteValve. Patch provided by Jj.
(markt)
Fix use of multiple parameters when defining RewriteMaps.
(remm/fschumacher)
Add the special internal rewrite maps for case modification and
escaping. (remm/fschumacher)
Correct a regression in an earlier fix that broke the loading of
configuration files such as keystores via URIs on Windows. (markt)
Implement a few rewrite SSL env that correspond to Servlet request
attributes. (remm)
64442: Be more flexible with respect to the ordering of
groups, roles and users in the tomcat-users.xml file.
(fschumacher)
Coyote
Add support for ALPN on recent OpenJDK 8 releases. (remm)
64467: Improve performance of closing idle HTTP/2 streams.
(markt)
Expose server certificate through the SSLSupport
interface. (remm)
64483: Log a warning if an AJP request is rejected because it
contains an unexpected request attribute. (markt)
64485: Fix possible resource leak getting last modified from
ConfigurationSource.Resource. (remm)
Jasper
Update the Jakarta Server Pages API implementation to align with
specification updates to use generics and add missing
@Deprecated annotations. (markt)
64488: Ensure that the ImportHandler from the Expression
Language API is able to load classes from the Java runtime when running
under a SecurityManager. Based on a patch by Volodymyr Siedleck. (markt)
WebSocket
Add default implementations for init() and
destroy() to the Encoder and
Decoder interfaces. (markt)
Consistently throw a DeploymentException when an invalid
endpoint path is specified and catch invalid endpoint paths earlier.
(markt)
Include the target URL in the log message when a WebSocket connection
fails. (markt)
Other
Update the list of known Charsets in the
CharsetCache to include ISO-8859-16, added in
OpenJDK 15. (markt)
Improve the quality and expand the coverage of the French translations
provided with Apache Tomcat. (remm)
64430: Add support for the CATALINA_OUT_CMD
environment variable that defines a command to which captured stdout and
stderr will be redirected. Patch provided by Harald Dunkel. (markt)
Switch from the unsupported Maven Ant Tasks to the supported Maven
Resolver Ant Tasks to upload artifacts to the ASF Maven repository (and
from there to Maven Central). (markt)
Update dependency on bnd to 5.1.0. (markt)
2020-05-11 Tomcat 10.0.0-M5 (markt)
Catalina
Remove useAprConnector flag from
AprLifecycleListener so that the only way to use the APR
connectors is to set the full class name. (remm)
59203: Before calling Thread.stop() (if
configured to do so) on a web application created thread that is not
stopped by the web application when the web application is stopped, try
interrupting the thread first. Based on a pull request by Govinda
Sakhare. (markt)
62912: Don't mutate an application provided content header if
it does not contain a charset. Also remove the outdated workaround for
the buggy Adobe Reader 9 plug-in for IE. (markt)
Remove the reloadable attribute from the
Loader interface as it is duplicated on the
Context interface. (markt)
Reduce reflection use and remove AJP specific code in the Connector.
(remm/markt/fhanik)
Rework the fix for 64021 to better support web applications
that use a custom class loader that loads resources from non-standard
locations. (markt)
Remove redundant sole path/URI from error page message on SC_NOT_FOUND.
(michaelo)
Log a warning if a CredentialHandler instance is added to
an instance of the CombinedRealm (or a sub-class) as the
CombinedRealm doesn't use a configured
CredentialHandler and it is likely that a configuration
error has occurred. (markt)
Add more descriptive error message in DefaultServlet for SC_NOT_FOUND.
(michaelo)
64309: Improve the regular expression used to search for
class loader repositories when bootstrapping Tomcat. Pull request
provided by Paul Muriel Biya-Bi. (markt)
64384: Fix multipart configuration ignoring some parameters
in some cases. (schultz)
64386: WebdavServlet does not send "getlastmodified"
property for resource collections. (michaelo)
Remove reason phrase on WebDAV Multi-Status (207) response. (michaelo)
64398: Change default value separator for property
replacement to :- due to possible conflicts. The
syntax is now ${name:-default}. (remm)
Improve validation of storage location when using FileStore. (markt)
Coyote
Move SocketProperties mbean to its own type rather than
use a subType to improve robustness with tools. (remm)
Include the problematic data in the error message when reporting that
the provided request line contains an invalid component. (markt)
Improve the handling of requests that use an expectation. Do not disable
keep-alive where the response has a non-2xx status code but the request
body has been fully read. (rjung/markt)
64403: Ensure that compressed HTTP/2 responses are not sent
with a content length header appropriate for the original, uncompressed
response. (markt)
Jasper
Remove redundant sole path/URI from error page message on SC_NOT_FOUND.
(michaelo)
Add more descriptive error message in DefaultServlet for SC_NOT_FOUND.
(michaelo)
64373: When a tag file is packaged in a WAR and then that WAR
is unpacked in /WEB-INF/classes ensure that the tag file
can still be found. Patch provided by Karl von Randow. (markt)
Ensure that the Jasper code that interfaces with the Eclipse Compiler
for Java (ECJ) enables Jasper to compile JSPs using ECJ 4.14 onwards
when the JSPs have inner classes. (markt)
Cluster
Refactor Tribes BufferPool and add the
org.apache.catalina.tribes.io.BufferPool.DEFAULT_POOL_SIZE
system property to configure its size. (remm)
Remove java.io based Tribes receiver and sender, in favor of NIO which
was the default. (remm)
Web applications
Fix the saving of a Context configuration file via the scripting
interface of the Manager web application. (markt)
Add a section to the TLS Connector documentation on different key store
types and how to configure them. (markt)
Other
Update JUnit to version 4.13. (markt)
Add missing entries to test class path in sample NetBeans configuration
files. Patch provided by Brian Burch. (markt)
Refactor to use parameterized Collection constructors where
possible. Pull request provided by Lars Grefer. (markt)
Refactor to use empty arrays with Collections.toArray().
Pull request provided by Lars Grefer. (markt)
Refactor loops with a condition to exit as soon as the condition is met.
Pull request provided by Lars Grefer. (markt)
Refactor bulk addition to collections to use addAll()
rather than a loop. Pull request provided by Lars Grefer. (markt)
Expand the coverage of the Chinese translations provided with Apache
Tomcat. Contributions provided by winsonzhao, ZhangJieWen and Lee
Yazhou. (markt)
Improve the quality and expand the coverage of the French translations
provided with Apache Tomcat. (remm)
Improve the quality of the Japanese translations provided with Apache
Tomcat. Includes contributions from Yoshy. (markt)
Improve the quality of the German translations provided with Apache
Tomcat. (markt)
Update the packaged version of the Tomcat Native Library to 1.2.24.
(markt)
Refactor to use enhanced for loops where possible. Pull request by Lars
Grefer. (markt)
Improve IDE support for IntelliJ IDEA. Patch provided by Lars Grefer.
(markt)
Improve the coverage and quality of the Korean translations provided
with Apache Tomcat. (woonsan)
Update dependency on bnd to 5.0.1. (markt)
2020-04-08 Tomcat 10.0.0-M4 (markt)
Catalina
Ensure all URL patterns provided via web.xml are %nn decoded
consistently using the encoding of the web.xml file where specified and
UTF-8 where no explicit encoding is specified. (markt)
Allow a comma separated list of class names for the
org.apache.tomcat.util.digester.PROPERTY_SOURCE
system property. (remm)
64149: Avoid NPE when using the access log valve without
a pattern. (remm)
64226: Reset timezone after parsing a date since the date
format is reused. Test case submitted by Gary Thomas. (remm)
64247: Using a wildcard for jarsToSkip should
not override a possibly present jarsToScan. Based on code
submitted by Iridias. (remm)
Refactor DefaultServlet to avoid using an internal Range structure that
is duplicated from the parsing result. (remm)
Remove
org.apache.catalina.connector.CoyoteAdapter.ALLOW_BACKSLASH
system property, replaced by the allowBackslash attribute
on the Connector. (remm)
Remove
org.apache.catalina.connector.Response.ENFORCE_ENCODING_IN_GET_WRITER
system property, replaced by the
enforceEncodingInGetWriter attribute on the Connector.
(remm)
Remove
org.apache.catalina.session.StandardSession.ACTIVITY_CHECK
system property, replaced by the sessionActivityCheck attribute
on the Manager. (remm)
Remove
org.apache.catalina.session.StandardSession.LAST_ACCESS_AT_START
system property, replaced by the
sessionLastAccessAtStart attribute on the Manager. (remm)
Remove
org.apache.catalina.core.StandardHostValve.ACCESS_SESSION
system property, replaced by the
alwaysAccessSession attribute on the Context. (remm)
Remove
org.apache.catalina.core.ApplicationContext.GET_RESOURCE_REQUIRE_SLASH
system property, replaced by the
contextGetResourceRequiresSlash attribute on the Context. (remm)
Remove
org.apache.catalina.core.ApplicationDispatcher.WRAP_SAME_OBJECT
system property, replaced by the
dispatcherWrapsSameObject attribute on the Context. (remm)
64265: Fix ETag comparison performed by the default servlet.
The default servlet always uses weak comparison. (markt)
Remove
org.apache.catalina.authenticator.Constants.SSO_SESSION_COOKIE_NAME
system property, replaced by the
cookieName attribute on the SSO valve. (remm)
Add support for default values when using ${...} property
replacement in configuration files. Based on a pull request provided by
Bernd Bohmann. (markt)
Coyote
When closing a NIO channel, avoid canceling keys as a workaround for
deadlocks when running on Java 11. Excessive internal NIO
synchronization on channel close is resolved starting with this
Java version. (remm)
When configuring an HTTP Connector, ensure that the encoding specified
for URIEncoding is a superset of US-ASCII as required by
RFC7230. (markt)
Avoid always retrieving the NIO poller selection key when processing
to reduce sync. (remm)
64240: Ensure that HTTP/0.9 requests that contain additional
data on the request line after the URI are treated consistently. Such
requests will now always be treated as HTTP/1.1. (markt)
Expose the HTTP/2 connection ID and stream ID to applications via the
request attributes org.apache.coyote.connectionID and
org.apache.coyote.streamID respectively. (markt)
Replace the system property
org.apache.tomcat.util.buf.UDecoder.ALLOW_ENCODED_SLASH
with the Connector attribute encodedSolidusHandling that
adds an additional option to pass the %2f sequence through
to the application without decoding it in addition to rejecting such
sequences and decoding such sequences. (markt)
Expose the associated HttpServletRequest to the
CookieProcessor when generating a cookie header so the
header can be tailored based on the properties of the request, such as
the user agent, if required. Based on a patch by Lazar Kirchev. (markt)
Jasper
Update to the Eclipse JDT compiler 4.15. (markt)
Add support for specifying Java 14 (with the value 14) and
Java 15 (with the value 15) as the compiler source and/or
compiler target for JSP compilation. If used with an ECJ version that
does not support these values, a warning will be logged and the latest
supported version will used. (markt)
Remove Jasper configuration using system properties and replace them
by a new set of JSP Servlet init parameters. (remm)
Web applications
Correct the documentation web application to remove references to the
org.apache.catalina.STRICT_SERVLET_COMPLIANCE system
property changing the default for the URIEncoding attribute
of the Connector. (markt)
Correct the documentation web application to remove references to the
org.apache.tomcat.util.buf.UDecoder.ALLOW_ENCODED_SLASH
system property changing how the sequence %5c is
interpreted in a URI. (markt)
Tribes
Remove support for the deprecated system property
org.apache.catalina.tribes.dns_lookups. The default value
of false will now always be used. (markt)
Other
Improve the quality and expand the coverage of the French translations
provided with Apache Tomcat. Contribution provided by Tom Bens. (remm)
Expand the coverage of the Chinese translations provided with Apache
Tomcat. Contribution provided by Lee Yazhou. (markt)
64270: Set the documented default umask of 0027
when using jsvc via daemon.sh and allow the umask used to
be configured via the UMASK environment variable as it is
when using catalina.sh. (markt)
Update the OWB module to Apache OpenWebBeans 2.0.16. (remm)
Update the CXF module to Apache CXF 3.3.6. (remm)
Remove the LOGGING_CONFIG environment variable and
replace it with the CATALINA_LOGGING_CONFIG environment
variable to avoid clashes with other components that use
LOGGING_CONFIG. (markt)
2020-03-16 Tomcat 10.0.0-M3 (markt)
Coyote
64202: Use a loop on NIO blocking reads, as it is possible
zero bytes are produced by a network read. (markt/remm)
64210: Correct a regression in the improvements to HTTP
header validation that caused requests to be incorrectly treated as
invalid if a CRLF sequence was split between TCP packets.
Improve validation of request lines, including for HTTP/0.9 requests.
(markt)
Other
64206: Correct a regression introduced in 10.0.0-M1 that
meant that the HTTP port specified when using the Windows Installer was
ignored and 8080 was always used. (markt)
not released Tomcat 10.0.0-M2 (markt)
Catalina
Refactor HttpServlet.doOptions() to improve performance.
(markt)
Disable StandardManager session persistence by default. It can be
enabled back in context.xml. (remm)
Add extension point to DeltaSession to improve subclassing.
Patch provided by ThStock. (schultz)
64153: Ensure that the parent for the web application class
loader is set consistently. (markt)
64166: Ensure that the names returned by
HttpServletResponse.getHeaderNames() are unique. (markt)
Rename org.apache.tomcat.util.digester.Digester$EnvironmentPropertySource
to
org.apache.tomcat.util.digester.EnvironmentPropertySource.
Patch provided by Bernd Bohmann. (markt)
63286: Resolve inconsistencies with access log valve. This
changes the element API to use a nanosecond resolution elapsed time
argument. (remm)
Add new attribute persistAuthentication to both
StandardManager and PersistentManager to
support authentication persistence. Patch provided by Carsten Klein.
(markt)
64184: Avoid repeated log messages if a
MemoryUserDatabase is configured but the specified
configuration file is missing. (markt)
64189: Expose the web application version String as a
ServletContext attribute named
org.apache.catalina.webappVersion. (markt)
Coyote
Fix support of native jakarta servlet attributes in AJP connector.
(remm)
56966: Add use of System.nanoTime to track request
execution time. (remm)
64141: If using a CA certificate, remove a default value
for the truststore file when not using a JSSE configuration. (remm)
Improve robustness of OpenSSLEngine shutdown. Based on code submitted
by Manuel Dominguez Sarmiento. (remm)
Add the TLS request attributes used by IIS to the attributes that an AJP
Connector will always accept. (markt)
A zero length AJP secret will now behave as if it has not been
specified. (remm)
64188: If an error occurs while committing or flushing the
response when using a multiplexing protocol like HTTP/2 that requires
the channel to be closed but not the connection, just close the channel
and allow the other channels using the connection to continue. Based on
a suggestion from Alejandro Anadon. (markt)
Correct the semantics of getEnableSessionCreation and
setEnableSessionCreation for OpenSSLEngine.
Pull request provided by Alexander Scheel. (markt)
64192: Correctly handle case where unread data is returned to
the read buffer when the read buffer is non empty. Ensure a gathering
TLS read stops once the provided ByteBuffers are full or no more data is
available. (markt)
Allow async requests to complete cleanly when the Connector is paused
before complete() is called on a container thread. (markt)
Cluster
Allow configuring the DNSMembershipProvider using the
dns alias. Submitted by Bernd Bohmann. (remm)
Web applications
Expand the documentation for the address attribute of the
AJP Connector and document that the AJP Connector also supports the
ipv6v6only attribute with the APR/Native implementation.
(markt)
Other
Update the OWB module to Apache OpenWebBeans 2.0.15. (remm)
Update the CXF module to Apache CXF 3.3.5. (remm)
Expand the coverage of the Korean translations provided with Apache
Tomcat. Contributions provided by B. Cansmile Cha. (markt)
Expand the coverage of the French translations provided with Apache
Tomcat. (remm)
64190: Add support for specifying milliseconds (using
S, SS or SSS) in the timestamp
used by JULI's OneLineFormatter. (markt)
2020-02-20 Tomcat 10.0.0-M1 (markt)
General
This release contains all of the changes upto and including those in
Apache Tomcat 9.0.31 plus the additional changes listed below. (markt)
Catalina
Refactor recycle facade system property into a new connector attribute
named discardFacades and enable it by default. (remm)
Update to Jakarta Servlet 5.0, Jakarta Server Pages 3.0. Jakarta
Expression Language 4.0, Jakarta WebSocket 2.0, Jakarta Authentication
2.0 and Jakarta Annotations 2.0. (markt)
Remove GenericPrincipal.getPassword. The credentials should remain
managed by the realm. (remm)
Add connection pooling to JNDI realm. (remm)
Use <request-character-encoding> and
<response-character-encoding> in
conf/web.xml to set the default request and response
character encodings to UTF-8. (markt)
Store config compatibility with HostWebXmlCacheCleaner listener. (remm)
Modify the RewriteValve to use
ServletRequest.getServerName() to populate the
HTTP_HOST variable rather than extracting it from the
Host header as this allows HTTP/2 to be supported. (markt)
Switch Tomcat embedded to loading MIME type mappings from a property
file generated from the default web.xml so the MIME type
mappings are consistent regardless of how Tomcat is started. (markt)
Missing store config attributes for Resources elements. (remm)
Coyote
Update endpoint cache sizes defaults. (remm)
Remove unused NIO blocking selector. (remm)
When using an AJP Connector, convert Java Servlet specific request
attributes to the Jakarta Servlet equivalent. (markt)
When reporting / logging invalid HTTP headers encode any non-printing
characters using the 0xNN form. (markt)
Remove duplication of HTTP/1.1 configuration on the HTTP/2
UpgradeProtocol element. Configuration from the main Connector element
will now be used. (remm)
When the NIO or APR/native connectors were configured with
useAsyncIO="true" and a zero length read or write was
performed, the read/write would time out rather than return immediately.
(markt)
Jasper
Parameterize JSP version and API class names in localization messages to
allow simpler re-use between major versions. (markt)
Ensure that TLD files listed in the jsp-config section of
web.xml that are registered in the
uriTldResourcePathMap with the URI specified in
web.xml are also registered with the URI in the TLD file if
it is different. Patch provided by Markus Lottmann. (markt)
Cluster
Fix cloud environment lookup order and add a dedicated
DNS_MEMBERSHIP_SERVICE_NAME environment for use with the
DNS membership provider. Submitted by Bernd Bohmann. (remm)
Other
53620: JULI now only creates logging files when there is a
log entry to write. Based on a patch by Karol Bucek. (markt)
Update implemented specification version information in a few places
where it has not been updated for Jakarta EE 9. (markt)
Expand the coverage of the French translations provided with Apache
Tomcat. (remm)
Expand the coverage of the Chinese translations provided with Apache
Tomcat. Contribution provided by BoltzmannWxd. (markt)