forked from cerc-io/plugeth
p2p/discover/v5wire: reject packets smaller than 63 bytes (#25740)
This commit is contained in:
parent
b628d72766
commit
0c1888a367
@ -90,6 +90,10 @@ const (
|
||||
minVersion = 1
|
||||
sizeofMaskingIV = 16
|
||||
|
||||
// The minimum size of any Discovery v5 packet is 63 bytes.
|
||||
// Should reject packets smaller than minPacketSize.
|
||||
minPacketSize = 63
|
||||
|
||||
minMessageSize = 48 // this refers to data after static headers
|
||||
randomPacketMsgSize = 20
|
||||
)
|
||||
@ -415,10 +419,10 @@ func (c *Codec) encryptMessage(s *session, p Packet, head *Header, headerData []
|
||||
|
||||
// Decode decodes a discovery packet.
|
||||
func (c *Codec) Decode(input []byte, addr string) (src enode.ID, n *enode.Node, p Packet, err error) {
|
||||
// Unmask the static header.
|
||||
if len(input) < sizeofStaticPacketData {
|
||||
if len(input) < minPacketSize {
|
||||
return enode.ID{}, nil, nil, errTooShort
|
||||
}
|
||||
// Unmask the static header.
|
||||
var head Header
|
||||
copy(head.IV[:], input[:sizeofMaskingIV])
|
||||
mask := head.mask(c.localnode.ID())
|
||||
|
@ -274,7 +274,15 @@ func TestDecodeErrorsV5(t *testing.T) {
|
||||
net := newHandshakeTest()
|
||||
defer net.close()
|
||||
|
||||
net.nodeA.expectDecodeErr(t, errTooShort, []byte{})
|
||||
b := make([]byte, 0)
|
||||
net.nodeA.expectDecodeErr(t, errTooShort, b)
|
||||
|
||||
b = make([]byte, 62)
|
||||
net.nodeA.expectDecodeErr(t, errTooShort, b)
|
||||
|
||||
b = make([]byte, 63)
|
||||
net.nodeA.expectDecodeErr(t, errInvalidHeader, b)
|
||||
|
||||
// TODO some more tests would be nice :)
|
||||
// - check invalid authdata sizes
|
||||
// - check invalid handshake data sizes
|
||||
|
Loading…
Reference in New Issue
Block a user