From 7d76daf975dc0db59c2e4193e732a70513d4468a Mon Sep 17 00:00:00 2001 From: Dustin Long Date: Thu, 23 May 2024 10:12:29 -0400 Subject: [PATCH] Key lookup searches v.override using path prefixes When we assign to a map that uses urls for keys, we need to lookup values from that map in the same manner. Without doing so, `Get` will return inconsistent results. The agent codebase generally doesn't call `Get` this way, because we've known url keys work weird, but viper uses this type of call within AllSettings() in order to rebuild the config. In some cases, this could corrupt the data in the config. --- viper.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/viper.go b/viper.go index b77e682..6307c3c 100644 --- a/viper.go +++ b/viper.go @@ -1026,8 +1026,8 @@ func (v *Viper) find(lcaseKey string, skipDefault bool) interface{} { path = strings.Split(lcaseKey, v.keyDelim) nested = len(path) > 1 - // Set() override first - val = v.searchMap(v.override, path) + // Set() writes to override, so check override first + val = v.searchMapWithPathPrefixes(v.override, path) if val != nil { return val }