From 2f6a41490bc86fa9a8fb2fc03526a5795e904a17 Mon Sep 17 00:00:00 2001 From: Max Wolter Date: Mon, 19 Sep 2016 19:37:56 +0200 Subject: [PATCH] Prevent shadowning of keys when a nested key's value is nil. --- viper.go | 6 ++++-- viper_test.go | 9 +++++++++ 2 files changed, 13 insertions(+), 2 deletions(-) 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) +}