Skip to content

fix(transport): clamp FibonacciBackoff state at max to avoid u64 overflow - #770

Merged
wboayue merged 2 commits into
wboayue:mainfrom
tradatious:fibonacci-overflow
Sep 1, 2026
Merged

fix(transport): clamp FibonacciBackoff state at max to avoid u64 overflow#770
wboayue merged 2 commits into
wboayue:mainfrom
tradatious:fibonacci-overflow

Conversation

@tradatious

Copy link
Copy Markdown
Contributor

The fix for PR #763 exposed an issue with next_delay() that I didn't notice at the time.

tradatious and others added 2 commits August 28, 2026 23:12
…flow

`next_delay()` capped only the returned delay; the internal state kept
growing as a raw Fibonacci sequence, which overflows u64 at call 93
(fib(94)). A reconnect loop with a large `max_reconnect_attempts` or
`reconnect_forever` reaches that during a long outage. With the
30 s `max` both call sites use, about 45 minutes of continuous outage.
In debug builds `next_delay()` would panic with `attempt to add with
overflow`, and in release the addition would wrap and the delays would
become nonsense.
- saturating_add covers max values above fib(93), where the raw sum
  overflows before the clamp engages
- clamp current at construction so max=0 keeps meaning no delay instead
  of a fixed 1s
@wboayue
wboayue merged commit 137a7c6 into wboayue:main Sep 1, 2026
4 checks passed
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.

2 participants