From 70f85211d97118331ba95c06ec3af26f0fb40aff Mon Sep 17 00:00:00 2001 From: Yuce Tekol Date: Thu, 15 Nov 2018 22:06:21 +0300 Subject: [PATCH] prevent panic in Bitmap.UnmarshalBinary when there is no data --- api.go | 4 ++++ fragment.go | 4 +--- roaring/roaring.go | 4 ++++ 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/api.go b/api.go index dcedc3d92..03b3bbcb0 100644 --- a/api.go +++ b/api.go @@ -268,6 +268,10 @@ func setUpImportOptions(opts ...ImportOption) (*ImportOptions, error) { // of the rows in this shard of this field concatenated together in one long // bitmap. func (api *API) ImportRoaring(ctx context.Context, indexName, fieldName string, shard uint64, remote bool, data []byte, opts ...ImportOption) (err error) { + if len(data) == 0 { + return errors.New("no data to import") + } + if err = api.validate(apiField); err != nil { return errors.Wrap(err, "validating api method") } diff --git a/fragment.go b/fragment.go index dd1d874de..359628ab5 100644 --- a/fragment.go +++ b/fragment.go @@ -25,6 +25,7 @@ import ( "hash" "io" "io/ioutil" + "math" "os" "sort" "sync" @@ -33,9 +34,6 @@ import ( "unsafe" "github.com/cespare/xxhash" - - "math" - "github.com/gogo/protobuf/proto" "github.com/pilosa/pilosa/internal" "github.com/pilosa/pilosa/pql" diff --git a/roaring/roaring.go b/roaring/roaring.go index ed7be6be1..ba258526f 100644 --- a/roaring/roaring.go +++ b/roaring/roaring.go @@ -3465,6 +3465,10 @@ func readOfficialHeader(buf []byte) (size uint32, containerTyper func(index uint // UnmarshalBinary decodes b from a binary-encoded byte slice. data can be in // either official roaring format or Pilosa's roaring format. func (b *Bitmap) UnmarshalBinary(data []byte) error { + if data == nil { + // Nothing to unmarshal + return nil + } fileMagic := uint32(binary.LittleEndian.Uint16(data[0:2])) if fileMagic == magicNumber { // if pilosa roaring return errors.Wrap(b.unmarshalPilosaRoaring(data), "unmarshaling as pilosa roaring")