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