diff --git a/channels/chan_sip.c b/channels/chan_sip.c index 5b5ad93..ba085af 100644 --- a/channels/chan_sip.c +++ b/channels/chan_sip.c @@ -4054,6 +4054,14 @@ static int retrans_pkt(const void *data) /* For non-invites, a maximum of 4 secs */ siptimer_a = pkt->timer_t1 * pkt->timer_a; /* Double each time */ + if (siptimer_a < pkt->timer_t1 * (pkt->timer_a / 2)) { + /* + * We had an integer overflow. + * Calculate previous timeout time instead. + */ + pkt->timer_a = pkt->timer_a / 2; + siptimer_a = pkt->timer_t1 * pkt->timer_a; + } if (pkt->method != SIP_INVITE && siptimer_a > 4000) { siptimer_a = 4000; }