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
|
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
|
// map[interface{}]interface{}, attempt to weakly decode into string keys
|
||||||
var target map[string]interface{}
|
var target map[string]interface{}
|
||||||
if err := mapstructure.WeakDecode(v.Interface(), &target); err != nil {
|
if err := mapstructure.WeakDecode(v.Interface(), &target); err != nil {
|
||||||
|
|
|
@ -41,6 +41,16 @@ func TestMapWalk(t *testing.T) {
|
||||||
},
|
},
|
||||||
unexpected: true,
|
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
|
// ensure nested maps get processed correctly
|
||||||
"nested": {
|
"nested": {
|
||||||
input: map[string]interface{}{
|
input: map[string]interface{}{
|
||||||
|
|
Loading…
Reference in New Issue