Skip to content

Commit

Permalink
Encoder should not work with empty table/key names.
Browse files Browse the repository at this point in the history
  • Loading branch information
BurntSushi committed Jun 11, 2014
1 parent dbf2b1d commit 05d026b
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 0 deletions.
7 changes: 7 additions & 0 deletions encode.go
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ var (
"TOML array element can't contain a table")
errNoKey = errors.New(
"top-level values must be a Go map or struct")
errAnything = errors.New("") // used in testing
)

var quotedReplacer = strings.NewReplacer(
Expand Down Expand Up @@ -496,6 +497,9 @@ func panicIfInvalidKey(key Key, hash bool) {
}

func isValidTableName(s string) bool {
if len(s) == 0 {
return false
}
for _, r := range s {
if r == '[' || r == ']' || r == '.' {
return false
Expand All @@ -505,6 +509,9 @@ func isValidTableName(s string) bool {
}

func isValidKeyName(s string) bool {
if len(s) == 0 {
return false
}
for _, r := range s {
if unicode.IsSpace(r) {
return false
Expand Down
13 changes: 13 additions & 0 deletions encode_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -377,6 +377,16 @@ ArrayOfMixedSlices = [[1, 2], ["a", "b"]]
input: struct{ NonStruct }{5},
wantError: errAnonNonStruct,
},
"(error) empty key name": {
input: map[string]int{"": 1},
wantError: errAnything,
},
"(error) empty map name": {
input: map[string]interface{}{
"": map[string]int{"v": 1},
},
wantError: errAnything,
},
}
for label, test := range tests {
encodeExpected(t, label, test.input, test.wantOutput, test.wantError)
Expand Down Expand Up @@ -453,6 +463,9 @@ func encodeExpected(
err := enc.Encode(val)
if err != wantErr {
if wantErr != nil {
if wantErr == errAnything && err != nil {
return
}
t.Errorf("%s: want Encode error %v, got %v", label, wantErr, err)
} else {
t.Errorf("%s: Encode failed: %s", label, err)
Expand Down

0 comments on commit 05d026b

Please sign in to comment.