From 3e2e81464842f2532ab11628511c1ac96a84d820 Mon Sep 17 00:00:00 2001 From: Ggicci Date: Mon, 7 Jan 2019 01:47:28 +0800 Subject: [PATCH] fix: don't apply nil CallOption and ConnOpt --- jsonrpc2.go | 13 +++++++++++-- jsonrpc2_test.go | 4 ++-- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/jsonrpc2.go b/jsonrpc2.go index 3e0763d..478a768 100644 --- a/jsonrpc2.go +++ b/jsonrpc2.go @@ -315,14 +315,17 @@ var ErrClosed = errors.New("jsonrpc2: connection is closed") // // NewClient consumes conn, so you should call Close on the returned // client not on the given conn. -func NewConn(ctx context.Context, stream ObjectStream, h Handler, opt ...ConnOpt) *Conn { +func NewConn(ctx context.Context, stream ObjectStream, h Handler, opts ...ConnOpt) *Conn { c := &Conn{ stream: stream, h: h, pending: map[ID]*call{}, disconnect: make(chan struct{}), } - for _, opt := range opt { + for _, opt := range opts { + if opt == nil { + continue + } opt(c) } go c.readMessages(ctx) @@ -415,6 +418,9 @@ func (c *Conn) Call(ctx context.Context, method string, params, result interface return err } for _, opt := range opts { + if opt == nil { + continue + } if err := opt.apply(req); err != nil { return err } @@ -458,6 +464,9 @@ func (c *Conn) Notify(ctx context.Context, method string, params interface{}, op return err } for _, opt := range opts { + if opt == nil { + continue + } if err := opt.apply(req); err != nil { return err } diff --git a/jsonrpc2_test.go b/jsonrpc2_test.go index 795f5d3..f6eb430 100644 --- a/jsonrpc2_test.go +++ b/jsonrpc2_test.go @@ -409,12 +409,12 @@ func TestConn_Close_waitingForResponse(t *testing.T) { <-done } -func serve(ctx context.Context, lis net.Listener, h jsonrpc2.Handler, opt ...jsonrpc2.ConnOpt) error { +func serve(ctx context.Context, lis net.Listener, h jsonrpc2.Handler, opts ...jsonrpc2.ConnOpt) error { for { conn, err := lis.Accept() if err != nil { return err } - jsonrpc2.NewConn(ctx, jsonrpc2.NewBufferedStream(conn, jsonrpc2.VarintObjectCodec{}), h, opt...) + jsonrpc2.NewConn(ctx, jsonrpc2.NewBufferedStream(conn, jsonrpc2.VarintObjectCodec{}), h, opts...) } }