Avoid decoding nil pointer in map walker (#17048)
This commit is contained in:
parent
d7c488762e
commit
26128548a5
|
@ -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`.
|
||||
```
|
|
@ -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 {
|
||||
|
|
|
@ -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…
Reference in New Issue