diff --git a/flight/flight-sql-jdbc-core/src/main/java/org/apache/arrow/driver/jdbc/utils/ArrowFlightConnectionConfigImpl.java b/flight/flight-sql-jdbc-core/src/main/java/org/apache/arrow/driver/jdbc/utils/ArrowFlightConnectionConfigImpl.java index d0ba74dbcc..812f189bca 100644 --- a/flight/flight-sql-jdbc-core/src/main/java/org/apache/arrow/driver/jdbc/utils/ArrowFlightConnectionConfigImpl.java +++ b/flight/flight-sql-jdbc-core/src/main/java/org/apache/arrow/driver/jdbc/utils/ArrowFlightConnectionConfigImpl.java @@ -333,7 +333,7 @@ public Object get(final Properties properties) { */ public Boolean getBoolean(final Properties properties) { final String valueFromProperties = String.valueOf(get(properties)); - return valueFromProperties.equals("1") || valueFromProperties.equals("true"); + return valueFromProperties.equals("1") || valueFromProperties.equalsIgnoreCase("true"); } /** diff --git a/flight/flight-sql-jdbc-core/src/test/java/org/apache/arrow/driver/jdbc/utils/ArrowFlightConnectionConfigImplTest.java b/flight/flight-sql-jdbc-core/src/test/java/org/apache/arrow/driver/jdbc/utils/ArrowFlightConnectionConfigImplTest.java index ecce7708c0..ef7126d1cd 100644 --- a/flight/flight-sql-jdbc-core/src/test/java/org/apache/arrow/driver/jdbc/utils/ArrowFlightConnectionConfigImplTest.java +++ b/flight/flight-sql-jdbc-core/src/test/java/org/apache/arrow/driver/jdbc/utils/ArrowFlightConnectionConfigImplTest.java @@ -39,6 +39,7 @@ import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.Arguments; import org.junit.jupiter.params.provider.MethodSource; +import org.junit.jupiter.params.provider.ValueSource; public final class ArrowFlightConnectionConfigImplTest { @@ -71,6 +72,22 @@ public void testGetProperty( arrowFlightConnectionConfigFunction.apply(arrowFlightConnectionConfig), is(expected)); } + @ParameterizedTest + @ValueSource(strings = {"true", "TRUE", "True", "tRuE", "1"}) + public void testUseEncryptionAcceptsTruthyValuesCaseInsensitively(String value) { + // A connection string value like "TRUE" must enable TLS. Parsing it as false would + // silently downgrade the connection to plaintext and leak credentials. + properties.put(USE_ENCRYPTION.camelName(), value); + assertThat(arrowFlightConnectionConfig.useEncryption(), is(true)); + } + + @ParameterizedTest + @ValueSource(strings = {"false", "FALSE", "0", ""}) + public void testUseEncryptionRejectsFalsyValues(String value) { + properties.put(USE_ENCRYPTION.camelName(), value); + assertThat(arrowFlightConnectionConfig.useEncryption(), is(false)); + } + public static Stream provideParameters() { int port = RANDOM.nextInt(Short.toUnsignedInt(Short.MAX_VALUE)); boolean useEncryption = RANDOM.nextBoolean();