Skip to content

Commit 0e8ecc2

Browse files
committed
Ensure map decoder handles non-primitive strings
GODRIVER-719 Change-Id: Id3d57e5bb8a5eb09bb18684bfe962735ef597ee6
1 parent 813eb04 commit 0e8ecc2

File tree

2 files changed

+8
-1
lines changed

2 files changed

+8
-1
lines changed

bson/bsoncodec/default_value_decoders.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -679,6 +679,7 @@ func (dvd DefaultValueDecoders) MapDecodeValue(dc DecodeContext, vr bsonrw.Value
679679
dc.Ancestor = val.Type()
680680
}
681681

682+
keyType := val.Type().Key()
682683
for {
683684
key, vr, err := dr.ReadElement()
684685
if err == bsonrw.ErrEOD {
@@ -695,7 +696,7 @@ func (dvd DefaultValueDecoders) MapDecodeValue(dc DecodeContext, vr bsonrw.Value
695696
return err
696697
}
697698

698-
val.SetMapIndex(reflect.ValueOf(key), elem)
699+
val.SetMapIndex(reflect.ValueOf(key).Convert(keyType), elem)
699700
}
700701
return nil
701702
}

bson/bsoncodec/default_value_decoders_test.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2129,6 +2129,12 @@ func TestDefaultValueDecoders(t *testing.T) {
21292129
}),
21302130
nil,
21312131
},
2132+
{
2133+
"map[mystring]interface{}",
2134+
map[mystring]interface{}{"pi": 3.14159},
2135+
buildDocument(bsoncore.AppendDoubleElement(nil, "pi", 3.14159)),
2136+
nil,
2137+
},
21322138
{
21332139
"-",
21342140
struct {

0 commit comments

Comments
 (0)