@@ -233,40 +233,51 @@ func (l configLoader) applyOsEnvOverrides(environ []string) error {
233233
234234 if existing != nil {
235235 val , err := metadecoders .Default .UnmarshalStringTo (env .Value , existing )
236- if err != nil {
236+ if err == nil {
237+ val = l .envValToVal (env .Key , val )
238+ if owner != nil {
239+ owner [nestedKey ] = val
240+ } else {
241+ l .cfg .Set (env .Key , val )
242+ }
237243 continue
238244 }
245+ }
239246
240- if owner != nil {
241- owner [nestedKey ] = val
242- } else {
243- l .cfg .Set (env .Key , val )
244- }
247+ if owner != nil && nestedKey != "" {
248+ owner [nestedKey ] = env .Value
245249 } else {
246- if nestedKey != "" {
247- owner [nestedKey ] = env .Value
248- } else {
249- var val any
250- key := strings .ReplaceAll (env .Key , delim , "." )
251- _ , ok := allDecoderSetups [key ]
252- if ok {
253- // A map.
254- if v , err := metadecoders .Default .UnmarshalStringTo (env .Value , map [string ]any {}); err == nil {
255- val = v
256- }
250+ var val any
251+ key := strings .ReplaceAll (env .Key , delim , "." )
252+ _ , ok := allDecoderSetups [key ]
253+ if ok {
254+ // A map.
255+ if v , err := metadecoders .Default .UnmarshalStringTo (env .Value , map [string ]any {}); err == nil {
256+ val = v
257257 }
258- if val == nil {
259- // A string.
260- val = l .envStringToVal (key , env .Value )
261- }
262- l .cfg .Set (key , val )
263258 }
259+
260+ if val == nil {
261+ // A string.
262+ val = l .envStringToVal (key , env .Value )
263+ }
264+ l .cfg .Set (key , val )
264265 }
266+
265267 }
266268
267269 return nil
268270}
269271
272+ func (l * configLoader ) envValToVal (k string , v any ) any {
273+ switch v := v .(type ) {
274+ case string :
275+ return l .envStringToVal (k , v )
276+ default :
277+ return v
278+ }
279+ }
280+
270281func (l * configLoader ) envStringToVal (k , v string ) any {
271282 switch k {
272283 case "disablekinds" , "disablelanguages" :
0 commit comments