diff --git a/rpc/handler.go b/rpc/handler.go index 89fc78236c..a9ffdc7071 100644 --- a/rpc/handler.go +++ b/rpc/handler.go @@ -502,6 +502,10 @@ func (h *handler) handleCallMsg(ctx *callProc, msg *jsonrpcMessage) *jsonrpcMess // handleCall processes method calls. func (h *handler) handleCall(cp *callProc, msg *jsonrpcMessage) *jsonrpcMessage { + // Check method name length + if len(msg.Method) > maxMethodNameLength { + return msg.errorResponse(&invalidRequestError{fmt.Sprintf("method name too long: %d > %d", len(msg.Method), maxMethodNameLength)}) + } if msg.isSubscribe() { return h.handleSubscribe(cp, msg) } @@ -512,11 +516,6 @@ func (h *handler) handleCall(cp *callProc, msg *jsonrpcMessage) *jsonrpcMessage } return h.runMethod(cp.ctx, msg, h.unsubscribeCb, args) } - - // Check method name length - if len(msg.Method) > maxMethodNameLength { - return msg.errorResponse(&invalidRequestError{fmt.Sprintf("method name too long: %d > %d", len(msg.Method), maxMethodNameLength)}) - } callb, service, method := h.reg.callback(msg.Method) // If the method is not found, return an error. diff --git a/rpc/websocket_test.go b/rpc/websocket_test.go index 3b7d5a9da0..0661ffdb24 100644 --- a/rpc/websocket_test.go +++ b/rpc/websocket_test.go @@ -432,10 +432,10 @@ func TestWebsocketMethodNameLengthLimit(t *testing.T) { isSubscription: true, }, { - name: "subscription name too long", + name: "method name too long subscribe", method: string(make([]byte, maxMethodNameLength+1)) + "_subscribe", params: []interface{}{"newHeads"}, - expectedError: "subscription name too long", + expectedError: "method name too long", isSubscription: true, }, }