diff options
| author | Carlos Martín Nieto <[email protected]> | 2014-08-25 15:44:01 +0200 |
|---|---|---|
| committer | Carlos Martín Nieto <[email protected]> | 2014-08-25 15:44:01 +0200 |
| commit | 106ebe2fc4e856d9217e05d3cfc970d8aac4e190 (patch) | |
| tree | d4f6a283d03c88b116346e1a7f5db9d57523bf8e | |
| parent | 91fd186186b8e8c8169c79678838ce8114bb89f3 (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.go | 15 |
1 files changed, 12 insertions, 3 deletions
@@ -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) |
