## Changelog

### 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 `PropertyNotWritableException`s 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 `NullPointerException`s. (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)
- Remove the entry for `org.apache.tomcat.util.descriptor.tld.LocalStrings` from tomcat-embed-core's GraalVM tomcat-resource.json. It no more part of the jar since Fix unwanted JPMS dependency of embed-core on embed-jasper. (mgrigorov)
- 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)
- Remove deprecated `CookieProcessor.generateHeader` method. (remm)
- 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 `NullPointerException`s. (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 `NullPointerException`s 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)
- 64548: Generate JPMS metadata. (rotty3000)

### 2020-06-07 Tomcat 10.0.0-M6 (markt)

#### Catalina

- 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 `Charset`s 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)