Skip to content

Commit f8b5232

Browse files
author
roman.tarasov
committed
Error of nil conversion from bson.D decoded using UnmarshalExtJSON
1 parent 5004250 commit f8b5232

File tree

2 files changed

+29
-4
lines changed

2 files changed

+29
-4
lines changed

bson/bsoncodec/default_value_encoders.go

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -309,12 +309,17 @@ func (dve DefaultValueEncoders) ArrayEncodeValue(ec EncodeContext, vw bsonrw.Val
309309
return err
310310
}
311311

312-
encoder, err := ec.LookupEncoder(reflect.TypeOf(e.Value))
312+
ve := e.Value
313+
if reflect.TypeOf(ve) == nil {
314+
ve = primitive.Null{}
315+
}
316+
317+
encoder, err := ec.LookupEncoder(reflect.TypeOf(ve))
313318
if err != nil {
314319
return err
315320
}
316321

317-
err = encoder.EncodeValue(ec, vw, reflect.ValueOf(e.Value))
322+
err = encoder.EncodeValue(ec, vw, reflect.ValueOf(ve))
318323
if err != nil {
319324
return err
320325
}
@@ -372,12 +377,16 @@ func (dve DefaultValueEncoders) SliceEncodeValue(ec EncodeContext, vw bsonrw.Val
372377
return err
373378
}
374379

375-
encoder, err := ec.LookupEncoder(reflect.TypeOf(e.Value))
380+
ve := e.Value
381+
if reflect.TypeOf(ve) == nil {
382+
ve = primitive.Null{}
383+
}
384+
encoder, err := ec.LookupEncoder(reflect.TypeOf(ve))
376385
if err != nil {
377386
return err
378387
}
379388

380-
err = encoder.EncodeValue(ec, vw, reflect.ValueOf(e.Value))
389+
err = encoder.EncodeValue(ec, vw, reflect.ValueOf(ve))
381390
if err != nil {
382391
return err
383392
}

bson/bsoncodec/default_value_encoders_test.go

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -304,6 +304,14 @@ func TestDefaultValueEncoders(t *testing.T) {
304304
bsonrwtest.WriteDocumentEnd,
305305
nil,
306306
},
307+
{
308+
"[1]primitive.E/success",
309+
[1]primitive.E{{"hello", nil}},
310+
&EncodeContext{Registry: buildDefaultRegistry()},
311+
nil,
312+
bsonrwtest.WriteDocumentEnd,
313+
nil,
314+
},
307315
},
308316
},
309317
{
@@ -358,6 +366,14 @@ func TestDefaultValueEncoders(t *testing.T) {
358366
bsonrwtest.WriteDocumentEnd,
359367
nil,
360368
},
369+
{
370+
"D/success",
371+
primitive.D{{"hello", nil}},
372+
&EncodeContext{Registry: buildDefaultRegistry()},
373+
nil,
374+
bsonrwtest.WriteDocumentEnd,
375+
nil,
376+
},
361377
},
362378
},
363379
{

0 commit comments

Comments
 (0)