Enforce field names to be alphanum lowercase + underscores (#15562)
This commit is contained in:
parent
87b2c0cf8f
commit
f979b8feef
|
@ -15,6 +15,7 @@ import (
|
|||
"fmt"
|
||||
"os"
|
||||
"reflect"
|
||||
"regexp"
|
||||
"sort"
|
||||
"strconv"
|
||||
"strings"
|
||||
|
@ -661,7 +662,13 @@ func (m schemaMap) InternalValidate(topSchemaMap schemaMap) error {
|
|||
if v.ValidateFunc != nil {
|
||||
switch v.Type {
|
||||
case TypeList, TypeSet:
|
||||
return fmt.Errorf("ValidateFunc is not yet supported on lists or sets.")
|
||||
return fmt.Errorf("%s: ValidateFunc is not yet supported on lists or sets.", k)
|
||||
}
|
||||
}
|
||||
|
||||
if v.Deprecated == "" && v.Removed == "" {
|
||||
if !isValidFieldName(k) {
|
||||
return fmt.Errorf("%s: Field name may only contain lowercase alphanumeric characters & underscores.", k)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -669,6 +676,11 @@ func (m schemaMap) InternalValidate(topSchemaMap schemaMap) error {
|
|||
return nil
|
||||
}
|
||||
|
||||
func isValidFieldName(name string) bool {
|
||||
re := regexp.MustCompile("^[a-z0-9_]+$")
|
||||
return re.MatchString(name)
|
||||
}
|
||||
|
||||
func (m schemaMap) diff(
|
||||
k string,
|
||||
schema *Schema,
|
||||
|
|
|
@ -3353,6 +3353,48 @@ func TestSchemaMap_InternalValidate(t *testing.T) {
|
|||
},
|
||||
true,
|
||||
},
|
||||
|
||||
"invalid field name format #1": {
|
||||
map[string]*Schema{
|
||||
"with space": &Schema{
|
||||
Type: TypeString,
|
||||
Optional: true,
|
||||
},
|
||||
},
|
||||
true,
|
||||
},
|
||||
|
||||
"invalid field name format #2": {
|
||||
map[string]*Schema{
|
||||
"WithCapitals": &Schema{
|
||||
Type: TypeString,
|
||||
Optional: true,
|
||||
},
|
||||
},
|
||||
true,
|
||||
},
|
||||
|
||||
"invalid field name format of a Deprecated field": {
|
||||
map[string]*Schema{
|
||||
"WithCapitals": &Schema{
|
||||
Type: TypeString,
|
||||
Optional: true,
|
||||
Deprecated: "Use with_underscores instead",
|
||||
},
|
||||
},
|
||||
false,
|
||||
},
|
||||
|
||||
"invalid field name format of a Removed field": {
|
||||
map[string]*Schema{
|
||||
"WithCapitals": &Schema{
|
||||
Type: TypeString,
|
||||
Optional: true,
|
||||
Removed: "Use with_underscores instead",
|
||||
},
|
||||
},
|
||||
false,
|
||||
},
|
||||
}
|
||||
|
||||
for tn, tc := range cases {
|
||||
|
|
Loading…
Reference in New Issue