From 421d4810d5227985c9a6f3d675074f5dbe615ccd Mon Sep 17 00:00:00 2001 From: Weixie Cui Date: Fri, 3 Jul 2026 20:00:00 +0800 Subject: [PATCH] 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. --- eth/protocols/eth/handler.go | 2 +- eth/protocols/snap/handler.go | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/eth/protocols/eth/handler.go b/eth/protocols/eth/handler.go index 154b75130c..325ffa0738 100644 --- a/eth/protocols/eth/handler.go +++ b/eth/protocols/eth/handler.go @@ -224,10 +224,10 @@ func handleMessage(backend Backend, peer *Peer) error { if err != nil { return err } + defer msg.Discard() if msg.Size > maxMessageSize { return fmt.Errorf("%w: %v > %v", errMsgTooLarge, msg.Size, maxMessageSize) } - defer msg.Discard() var handlers map[uint64]msgHandler switch peer.version { diff --git a/eth/protocols/snap/handler.go b/eth/protocols/snap/handler.go index ff5564ca65..6c2ff6149f 100644 --- a/eth/protocols/snap/handler.go +++ b/eth/protocols/snap/handler.go @@ -160,10 +160,10 @@ func HandleMessage(backend Backend, peer *Peer) error { if err != nil { return err } + defer msg.Discard() if msg.Size > maxMessageSize { return fmt.Errorf("%w: %v > %v", errMsgTooLarge, msg.Size, maxMessageSize) } - defer msg.Discard() var handlers map[uint64]msgHandler switch peer.version {