diff --git a/viper.go b/viper.go index f17790e..bad121e 100644 --- a/viper.go +++ b/viper.go @@ -802,8 +802,10 @@ func (v *Viper) find(key string) interface{} { if source != nil { if reflect.TypeOf(source).Kind() == reflect.Map { val := v.searchMap(cast.ToStringMap(source), path[1:]) - jww.TRACE.Println(key, "found in nested config:", val) - return val + if val != nil { + jww.TRACE.Println(key, "found in nested config:", val) + return val + } } } } diff --git a/viper_test.go b/viper_test.go index 0c0c7e5..fdbe4d9 100644 --- a/viper_test.go +++ b/viper_test.go @@ -907,3 +907,12 @@ func TestSetConfigNameClearsFileCache(t *testing.T) { SetConfigName("default") 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) +}