Skip to content

Fix unsigned underflow in Voter voting-delay timer computation - #806

Open
MarkRose wants to merge 1 commit into
sm0svx:masterfrom
MarkRose:fix-voter-unsigned-underflow-timer
Open

Fix unsigned underflow in Voter voting-delay timer computation#806
MarkRose wants to merge 1 commit into
sm0svx:masterfrom
MarkRose:fix-voter-unsigned-underflow-timer

Conversation

@MarkRose

Copy link
Copy Markdown
Contributor
  • In Voter::VotingDelay::init(), the voting delay timer was computed as
    max(votingDelay() - srx->sqlOpenDelay(), 0U). Since both operands are
    unsigned, a receiver whose sql-open-delay exceeds the voting delay
    causes the subtraction to wrap around to a huge unsigned value
    (~4.29e9) before max() ever gets a chance to clamp it. The timer is
    then armed for roughly 49 days instead of firing immediately,
    stalling squelch-open selection for that receiver. Fixed by computing
    the difference with signed arithmetic and clamping the result to a
    minimum of zero before it is passed to the unsigned-taking
    startTimer().

This PR also adds a unit test (VoterTest.cpp). It is auto-discovered and executed by the CTest suite proposed in #762 once that is merged; without that suite present the test file is inert and does not affect the build.

- In Voter::VotingDelay::init(), the voting delay timer was computed as
  max(votingDelay() - srx->sqlOpenDelay(), 0U). Since both operands are
  unsigned, a receiver whose sql-open-delay exceeds the voting delay
  causes the subtraction to wrap around to a huge unsigned value
  (~4.29e9) before max() ever gets a chance to clamp it. The timer is
  then armed for roughly 49 days instead of firing immediately,
  stalling squelch-open selection for that receiver. Fixed by computing
  the difference with signed arithmetic and clamping the result to a
  minimum of zero before it is passed to the unsigned-taking
  startTimer().
@MarkRose MarkRose closed this Jul 12, 2026
@MarkRose MarkRose reopened this Jul 12, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant