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

jt2594838 pushed a commit to branch dev/1.3
in repository https://gitbox.apache.org/repos/asf/iotdb.git


The following commit(s) were added to refs/heads/dev/1.3 by this push:
     new c0f3291cfca Reject database paths with empty nodes on ConfigNode 
(#18308) (#18312)
c0f3291cfca is described below

commit c0f3291cfcad39c4bd36924f91e6c748a01a8380
Author: Caideyipi <[email protected]>
AuthorDate: Mon Jul 27 16:38:45 2026 +0800

    Reject database paths with empty nodes on ConfigNode (#18308) (#18312)
---
 .../confignode/persistence/schema/ClusterSchemaInfo.java |  8 +++++++-
 .../persistence/schema/ClusterSchemaInfoTest.java        | 16 ++++++++++++++++
 2 files changed, 23 insertions(+), 1 deletion(-)

diff --git 
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/persistence/schema/ClusterSchemaInfo.java
 
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/persistence/schema/ClusterSchemaInfo.java
index c5c60afbb26..4d6f2522052 100644
--- 
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/persistence/schema/ClusterSchemaInfo.java
+++ 
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/persistence/schema/ClusterSchemaInfo.java
@@ -458,7 +458,13 @@ public class ClusterSchemaInfo implements 
SnapshotProcessor {
   public void isDatabaseNameValid(String databaseName) throws 
MetadataException {
     databaseReadWriteLock.readLock().lock();
     try {
-      mTree.checkDatabaseAlreadySet(new PartialPath(databaseName));
+      final PartialPath databasePath = new PartialPath(databaseName);
+      for (final String node : databasePath.getNodes()) {
+        if (node.isEmpty()) {
+          throw new IllegalPathException(databaseName);
+        }
+      }
+      mTree.checkDatabaseAlreadySet(databasePath);
     } finally {
       databaseReadWriteLock.readLock().unlock();
     }
diff --git 
a/iotdb-core/confignode/src/test/java/org/apache/iotdb/confignode/persistence/schema/ClusterSchemaInfoTest.java
 
b/iotdb-core/confignode/src/test/java/org/apache/iotdb/confignode/persistence/schema/ClusterSchemaInfoTest.java
index bc31c66992e..a4c22e3738b 100644
--- 
a/iotdb-core/confignode/src/test/java/org/apache/iotdb/confignode/persistence/schema/ClusterSchemaInfoTest.java
+++ 
b/iotdb-core/confignode/src/test/java/org/apache/iotdb/confignode/persistence/schema/ClusterSchemaInfoTest.java
@@ -20,6 +20,7 @@
 package org.apache.iotdb.confignode.persistence.schema;
 
 import org.apache.iotdb.commons.exception.IllegalPathException;
+import org.apache.iotdb.commons.exception.MetadataException;
 import org.apache.iotdb.commons.path.PartialPath;
 import org.apache.iotdb.commons.utils.PathUtils;
 import org.apache.iotdb.confignode.consensus.request.ConfigPhysicalPlanType;
@@ -36,6 +37,7 @@ import 
org.apache.iotdb.confignode.consensus.response.template.TemplateSetInfoRe
 import org.apache.iotdb.confignode.rpc.thrift.TDatabaseSchema;
 import org.apache.iotdb.db.schemaengine.template.Template;
 import org.apache.iotdb.db.schemaengine.template.TemplateInternalRPCUtil;
+import org.apache.iotdb.rpc.TSStatusCode;
 
 import org.apache.commons.io.FileUtils;
 import org.apache.tsfile.enums.TSDataType;
@@ -117,6 +119,20 @@ public class ClusterSchemaInfoTest {
     Assert.assertEquals(testMap, reloadResult);
   }
 
+  @Test
+  public void testDatabasePathWithEmptyNodeIsInvalid() throws 
MetadataException {
+    clusterSchemaInfo.isDatabaseNameValid("root.database");
+
+    for (final String database : Arrays.asList("", "root.", "root..database", 
"root.database.")) {
+      try {
+        clusterSchemaInfo.isDatabaseNameValid(database);
+        Assert.fail("Expected IllegalPathException for database: " + database);
+      } catch (final IllegalPathException e) {
+        Assert.assertEquals(TSStatusCode.ILLEGAL_PATH.getStatusCode(), 
e.getErrorCode());
+      }
+    }
+  }
+
   @Test
   public void testSetTemplate() throws IllegalPathException {
     String templateName = "template_name";

Reply via email to