Skip to content

Commit 1e92b4c

Browse files
committed
Merge branch 'pr/66'
Change-Id: Ib8440fea4c402ac40ccf8a18b79ae564b3bfdaea
2 parents 98a3328 + fdbd456 commit 1e92b4c

File tree

2 files changed

+27
-2
lines changed

2 files changed

+27
-2
lines changed

bson/encode.go

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -445,7 +445,11 @@ func (e *encoder) encodeSliceAsArray(rval reflect.Value, minsize bool) ([]*Value
445445
vals = append(vals, VC.DateTime(convertTimeToInt64(t)))
446446
continue
447447
case *time.Time:
448-
vals = append(vals, VC.DateTime(convertTimeToInt64(*t)))
448+
if t == nil {
449+
vals = append(vals, VC.Null())
450+
} else {
451+
vals = append(vals, VC.DateTime(convertTimeToInt64(*t)))
452+
}
449453
continue
450454
}
451455

@@ -531,7 +535,11 @@ func (e *encoder) encodeStruct(val reflect.Value) ([]*Element, error) {
531535
elems = append(elems, EC.DateTime(key, convertTimeToInt64(t)))
532536
continue
533537
case *time.Time:
534-
elems = append(elems, EC.DateTime(key, convertTimeToInt64(*t)))
538+
if t == nil {
539+
elems = append(elems, EC.Null(key))
540+
} else {
541+
elems = append(elems, EC.DateTime(key, convertTimeToInt64(*t)))
542+
}
535543
continue
536544
}
537545
field = e.underlyingVal(field)

bson/encode_test.go

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1100,6 +1100,23 @@ func TestZeoerInterfaceUsedByDecoder(t *testing.T) {
11001100

11011101
}
11021102

1103+
type timePrtStruct struct { TimePtrField *time.Time }
1104+
func TestRegressionNoDereferenceNilTimePtr (t *testing.T) {
1105+
enc := &encoder{}
1106+
1107+
assert.NotPanics(t, func () {
1108+
res, err := enc.encodeStruct(reflect.ValueOf(timePrtStruct{}))
1109+
assert.Len(t, res, 1)
1110+
assert.Nil(t, err)
1111+
})
1112+
1113+
assert.NotPanics(t, func () {
1114+
res, err := enc.encodeSliceAsArray(reflect.ValueOf([]*time.Time{nil, nil, nil}), false)
1115+
assert.Len(t, res, 3)
1116+
assert.Nil(t, err)
1117+
})
1118+
}
1119+
11031120
func docToBytes(d *Document) []byte {
11041121
b, err := d.MarshalBSON()
11051122
if err != nil {

0 commit comments

Comments
 (0)