From ba693ae43d2e6afc8e6c325849105b7ba3bd6eac Mon Sep 17 00:00:00 2001 From: Colin Patrick McCabe Date: Tue, 15 Sep 2026 15:49:57 -0700 Subject: [PATCH] fix: do not allow . and .. as table names (#4191) Do not allow . and .. as table names. They are incompatible with the local filesystem, and confusing in cases where they are supported. --- rust/lancedb/src/utils/mod.rs | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/rust/lancedb/src/utils/mod.rs b/rust/lancedb/src/utils/mod.rs index 352e55f2f..1bfd2d042 100644 --- a/rust/lancedb/src/utils/mod.rs +++ b/rust/lancedb/src/utils/mod.rs @@ -89,6 +89,18 @@ pub fn validate_table_name(name: &str) -> Result<()> { reason: "Table names cannot be empty strings".to_string(), }); } + if name == "." { + return Err(Error::InvalidTableName { + name: name.to_string(), + reason: "Table name cannot be a single dot.".to_string(), + }); + } + if name == ".." { + return Err(Error::InvalidTableName { + name: name.to_string(), + reason: "Table name cannot be two dots.".to_string(), + }); + } if !TABLE_NAME_REGEX.is_match(name) { return Err(Error::InvalidTableName { name: name.to_string(), @@ -804,8 +816,11 @@ mod tests { assert!(validate_table_name("_12345table").is_ok()); assert!(validate_table_name("table.12345").is_ok()); assert!(validate_table_name("table.._dot_..12345").is_ok()); + assert!(validate_table_name("...").is_ok()); assert!(validate_table_name("").is_err()); + assert!(validate_table_name(".").is_err()); + assert!(validate_table_name("..").is_err()); assert!(validate_table_name("my_table!").is_err()); assert!(validate_table_name("my/table").is_err()); assert!(validate_table_name("my@table").is_err());