From 6dc942bc197038fd809e259ab2d8f1c0397d9823 Mon Sep 17 00:00:00 2001 From: Vasiliy Tolstov Date: Thu, 13 Feb 2020 14:57:21 +0300 Subject: [PATCH] client/grpc: fix panic on invalid message (#1191) * client/grpc: fix panic on invalid message * travis: disable lint and race for now Signed-off-by: Vasiliy Tolstov --- .travis.yml | 4 ++-- client/grpc/codec.go | 16 +++++++++++----- 2 files changed, 13 insertions(+), 7 deletions(-) diff --git a/.travis.yml b/.travis.yml index d26a9c52..8f880e90 100644 --- a/.travis.yml +++ b/.travis.yml @@ -6,8 +6,8 @@ env: before_script: - go install github.com/golangci/golangci-lint/cmd/golangci-lint script: - - golangci-lint run || true - - go test -v -race ./... || true + # - golangci-lint run || true + # - go test -v -race ./... || true - go test -v ./... notifications: slack: diff --git a/client/grpc/codec.go b/client/grpc/codec.go index 4b224a71..ff377690 100644 --- a/client/grpc/codec.go +++ b/client/grpc/codec.go @@ -69,15 +69,21 @@ func (w wrapCodec) Unmarshal(data []byte, v interface{}) error { } func (protoCodec) Marshal(v interface{}) ([]byte, error) { - b, ok := v.(*bytes.Frame) - if ok { - return b.Data, nil + switch m := v.(type) { + case *bytes.Frame: + return m.Data, nil + case proto.Message: + return proto.Marshal(m) } - return proto.Marshal(v.(proto.Message)) + return nil, fmt.Errorf("failed to marshal: %v is not type of *bytes.Frame or proto.Message", v) } func (protoCodec) Unmarshal(data []byte, v interface{}) error { - return proto.Unmarshal(data, v.(proto.Message)) + m, ok := v.(proto.Message) + if !ok { + return fmt.Errorf("failed to unmarshal: %v is not type of proto.Message", v) + } + return proto.Unmarshal(data, m) } func (protoCodec) Name() string {