Skip to content

Commit

Permalink
fix bug in convertint 0 len slice
Browse files Browse the repository at this point in the history
  • Loading branch information
petersunbag committed Jan 22, 2019
1 parent dd5a7ad commit 2c6b4e2
Show file tree
Hide file tree
Showing 3 changed files with 6 additions and 3 deletions.
1 change: 1 addition & 0 deletions coven_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,7 @@ func TestDelegateConverter_Convert(t *testing.T) {
foo := Foo{[]int{1, 2, 3}, map[int64][]byte{1: []byte{'a', 'b'}, 2: []byte{'b', 'a'}, 3: []byte{'c', 'd'}}, 6, foobar{11}}
bar := Bar{}
c.Convert(&bar, &foo)
c.Convert(&bar, nil)

if expected := `{"A":[1,2,3],"B":{"1":"ab","2":"ba","3":"cd"},"C":6,"D":11}`; !reflect.DeepEqual(expected, jsonEncode(bar)) {
t.Fatalf("[expected:%v] [actual:%v]", expected, jsonEncode(bar))
Expand Down
6 changes: 4 additions & 2 deletions ptr/op.go
Original file line number Diff line number Diff line change
Expand Up @@ -67,8 +67,10 @@ func cvtStringBytes(sPtr unsafe.Pointer, dPtr unsafe.Pointer) {

func Copy(dPtr, sPtr unsafe.Pointer, size uintptr) {
align := uintptr(0)
for ; align < size-intAlign; align += intAlign {
*(*int)(unsafe.Pointer(uintptr(dPtr) + align)) = *(*int)(unsafe.Pointer(uintptr(sPtr) + align))
if size >= intAlign {
for ; align < size; align += intAlign {
*(*int)(unsafe.Pointer(uintptr(dPtr) + align)) = *(*int)(unsafe.Pointer(uintptr(sPtr) + align))
}
}
for ; align < size; align++ {
*(*byte)(unsafe.Pointer(uintptr(dPtr) + align)) = *(*byte)(unsafe.Pointer(uintptr(sPtr) + align))
Expand Down
2 changes: 1 addition & 1 deletion slice.go
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ func (s *sliceConverter) convert(dPtr, sPtr unsafe.Pointer) {
length := sSlice.Len
dSlice.Len = length

if dSlice.Cap < length {
if dSlice.Cap < length || dSlice.Data == nil {
newVal := reflect.MakeSlice(s.dstTyp, 0, length)
dSlice.Data = unsafe.Pointer(newVal.Pointer())
dSlice.Cap = length
Expand Down

0 comments on commit 2c6b4e2

Please sign in to comment.