From bc2bbdc82f7feb76a38ae0d55ba9e8dc74947537 Mon Sep 17 00:00:00 2001 From: aoiasd <45024769+aoiasd@users.noreply.github.com> Date: Tue, 20 Aug 2024 17:36:55 +0800 Subject: [PATCH] enhance: Forbid access log print error message with line break (#34491) Signed-off-by: aoiasd --- internal/proxy/accesslog/benchmark_test.go | 4 ++++ internal/proxy/accesslog/info/grpc_info.go | 5 +++-- internal/proxy/accesslog/info/grpc_info_test.go | 5 +++++ internal/proxy/accesslog/info/restful_info.go | 3 ++- internal/proxy/accesslog/info/restful_info_test.go | 4 ++++ 5 files changed, 18 insertions(+), 3 deletions(-) diff --git a/internal/proxy/accesslog/benchmark_test.go b/internal/proxy/accesslog/benchmark_test.go index 93e3abd637..0b1f79e092 100644 --- a/internal/proxy/accesslog/benchmark_test.go +++ b/internal/proxy/accesslog/benchmark_test.go @@ -13,6 +13,7 @@ import ( "github.com/milvus-io/milvus/internal/proxy/accesslog/info" "github.com/milvus-io/milvus/internal/proxy/connection" "github.com/milvus-io/milvus/pkg/util" + "github.com/milvus-io/milvus/pkg/util/merr" "github.com/milvus-io/milvus/pkg/util/paramtable" ) @@ -31,6 +32,7 @@ func genTestData(clientInfo *commonpb.ClientInfo, identifier int64) []*TestData }, resp: &milvuspb.QueryResults{ CollectionName: "test1", + Status: merr.Status(merr.WrapErrParameterInvalid("testA", "testB", "stack: 1\n 2\n")), }, err: nil, }) @@ -42,6 +44,7 @@ func genTestData(clientInfo *commonpb.ClientInfo, identifier int64) []*TestData }, resp: &milvuspb.SearchResults{ CollectionName: "test2", + Status: merr.Status(nil), }, err: nil, }) @@ -52,6 +55,7 @@ func genTestData(clientInfo *commonpb.ClientInfo, identifier int64) []*TestData }, resp: &milvuspb.ConnectResponse{ Identifier: identifier, + Status: merr.Status(nil), }, err: nil, }) diff --git a/internal/proxy/accesslog/info/grpc_info.go b/internal/proxy/accesslog/info/grpc_info.go index b42a6c4c7d..6b061ea57b 100644 --- a/internal/proxy/accesslog/info/grpc_info.go +++ b/internal/proxy/accesslog/info/grpc_info.go @@ -20,6 +20,7 @@ import ( "context" "fmt" "path" + "strings" "time" "go.opentelemetry.io/otel/trace" @@ -202,11 +203,11 @@ func (i *GrpcAccessInfo) respStatus() *commonpb.Status { func (i *GrpcAccessInfo) ErrorMsg() string { if i.err != nil { - return i.err.Error() + return strings.ReplaceAll(i.err.Error(), "\n", "\\n") } if status := i.respStatus(); status != nil { - return status.GetReason() + return strings.ReplaceAll(status.GetReason(), "\n", "\\n") } return Unknown diff --git a/internal/proxy/accesslog/info/grpc_info_test.go b/internal/proxy/accesslog/info/grpc_info_test.go index 9d5de78543..e97312f518 100644 --- a/internal/proxy/accesslog/info/grpc_info_test.go +++ b/internal/proxy/accesslog/info/grpc_info_test.go @@ -98,6 +98,11 @@ func (s *GrpcAccessInfoSuite) TestErrorMsg() { result = Get(s.info, "$error_msg") s.Equal(merr.ErrChannelLack.Error(), result[0]) + // replace line breaks + s.info.resp = merr.Status(fmt.Errorf("test error. stack: 1:\n 2:\n 3:\n")) + result = Get(s.info, "$error_msg") + s.Equal("test error. stack: 1:\\n 2:\\n 3:\\n", result[0]) + s.info.err = status.Errorf(codes.Unavailable, "mock") result = Get(s.info, "$error_msg") s.Equal("rpc error: code = Unavailable desc = mock", result[0]) diff --git a/internal/proxy/accesslog/info/restful_info.go b/internal/proxy/accesslog/info/restful_info.go index 2f74f05ae2..87fe74f6b6 100644 --- a/internal/proxy/accesslog/info/restful_info.go +++ b/internal/proxy/accesslog/info/restful_info.go @@ -19,6 +19,7 @@ package info import ( "fmt" "net/http" + "strings" "time" "github.com/gin-gonic/gin" @@ -138,7 +139,7 @@ func (i *RestfulInfo) ErrorMsg() string { if !ok { return "" } - return fmt.Sprint(message) + return strings.ReplaceAll(message.(string), "\n", "\\n") } func (i *RestfulInfo) ErrorType() string { diff --git a/internal/proxy/accesslog/info/restful_info_test.go b/internal/proxy/accesslog/info/restful_info_test.go index c07099a1e7..a96776b7ca 100644 --- a/internal/proxy/accesslog/info/restful_info_test.go +++ b/internal/proxy/accesslog/info/restful_info_test.go @@ -129,6 +129,10 @@ func (s *RestfulAccessInfoSuite) TestErrorMsg() { s.info.params.Keys[ContextReturnMessage] = merr.ErrChannelLack.Error() result := Get(s.info, "$error_msg") s.Equal(merr.ErrChannelLack.Error(), result[0]) + + s.info.params.Keys[ContextReturnMessage] = "test error. stack: 1:\n 2:\n 3:\n" + result = Get(s.info, "$error_msg") + s.Equal("test error. stack: 1:\\n 2:\\n 3:\\n", result[0]) } func (s *RestfulAccessInfoSuite) TestDbName() {