From fb4822f22ca2fcf585f0624d86f84e97b1b6ad92 Mon Sep 17 00:00:00 2001 From: Nia Weiss Date: Wed, 9 Sep 2020 09:11:21 -0400 Subject: [PATCH] fix inspect panic from incorrect handling of the many types of empty argument --- server/grpc.go | 31 ++++++++++++++++++------------- 1 file changed, 18 insertions(+), 13 deletions(-) diff --git a/server/grpc.go b/server/grpc.go index 4baf520b8..acbd95e0e 100644 --- a/server/grpc.go +++ b/server/grpc.go @@ -298,9 +298,13 @@ func (h *GRPCHandler) Inspect(req *pb.InspectRequest, stream pb.Pilosa_InspectSe offset := req.Offset if !index.Keys() { - ints, ok := req.Columns.Type.(*pb.IdsOrKeys_Ids) - if !ok { - return errors.New("invalid int columns") + var cols []uint64 + if req.Columns != nil { + ints, ok := req.Columns.Type.(*pb.IdsOrKeys_Ids) + if !ok { + return errors.New("invalid int columns") + } + cols = ints.Ids.Vals } ci := []*pb.ColumnInfo{ {Name: "_id", Datatype: "uint64"}, @@ -311,7 +315,6 @@ func (h *GRPCHandler) Inspect(req *pb.InspectRequest, stream pb.Pilosa_InspectSe // If Columns is empty, then get the _exists list (via All()), // from the index and loop over that instead. - cols := ints.Ids.Vals if len(cols) > 0 { // Apply limit/offset to the provided columns. if int(offset) >= len(cols) { @@ -591,15 +594,17 @@ func (h *GRPCHandler) Inspect(req *pb.InspectRequest, stream pb.Pilosa_InspectSe } else { var cols []string - switch keys := req.Columns.Type.(type) { - case *pb.IdsOrKeys_Ids: - // The default behavior (in api/client/grpc.go) is to - // send an empty set of Ids even if the index supports - // keys, so in that case we just need to ignore it. - case *pb.IdsOrKeys_Keys: - cols = keys.Keys.Vals - default: - return errToStatusError(errors.New("invalid key columns")) + if req.Columns != nil { + switch keys := req.Columns.Type.(type) { + case *pb.IdsOrKeys_Ids: + // The default behavior (in api/client/grpc.go) is to + // send an empty set of Ids even if the index supports + // keys, so in that case we just need to ignore it. + case *pb.IdsOrKeys_Keys: + cols = keys.Keys.Vals + default: + return errToStatusError(errors.New("invalid key columns")) + } } forceSend := false