From 106ebe2fc4e856d9217e05d3cfc970d8aac4e190 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Carlos=20Mart=C3=ADn=20Nieto?= Date: Mon, 25 Aug 2014 15:44:01 +0200 Subject: [PATCH] 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. --- blob.go | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/blob.go b/blob.go index 4277127..58258fd 100644 --- a/blob.go +++ b/blob.go @@ -36,12 +36,21 @@ func (v *Blob) Contents() []byte { func (repo *Repository) CreateBlobFromBuffer(data []byte) (*Oid, error) { runtime.LockOSThread() 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 { return nil, MakeGitError(ecode) } - return newOidFromC(&oid), nil + return newOidFromC(&id), nil } type BlobChunkCallback func(maxLen int) ([]byte, error)