Handle empty slices in CreateBlobFromBuffer()
Go won't let us access the zeroth alement of an empty slice, so we need to figure out if the length is zero and take special action. This fixes #106.
This commit is contained in:
parent
91fd186186
commit
106ebe2fc4
15
blob.go
15
blob.go
|
@ -36,12 +36,21 @@ func (v *Blob) Contents() []byte {
|
||||||
func (repo *Repository) CreateBlobFromBuffer(data []byte) (*Oid, error) {
|
func (repo *Repository) CreateBlobFromBuffer(data []byte) (*Oid, error) {
|
||||||
runtime.LockOSThread()
|
runtime.LockOSThread()
|
||||||
defer runtime.UnlockOSThread()
|
defer runtime.UnlockOSThread()
|
||||||
oid := C.git_oid{}
|
|
||||||
ecode := C.git_blob_create_frombuffer(&oid, repo.ptr, unsafe.Pointer(&data[0]), C.size_t(len(data)))
|
var id C.git_oid
|
||||||
|
var ptr unsafe.Pointer
|
||||||
|
|
||||||
|
if len(data) > 0 {
|
||||||
|
ptr = unsafe.Pointer(&data[0])
|
||||||
|
} else {
|
||||||
|
ptr = unsafe.Pointer(nil)
|
||||||
|
}
|
||||||
|
|
||||||
|
ecode := C.git_blob_create_frombuffer(&id, repo.ptr, ptr, C.size_t(len(data)))
|
||||||
if ecode < 0 {
|
if ecode < 0 {
|
||||||
return nil, MakeGitError(ecode)
|
return nil, MakeGitError(ecode)
|
||||||
}
|
}
|
||||||
return newOidFromC(&oid), nil
|
return newOidFromC(&id), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
type BlobChunkCallback func(maxLen int) ([]byte, error)
|
type BlobChunkCallback func(maxLen int) ([]byte, error)
|
||||||
|
|
Loading…
Reference in New Issue