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";