Skip to content

Commit

Permalink
Enforce field names to be alphanum lowercase + underscores (#15562)
Browse files Browse the repository at this point in the history
  • Loading branch information
radeksimko authored Jul 17, 2017
1 parent 87b2c0c commit f979b8f
Show file tree
Hide file tree
Showing 2 changed files with 55 additions and 1 deletion.
14 changes: 13 additions & 1 deletion helper/schema/schema.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ import (
"fmt"
"os"
"reflect"
"regexp"
"sort"
"strconv"
"strings"
Expand Down Expand Up @@ -661,14 +662,25 @@ 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)
}
}
}

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,
Expand Down
42 changes: 42 additions & 0 deletions helper/schema/schema_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand Down

0 comments on commit f979b8f

Please sign in to comment.