From e94bc8890a2acb0caf89ff891dedd08c09b81765 Mon Sep 17 00:00:00 2001 From: Jeremiah Jordan Date: Thu, 16 Jul 2026 08:30:31 -0500 Subject: [PATCH] Verify compression provider type before initialization --- src/java/org/apache/cassandra/utils/FBUtilities.java | 5 +++-- .../org/apache/cassandra/utils/FBUtilitiesTest.java | 12 ++++++++++++ 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/src/java/org/apache/cassandra/utils/FBUtilities.java b/src/java/org/apache/cassandra/utils/FBUtilities.java index 0e4c3281a4..8ef98363d2 100644 --- a/src/java/org/apache/cassandra/utils/FBUtilities.java +++ b/src/java/org/apache/cassandra/utils/FBUtilities.java @@ -744,8 +744,9 @@ public class FBUtilities if (!className.contains(".")) className = "org.apache.cassandra.io.compress." + className; - Class compressionProviderClass = FBUtilities.classForName(className, "compression service provider"); - return (AbstractCompressionProvider) compressionProviderClass.getConstructor().newInstance(); + Class compressionProviderClass = + FBUtilities.classForNameWithoutInitialization(className, "compression service provider", AbstractCompressionProvider.class); + return compressionProviderClass.getConstructor().newInstance(); } catch (ConfigurationException e) { diff --git a/test/unit/org/apache/cassandra/utils/FBUtilitiesTest.java b/test/unit/org/apache/cassandra/utils/FBUtilitiesTest.java index 171fb729eb..00e94230a0 100644 --- a/test/unit/org/apache/cassandra/utils/FBUtilitiesTest.java +++ b/test/unit/org/apache/cassandra/utils/FBUtilitiesTest.java @@ -61,6 +61,7 @@ import org.apache.cassandra.dht.Murmur3Partitioner; import org.apache.cassandra.dht.OrderPreservingPartitioner; import org.apache.cassandra.dht.RandomPartitioner; import org.apache.cassandra.exceptions.ConfigurationException; +import org.apache.cassandra.io.compress.AbstractCompressionProvider; import org.apache.cassandra.security.AbstractCryptoProvider; import org.apache.cassandra.security.ISslContextFactory; @@ -141,6 +142,17 @@ public class FBUtilitiesTest assertThat(ClassLoadingTestSupport.wasInitialized(ClassLoadingTestNonAssignable.class)).isFalse(); } + @Test + public void testNewCompressionProviderRejectsWrongTypeWithoutInitializing() + { + ClassLoadingTestSupport.assertNotInitialized(ClassLoadingTestNonAssignable.class); + assertThatThrownBy(() -> FBUtilities.newCompressionProvider(ClassLoadingTestNonAssignable.class.getName())) + .isInstanceOf(ConfigurationException.class) + .hasStackTraceContaining("must extend or implement " + AbstractCompressionProvider.class.getName()); + + assertThat(ClassLoadingTestSupport.wasInitialized(ClassLoadingTestNonAssignable.class)).isFalse(); + } + @Test public void testCompareByteSubArrays() {