From 429828cd9205a8db0024652fd9da96cfbdaeae86 Mon Sep 17 00:00:00 2001
From: Felix Lange <fjl@twurst.com>
Date: Wed, 4 Mar 2015 16:39:04 +0100
Subject: p2p: reject messages that cannot be written as simple RLPx frames

Until chunked frames are implemented we cannot send messages
with a size overflowing uint24.
---
 p2p/rlpx.go | 5 +++++
 1 file changed, 5 insertions(+)

(limited to 'p2p')

diff --git a/p2p/rlpx.go b/p2p/rlpx.go
index 166bbb5e6..6b533e275 100644
--- a/p2p/rlpx.go
+++ b/p2p/rlpx.go
@@ -19,6 +19,8 @@ var (
 
 	// sixteen zero bytes
 	zero16 = make([]byte, 16)
+
+	maxUint24 = ^uint32(0) >> 8
 )
 
 // rlpxFrameRW implements a simplified version of RLPx framing.
@@ -64,6 +66,9 @@ func (rw *rlpxFrameRW) WriteMsg(msg Msg) error {
 	// write header
 	headbuf := make([]byte, 32)
 	fsize := uint32(len(ptype)) + msg.Size
+	if fsize > maxUint24 {
+		return errors.New("message size overflows uint24")
+	}
 	putInt24(fsize, headbuf) // TODO: check overflow
 	copy(headbuf[3:], zeroHeader)
 	rw.enc.XORKeyStream(headbuf[:16], headbuf[:16]) // first half is now encrypted
-- 
cgit