Browse Source

Avoid decoding nil pointer in map walker (#17048)

pull/16815/head
Kyle Havlovitz 2 years ago committed by GitHub
parent
commit
bdc3dd14c2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 3
      .changelog/17048.txt
  2. 2
      lib/map_walker.go
  3. 10
      lib/map_walker_test.go

3
.changelog/17048.txt

@ -0,0 +1,3 @@
```release-note:bug
Fix an bug where decoding some Config structs with unset pointer fields could fail with `reflect: call of reflect.Value.Type on zero Value`.
```

2
lib/map_walker.go

@ -113,7 +113,7 @@ func (w *mapWalker) MapElem(m, k, v reflect.Value) error {
return nil
}
if inner := v.Elem(); inner.Type() == typMapIfaceIface {
if inner := v.Elem(); inner.IsValid() && inner.Type() == typMapIfaceIface {
// map[interface{}]interface{}, attempt to weakly decode into string keys
var target map[string]interface{}
if err := mapstructure.WeakDecode(v.Interface(), &target); err != nil {

10
lib/map_walker_test.go

@ -41,6 +41,16 @@ func TestMapWalk(t *testing.T) {
},
unexpected: true,
},
// ensure we don't panic from trying to call reflect.Value.Type
// on a nil pointer
"nil pointer": {
input: map[string]interface{}{
"foo": nil,
},
expected: map[string]interface{}{
"foo": nil,
},
},
// ensure nested maps get processed correctly
"nested": {
input: map[string]interface{}{

Loading…
Cancel
Save