Prevent shadowning of keys when a nested key's value is nil.

This commit is contained in:
Max Wolter 2016-09-19 19:37:56 +02:00
parent 16990631d4
commit 2f6a41490b
2 changed files with 13 additions and 2 deletions

View File

@ -802,11 +802,13 @@ func (v *Viper) find(key string) interface{} {
if source != nil { if source != nil {
if reflect.TypeOf(source).Kind() == reflect.Map { if reflect.TypeOf(source).Kind() == reflect.Map {
val := v.searchMap(cast.ToStringMap(source), path[1:]) val := v.searchMap(cast.ToStringMap(source), path[1:])
if val != nil {
jww.TRACE.Println(key, "found in nested config:", val) jww.TRACE.Println(key, "found in nested config:", val)
return val return val
} }
} }
} }
}
val, exists = v.kvstore[key] val, exists = v.kvstore[key]
if exists { if exists {

View File

@ -907,3 +907,12 @@ func TestSetConfigNameClearsFileCache(t *testing.T) {
SetConfigName("default") SetConfigName("default")
assert.Empty(t, v.getConfigFile()) assert.Empty(t, v.getConfigFile())
} }
func TestShadowedNestedValue(t *testing.T) {
polyester := "polyester"
initYAML()
SetDefault("clothing.shirt", polyester)
assert.Equal(t, GetString("clothing.jacket"), "leather")
assert.Equal(t, GetString("clothing.shirt"), polyester)
}