s3tables: allow hyphens in namespace and table names

Relaxed regex validation in utils.go to support hyphens in S3 Tables
namespaces and table names, improving consistency with S3 bucket naming
and allowing derived names from services like S3 Storage Lens.
This commit is contained in:
Chris Lu
2026-01-28 13:38:41 -08:00
parent d6f6bf4ce7
commit 090d473822

View File

@@ -13,7 +13,7 @@ import (
var ( var (
bucketARNPattern = regexp.MustCompile(`^arn:aws:s3tables:[^:]*:[^:]*:bucket/([a-z0-9_-]+)$`) bucketARNPattern = regexp.MustCompile(`^arn:aws:s3tables:[^:]*:[^:]*:bucket/([a-z0-9_-]+)$`)
tableARNPattern = regexp.MustCompile(`^arn:aws:s3tables:[^:]*:[^:]*:bucket/([a-z0-9_-]+)/table/([a-z0-9_]+)/([a-z0-9_]+)$`) tableARNPattern = regexp.MustCompile(`^arn:aws:s3tables:[^:]*:[^:]*:bucket/([a-z0-9_-]+)/table/([a-z0-9_-]+)/([a-z0-9_-]+)$`)
bucketNamePattern = regexp.MustCompile(`^[a-z0-9_-]+$`) bucketNamePattern = regexp.MustCompile(`^[a-z0-9_-]+$`)
) )
@@ -146,10 +146,10 @@ func validateNamespace(namespace []string) (string, error) {
// Enforce allowed character set consistent with table naming. // Enforce allowed character set consistent with table naming.
for _, ch := range name { for _, ch := range name {
if (ch >= 'a' && ch <= 'z') || (ch >= '0' && ch <= '9') || ch == '_' { if (ch >= 'a' && ch <= 'z') || (ch >= '0' && ch <= '9') || ch == '_' || ch == '-' {
continue continue
} }
return "", fmt.Errorf("invalid namespace name: only 'a-z', '0-9', and '_' are allowed") return "", fmt.Errorf("invalid namespace name: only 'a-z', '0-9', '_', and '-' are allowed")
} }
return name, nil return name, nil
@@ -164,10 +164,10 @@ func validateTableName(name string) (string, error) {
return "", fmt.Errorf("invalid table name: cannot be '.', '..' or contain '/'") return "", fmt.Errorf("invalid table name: cannot be '.', '..' or contain '/'")
} }
for _, ch := range name { for _, ch := range name {
if (ch >= 'a' && ch <= 'z') || (ch >= '0' && ch <= '9') || ch == '_' { if (ch >= 'a' && ch <= 'z') || (ch >= '0' && ch <= '9') || ch == '_' || ch == '-' {
continue continue
} }
return "", fmt.Errorf("invalid table name: only 'a-z', '0-9', and '_' are allowed") return "", fmt.Errorf("invalid table name: only 'a-z', '0-9', '_', and '-' are allowed")
} }
return name, nil return name, nil
} }