Skip to content

Commit

Permalink
Avoid decoding nil pointer in map walker
Browse files Browse the repository at this point in the history
  • Loading branch information
kyhavlov committed Apr 19, 2023
1 parent 2cefa8d commit 7df53af
Show file tree
Hide file tree
Showing 3 changed files with 14 additions and 1 deletion.
3 changes: 3 additions & 0 deletions .changelog/17048.txt
Original file line number Diff line number Diff line change
@@ -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 changes: 1 addition & 1 deletion lib/map_walker.go
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand Down
10 changes: 10 additions & 0 deletions lib/map_walker_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -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{}{
Expand Down

0 comments on commit 7df53af

Please sign in to comment.