From e486442ca65a55646d754bf20cd6171a68302a1d Mon Sep 17 00:00:00 2001 From: "cai.zhang" Date: Sun, 15 Sep 2024 15:19:14 +0800 Subject: [PATCH] enhance: Disallow the keywords as a field name or dynamic field name (#36101) issue: #35873 Signed-off-by: Cai Zhang --- internal/proxy/util.go | 4 ++++ internal/proxy/util_test.go | 4 ++++ pkg/common/keywords.go | 32 ++++++++++++++++++++++++++++++++ 3 files changed, 40 insertions(+) create mode 100644 pkg/common/keywords.go diff --git a/internal/proxy/util.go b/internal/proxy/util.go index 56be896626..9f07d7b5c9 100644 --- a/internal/proxy/util.go +++ b/internal/proxy/util.go @@ -276,6 +276,10 @@ func validateFieldName(fieldName string) error { return merr.WrapErrFieldNameInvalid(fieldName, msg) } } + if _, ok := common.FieldNameKeywords[fieldName]; ok { + msg := invalidMsg + fmt.Sprintf("%s is keyword in milvus.", fieldName) + return merr.WrapErrFieldNameInvalid(fieldName, msg) + } return nil } diff --git a/internal/proxy/util_test.go b/internal/proxy/util_test.go index bff4af35c4..5ff4ee0e3f 100644 --- a/internal/proxy/util_test.go +++ b/internal/proxy/util_test.go @@ -174,6 +174,10 @@ func TestValidateFieldName(t *testing.T) { "", string(longName), "中文", + "True", + "array_contains", + "json_contains_any", + "ARRAY_LENGTH", } for _, name := range invalidNames { diff --git a/pkg/common/keywords.go b/pkg/common/keywords.go new file mode 100644 index 0000000000..463b005d0c --- /dev/null +++ b/pkg/common/keywords.go @@ -0,0 +1,32 @@ +package common + +var FieldNameKeywords = map[string]struct{}{ + "$meta": {}, + "like": {}, + "exists": {}, + "EXISTS": {}, + "and": {}, + "or": {}, + "not": {}, + "in": {}, + "json_contains": {}, + "JSON_CONTAINS": {}, + "json_contains_all": {}, + "JSON_CONTAINS_ALL": {}, + "json_contains_any": {}, + "JSON_CONTAINS_ANY": {}, + "array_contains": {}, + "ARRAY_CONTAINS": {}, + "array_contains_all": {}, + "ARRAY_CONTAINS_ALL": {}, + "array_contains_any": {}, + "ARRAY_CONTAINS_ANY": {}, + "array_length": {}, + "ARRAY_LENGTH": {}, + "true": {}, + "True": {}, + "TRUE": {}, + "false": {}, + "False": {}, + "FALSE": {}, +}