From e914910b02d3f8e1a77be95e7c4c1365d0262213 Mon Sep 17 00:00:00 2001 From: testinginprod <98415576+testinginprod@users.noreply.github.com> Date: Thu, 3 Oct 2024 13:26:58 +0200 Subject: [PATCH] fix(cometbft/grpc): gRPC path parsing (#22081) --- server/v2/api/grpc/server.go | 2 ++ server/v2/cometbft/abci.go | 9 +++++---- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/server/v2/api/grpc/server.go b/server/v2/api/grpc/server.go index 3fb531f2ec1b..7b70363f6f16 100644 --- a/server/v2/api/grpc/server.go +++ b/server/v2/api/grpc/server.go @@ -100,6 +100,8 @@ func makeUnknownServiceHandler(handlers map[string]appmodulev2.Handler, querier if err != nil { return fmt.Errorf("failed to get registry: %w", err) } + + method = strings.TrimPrefix(method, "/") fullName := protoreflect.FullName(strings.ReplaceAll(method, "/", ".")) // get descriptor from the invoke method desc, err := registry.FindDescriptorByName(fullName) diff --git a/server/v2/cometbft/abci.go b/server/v2/cometbft/abci.go index 32ad7c6c9ca6..5d0b6558410f 100644 --- a/server/v2/cometbft/abci.go +++ b/server/v2/cometbft/abci.go @@ -245,12 +245,13 @@ func (c *Consensus[T]) maybeRunGRPCQuery(ctx context.Context, req *abci.QueryReq return nil, false, err } + path := strings.TrimPrefix(req.Path, "/") + pathFullName := protoreflect.FullName(strings.ReplaceAll(path, "/", ".")) + // in order to check if it's a gRPC query we ensure that there's a descriptor // for the path, if such descriptor exists, and it is a method descriptor // then we assume this is a gRPC query. - fullName := protoreflect.FullName(strings.ReplaceAll(req.Path, "/", ".")) - - desc, err := registry.FindDescriptorByName(fullName) + desc, err := registry.FindDescriptorByName(pathFullName) if err != nil { return nil, false, err } @@ -262,7 +263,7 @@ func (c *Consensus[T]) maybeRunGRPCQuery(ctx context.Context, req *abci.QueryReq handler, found := c.queryHandlersMap[string(md.Input().FullName())] if !found { - return nil, true, fmt.Errorf("no query handler found for %s", fullName) + return nil, true, fmt.Errorf("no query handler found for %s", req.Path) } protoRequest := handler.MakeMsg() err = gogoproto.Unmarshal(req.Data, protoRequest) // TODO: use codec