You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by re...@apache.org on 2026/10/13 10:56:45 UTC
(tomcat) 10/16: Fail fast when the compressible MIME type list is set to null
This is an automated email from the ASF dual-hosted git repository.
rmaucher pushed a commit to branch 11.0.x
in repository https://gitbox.apache.org/repos/asf/tomcat.git
commit 4e20582b1af2fe68739b35932776a86dad37f5d8
Author: opencode <re...@apache.org>
AuthorDate: Mon Oct 12 23:16:34 2026 +0200
Fail fast when the compressible MIME type list is set to null
The setCompressibleMimeType() method of CompressionConfig stored the
provided value without any validation. A null value was therefore
accepted silently and only caused a NullPointerException later, when
getCompressibleMimeTypes() lazily tokenized the stored value while a
response was being prepared, turning the response into an error.
The setter now rejects a null value immediately with an
IllegalArgumentException and a localized message, before the stored
value or the parsed list cache are modified. Note that no configuration
path is affected: the attribute value from server.xml cannot be null
and the attribute is not exposed as a JMX attribute. Unlike the sibling
setters for the user agent and encoding restrictions, the compressible
MIME type list has no defined null semantics, so a fail-fast exception
was preferred over inventing some.
---
java/org/apache/coyote/CompressionConfig.java | 5 +++++
java/org/apache/coyote/LocalStrings.properties | 1 +
.../coyote/TestCompressionConfigSetters.java | 25 ++++++++++++++++++++++
3 files changed, 31 insertions(+)
diff --git a/java/org/apache/coyote/CompressionConfig.java b/java/org/apache/coyote/CompressionConfig.java
index 5b30da26f4..a7f1b7b50e 100644
--- a/java/org/apache/coyote/CompressionConfig.java
+++ b/java/org/apache/coyote/CompressionConfig.java
@@ -203,8 +203,13 @@ public class CompressionConfig {
* Sets the comma-separated list of MIME types eligible for compression.
*
* @param valueS comma-separated MIME type string
+ *
+ * @throws IllegalArgumentException If the provided value is null
*/
public void setCompressibleMimeType(String valueS) {
+ if (valueS == null) {
+ throw new IllegalArgumentException(sm.getString("compressionConfig.compressibleMimeTypeNull"));
+ }
compressibleMimeType = valueS;
compressibleMimeTypes = null;
}
diff --git a/java/org/apache/coyote/LocalStrings.properties b/java/org/apache/coyote/LocalStrings.properties
index 99049e3fdb..ffc5811554 100644
--- a/java/org/apache/coyote/LocalStrings.properties
+++ b/java/org/apache/coyote/LocalStrings.properties
@@ -62,6 +62,7 @@ asyncStateMachine.invalidAsyncState=Calling [{0}] is not valid for a request wit
asyncStateMachine.stateChange=Changing async state from [{0}] to [{1}]
compressionConfig.ContentEncodingParseFail=Failed to parse Content-Encoding header when checking to see if compression was already in use
+compressionConfig.compressibleMimeTypeNull=The compressible MIME type list cannot be set to null
compressionConfig.invalidCompressionValue=The value [{0}] provided for the compression attribute is not valid. Compression has been disabled.
continueResponseTiming.invalid=The value [{0}] is not a valid configuration option for continueResponseTiming
diff --git a/test/org/apache/coyote/TestCompressionConfigSetters.java b/test/org/apache/coyote/TestCompressionConfigSetters.java
index 73d25f72f6..a3223aae6e 100644
--- a/test/org/apache/coyote/TestCompressionConfigSetters.java
+++ b/test/org/apache/coyote/TestCompressionConfigSetters.java
@@ -75,4 +75,29 @@ public class TestCompressionConfigSetters {
compressionConfig.setCompression(null);
Assert.assertEquals("off", compressionConfig.getCompression());
}
+
+ @Test
+ public void testSetCompressibleMimeType() {
+ CompressionConfig compressionConfig = new CompressionConfig();
+
+ compressionConfig.setCompressibleMimeType("text/html, application/json");
+ Assert.assertArrayEquals(new String[] { "text/html", "application/json" },
+ compressionConfig.getCompressibleMimeTypes());
+ }
+
+ @Test
+ public void testSetCompressibleMimeTypeNull() {
+ CompressionConfig compressionConfig = new CompressionConfig();
+
+ try {
+ compressionConfig.setCompressibleMimeType(null);
+ Assert.fail("Expected an IllegalArgumentException for a null value");
+ } catch (IllegalArgumentException iae) {
+ // Expected
+ }
+
+ // The previously configured value must be unchanged
+ Assert.assertNotNull(compressionConfig.getCompressibleMimeType());
+ Assert.assertEquals("text/html", compressionConfig.getCompressibleMimeTypes()[0]);
+ }
}
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org