diff --git a/degesch.c b/degesch.c index 99b68b8..694e79f 100644 --- a/degesch.c +++ b/degesch.c @@ -3669,15 +3669,18 @@ static int64_t irc_get_reconnect_delay (struct server *s) { int64_t delay = get_config_integer (s->config, "reconnect_delay"); - int64_t delay_factor = get_config_integer (s->ctx->config.root, "behaviour.reconnect_delay_growing"); for (unsigned i = 0; i < s->reconnect_attempt; i++) + { + if (delay_factor && delay > INT64_MAX / delay_factor) + break; delay *= delay_factor; + } int64_t delay_max = get_config_integer (s->ctx->config.root, "behaviour.reconnect_delay_max"); - return (delay > delay_max || delay < 0) ? delay_max : delay; + return MIN (delay, delay_max); } static void