From 1f62e5daed0a888f3a2080a40f5cd3d7553ec5f9 Mon Sep 17 00:00:00 2001 From: Cassandra Heart Date: Mon, 6 Oct 2025 03:59:51 -0500 Subject: [PATCH] fix: overflow arithmetic on frame number comparison --- node/consensus/time/app_time_reel.go | 3 ++- node/consensus/time/global_time_reel.go | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/node/consensus/time/app_time_reel.go b/node/consensus/time/app_time_reel.go index 43d3b44..e78cbcd 100644 --- a/node/consensus/time/app_time_reel.go +++ b/node/consensus/time/app_time_reel.go @@ -499,7 +499,8 @@ func (a *AppTimeReel) findNodeBySelector(selector []byte) *FrameNode { // evaluateForkChoice evaluates fork choice and updates head if necessary func (a *AppTimeReel) evaluateForkChoice(newNode *FrameNode) { if a.head == nil || - newNode.Frame.Header.FrameNumber-a.head.Frame.Header.FrameNumber > 360 { + (newNode.Frame.Header.FrameNumber > a.head.Frame.Header.FrameNumber && + newNode.Frame.Header.FrameNumber-a.head.Frame.Header.FrameNumber > 360) { oldHead := a.head a.head = newNode a.sendHeadEvent(newNode, oldHead) diff --git a/node/consensus/time/global_time_reel.go b/node/consensus/time/global_time_reel.go index f214f48..44b69c8 100644 --- a/node/consensus/time/global_time_reel.go +++ b/node/consensus/time/global_time_reel.go @@ -575,6 +575,7 @@ func (g *GlobalTimeReel) findNodeBySelector(selector []byte) *GlobalFrameNode { // evaluateForkChoice evaluates fork choice and updates head if necessary func (g *GlobalTimeReel) evaluateForkChoice(newNode *GlobalFrameNode) { if g.head == nil || (!g.archiveMode && + newNode.Frame.Header.FrameNumber > g.head.Frame.Header.FrameNumber && newNode.Frame.Header.FrameNumber-g.head.Frame.Header.FrameNumber > 360) { oldHead := g.head g.head = newNode