eth/protocols/eth: discard message before size check

Move msg.Discard defer ahead of the max message size check so oversized
messages are released instead of leaking when the handler returns early.
This commit is contained in:
Weixie Cui 2026-07-03 20:00:00 +08:00
parent 7aa7806c09
commit 421d4810d5
2 changed files with 2 additions and 2 deletions

View file

@ -224,10 +224,10 @@ func handleMessage(backend Backend, peer *Peer) error {
if err != nil { if err != nil {
return err return err
} }
defer msg.Discard()
if msg.Size > maxMessageSize { if msg.Size > maxMessageSize {
return fmt.Errorf("%w: %v > %v", errMsgTooLarge, msg.Size, maxMessageSize) return fmt.Errorf("%w: %v > %v", errMsgTooLarge, msg.Size, maxMessageSize)
} }
defer msg.Discard()
var handlers map[uint64]msgHandler var handlers map[uint64]msgHandler
switch peer.version { switch peer.version {

View file

@ -160,10 +160,10 @@ func HandleMessage(backend Backend, peer *Peer) error {
if err != nil { if err != nil {
return err return err
} }
defer msg.Discard()
if msg.Size > maxMessageSize { if msg.Size > maxMessageSize {
return fmt.Errorf("%w: %v > %v", errMsgTooLarge, msg.Size, maxMessageSize) return fmt.Errorf("%w: %v > %v", errMsgTooLarge, msg.Size, maxMessageSize)
} }
defer msg.Discard()
var handlers map[uint64]msgHandler var handlers map[uint64]msgHandler
switch peer.version { switch peer.version {