From bac33103df24dec5a5942a2bf83468aed3e45d9d Mon Sep 17 00:00:00 2001 From: Matthew Sykes Date: Wed, 7 Nov 2018 13:31:59 -0500 Subject: [PATCH] [FAB-12725] defensive treatment of info.FullMethod grpc interceptors are provided the target method as part of the grpc.StreamServerInfo. The documented format of the method is '/package.service/method/'. In order to prevent panics if that changes, modify the code to ensure the method split produces the expected number of substrings. Change-Id: I7de64c7cd2d8c61e5e517c2db4db5115c6961707 Signed-off-by: Matthew Sykes --- common/grpcmetrics/interceptor.go | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/common/grpcmetrics/interceptor.go b/common/grpcmetrics/interceptor.go index 80cdeb7925a..1e426fd4e75 100644 --- a/common/grpcmetrics/interceptor.go +++ b/common/grpcmetrics/interceptor.go @@ -74,8 +74,11 @@ func StreamServerInterceptor(sm *StreamMetrics) grpc.StreamServerInterceptor { func serviceMethod(fullMethod string) (service, method string) { normalizedMethod := strings.Replace(fullMethod, ".", "_", -1) - parts := strings.SplitN(normalizedMethod[1:], "/", 2) - return parts[0], parts[1] + parts := strings.SplitN(normalizedMethod, "/", -1) + if len(parts) != 3 { + return "unknown", "unknown" + } + return parts[1], parts[2] } type serverStream struct {