From 676a0de58d3d7c508b0eeeff192d2095a46f7382 Mon Sep 17 00:00:00 2001
From: obscuren <geffobscura@gmail.com>
Date: Mon, 9 Mar 2015 17:28:12 +0100
Subject: Max size JSON data. Closes #418

---
 rpc/http/server.go | 8 ++++++++
 1 file changed, 8 insertions(+)

(limited to 'rpc/http')

diff --git a/rpc/http/server.go b/rpc/http/server.go
index 452b7c9af..d8f0157f1 100644
--- a/rpc/http/server.go
+++ b/rpc/http/server.go
@@ -29,6 +29,8 @@ import (
 var rpchttplogger = logger.NewLogger("RPC-HTTP")
 var JSON rpc.JsonWrapper
 
+const maxSizeReqLength = 1024 * 1024 // 1MB
+
 func NewRpcHttpServer(pipe *xeth.XEth, address string, port int) (*RpcHttpServer, error) {
 	sport := fmt.Sprintf("%s:%d", address, port)
 	l, err := net.Listen("tcp", sport)
@@ -92,6 +94,12 @@ func (s *RpcHttpServer) apiHandler(api *rpc.EthereumApi) http.Handler {
 
 		rpchttplogger.DebugDetailln("Handling request")
 
+		if req.ContentLength > maxSizeReqLength {
+			jsonerr := &rpc.RpcErrorObject{-32700, "Error: Request too large"}
+			JSON.Send(w, &rpc.RpcErrorResponse{JsonRpc: jsonrpcver, ID: nil, Error: jsonerr})
+			return
+		}
+
 		reqParsed, reqerr := JSON.ParseRequestBody(req)
 		if reqerr != nil {
 			jsonerr := &rpc.RpcErrorObject{-32700, "Error: Could not parse request"}
-- 
cgit v1.2.3