summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarlos Martín Nieto <[email protected]>2014-08-25 15:44:01 +0200
committerCarlos Martín Nieto <[email protected]>2014-08-25 15:44:01 +0200
commit106ebe2fc4e856d9217e05d3cfc970d8aac4e190 (patch)
treed4f6a283d03c88b116346e1a7f5db9d57523bf8e
parent91fd186186b8e8c8169c79678838ce8114bb89f3 (diff)
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.
-rw-r--r--blob.go15
1 files 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)