This is an automated email from the ASF dual-hosted git repository.

Caideyipi pushed a commit to branch codex/jdbc-driver-info
in repository https://gitbox.apache.org/repos/asf/iotdb.git


The following commit(s) were added to refs/heads/codex/jdbc-driver-info by this 
push:
     new dfcd58996dc Improve JDBC URL parameter parsing
dfcd58996dc is described below

commit dfcd58996dc74787bb0ad1f9c19cc586e76d73c7
Author: Caideyipi <[email protected]>
AuthorDate: Mon Jun 8 17:17:24 2026 +0800

    Improve JDBC URL parameter parsing
---
 .../main/java/org/apache/iotdb/jdbc/IoTDBDataSource.java   |  2 +-
 .../jdbc/src/main/java/org/apache/iotdb/jdbc/Utils.java    |  8 ++++----
 .../org/apache/iotdb/jdbc/IoTDBDataSourceFactoryTest.java  |  8 ++++++++
 .../src/test/java/org/apache/iotdb/jdbc/UtilsTest.java     | 14 ++++++++++++++
 4 files changed, 27 insertions(+), 5 deletions(-)

diff --git 
a/iotdb-client/jdbc/src/main/java/org/apache/iotdb/jdbc/IoTDBDataSource.java 
b/iotdb-client/jdbc/src/main/java/org/apache/iotdb/jdbc/IoTDBDataSource.java
index 625098acd84..25c6d02c65c 100644
--- a/iotdb-client/jdbc/src/main/java/org/apache/iotdb/jdbc/IoTDBDataSource.java
+++ b/iotdb-client/jdbc/src/main/java/org/apache/iotdb/jdbc/IoTDBDataSource.java
@@ -49,7 +49,7 @@ public class IoTDBDataSource implements DataSource {
     this.properties = new Properties();
     setUser(user);
     setPassword(password);
-    if (port != 0) {
+    if (port != null && port != 0) {
       this.port = port;
     }
   }
diff --git a/iotdb-client/jdbc/src/main/java/org/apache/iotdb/jdbc/Utils.java 
b/iotdb-client/jdbc/src/main/java/org/apache/iotdb/jdbc/Utils.java
index d45ab312f76..0717430cdd3 100644
--- a/iotdb-client/jdbc/src/main/java/org/apache/iotdb/jdbc/Utils.java
+++ b/iotdb-client/jdbc/src/main/java/org/apache/iotdb/jdbc/Utils.java
@@ -164,12 +164,12 @@ public class Utils {
     String paramURL = subURL.substring(subURL.indexOf('?') + 1);
     String[] params = paramURL.split("&");
     for (String tmpParam : params) {
-      String[] paramSplit = tmpParam.split("=");
-      if (paramSplit.length != 2) {
+      int separatorIndex = tmpParam.indexOf('=');
+      if (separatorIndex <= 0 || separatorIndex == tmpParam.length() - 1) {
         return false;
       }
-      String key = tmpParam.split("=")[0];
-      String value = tmpParam.split("=")[1];
+      String key = tmpParam.substring(0, separatorIndex);
+      String value = tmpParam.substring(separatorIndex + 1);
       switch (key) {
         case RPC_COMPRESS:
           if ("true".equalsIgnoreCase(value) || 
"false".equalsIgnoreCase(value)) {
diff --git 
a/iotdb-client/jdbc/src/test/java/org/apache/iotdb/jdbc/IoTDBDataSourceFactoryTest.java
 
b/iotdb-client/jdbc/src/test/java/org/apache/iotdb/jdbc/IoTDBDataSourceFactoryTest.java
index fbf750d7057..cad6cf80a3c 100644
--- 
a/iotdb-client/jdbc/src/test/java/org/apache/iotdb/jdbc/IoTDBDataSourceFactoryTest.java
+++ 
b/iotdb-client/jdbc/src/test/java/org/apache/iotdb/jdbc/IoTDBDataSourceFactoryTest.java
@@ -70,4 +70,12 @@ public class IoTDBDataSourceFactoryTest {
     assertNull(dataSource.getUser());
     assertNull(dataSource.getPassword());
   }
+
+  @Test
+  public void testDataSourceConstructorAllowsNullPort() {
+    IoTDBDataSource dataSource =
+        new IoTDBDataSource("jdbc:iotdb://localhost:6667", null, null, null);
+
+    assertEquals(Integer.valueOf(6667), dataSource.getPort());
+  }
 }
diff --git 
a/iotdb-client/jdbc/src/test/java/org/apache/iotdb/jdbc/UtilsTest.java 
b/iotdb-client/jdbc/src/test/java/org/apache/iotdb/jdbc/UtilsTest.java
index b049d8b75b0..1be8c236dfb 100644
--- a/iotdb-client/jdbc/src/test/java/org/apache/iotdb/jdbc/UtilsTest.java
+++ b/iotdb-client/jdbc/src/test/java/org/apache/iotdb/jdbc/UtilsTest.java
@@ -174,4 +174,18 @@ public class UtilsTest {
     Utils.parseUrl("jdbc:iotdb://127.0.0.1:6667?rpc_compress=true", 
properties);
     assertTrue(Config.rpcThriftCompressionEnable);
   }
+
+  @Test
+  public void testParseUrlParamValueAllowsEqualsSign() throws 
IoTDBURLException {
+    Properties properties = new Properties();
+
+    Utils.parseUrl("jdbc:iotdb://127.0.0.1:6667?trust_store_pwd=a=b=c", 
properties);
+
+    assertEquals("a=b=c", properties.getProperty(Config.TRUST_STORE_PWD));
+  }
+
+  @Test(expected = IoTDBURLException.class)
+  public void testParseUrlParamRejectsEmptyValue() throws IoTDBURLException {
+    Utils.parseUrl("jdbc:iotdb://127.0.0.1:6667?use_ssl=", new Properties());
+  }
 }

Reply via email to