From 5e83ef96c83144352493e57f0df7dc2fbbf385cc Mon Sep 17 00:00:00 2001 From: Silas Davis <silas@monax.io> Date: Thu, 8 Mar 2018 12:59:58 +0000 Subject: [PATCH] Protect websocket from panic Signed-off-by: Silas Davis <silas@monax.io> --- rpc/v0/websocket_service.go | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/rpc/v0/websocket_service.go b/rpc/v0/websocket_service.go index 4c007268..17b84e44 100644 --- a/rpc/v0/websocket_service.go +++ b/rpc/v0/websocket_service.go @@ -21,6 +21,7 @@ import ( "github.com/hyperledger/burrow/event" "github.com/hyperledger/burrow/logging" + "github.com/hyperledger/burrow/logging/structure" logging_types "github.com/hyperledger/burrow/logging/types" "github.com/hyperledger/burrow/rpc" "github.com/hyperledger/burrow/rpc/v0/server" @@ -51,6 +52,15 @@ func NewWebsocketService(codec rpc.Codec, service rpc.Service, logger logging_ty // Process a request. func (ws *WebsocketService) Process(msg []byte, session *server.WSSession) { + defer func() { + if r := recover(); r != nil { + err := fmt.Errorf("panic in WebsocketService.Process(): %v", r) + logging.InfoMsg(ws.logger, "Panic in WebsocketService.Process()", structure.ErrorKey, err) + if !session.Closed() { + ws.writeError(err.Error(), "", rpc.INTERNAL_ERROR, session) + } + } + }() // Create new request object and unmarshal. req := &rpc.RPCRequest{} errU := json.Unmarshal(msg, req) -- GitLab