+1
-7
@@ -1039,15 +1039,9 @@ func (d *decoder) handleKeyValuePart(key unstable.Iterator, value *unstable.Node
|
||||
|
||||
mv := v.MapIndex(mk)
|
||||
set := false
|
||||
if !mv.IsValid() {
|
||||
if !mv.IsValid() || key.IsLast() {
|
||||
set = true
|
||||
mv = reflect.New(v.Type().Elem()).Elem()
|
||||
} else {
|
||||
if key.IsLast() {
|
||||
var x interface{}
|
||||
mv = reflect.ValueOf(&x).Elem()
|
||||
set = true
|
||||
}
|
||||
}
|
||||
|
||||
nv, err := d.handleKeyValueInner(key, value, mv)
|
||||
|
||||
@@ -2472,6 +2472,21 @@ func TestIssue850(t *testing.T) {
|
||||
require.Error(t, err)
|
||||
}
|
||||
|
||||
func TestIssue851(t *testing.T) {
|
||||
type Target struct {
|
||||
Params map[string]string `toml:"params"`
|
||||
}
|
||||
|
||||
content := "params = {a=\"1\",b=\"2\"}"
|
||||
var target Target
|
||||
err := toml.Unmarshal([]byte(content), &target)
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, map[string]string{"a": "1", "b": "2"}, target.Params)
|
||||
err = toml.Unmarshal([]byte(content), &target)
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, map[string]string{"a": "1", "b": "2"}, target.Params)
|
||||
}
|
||||
|
||||
func TestUnmarshalDecodeErrors(t *testing.T) {
|
||||
examples := []struct {
|
||||
desc string
|
||||
|
||||
Reference in New Issue
Block a user