Skip to content

Commit 4680897

Browse files
committed
[Rest] Clamp non-finite Retry-After values
1 parent efcfb44 commit 4680897

2 files changed

Lines changed: 26 additions & 0 deletions

File tree

atlassian/rest_client.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import logging
44
import random
5+
import math
56
import time
67
from datetime import datetime, timezone
78
from email.utils import parsedate_to_datetime
@@ -324,6 +325,10 @@ def _parse_retry_after_header(self, header_value: Optional[str]) -> Optional[flo
324325
if delay_seconds is None:
325326
return None
326327

328+
if not math.isfinite(delay_seconds):
329+
log.debug("Retry-After value is not finite; clamping to max_backoff_seconds")
330+
delay_seconds = float(self.max_backoff_seconds)
331+
327332
delay_seconds = max(0.0, delay_seconds)
328333
if delay_seconds > self.max_backoff_seconds:
329334
log.debug(

tests/test_rest_client.py

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -395,6 +395,27 @@ def fake_sleep(delay):
395395
assert handler(response) is True
396396
assert captured["delay"] == 5
397397

398+
def test_retry_handler_clamps_non_finite_retry_after(self, monkeypatch):
399+
"""Ensure non-finite Retry-After headers are clamped to max_backoff_seconds."""
400+
captured = {}
401+
402+
def fake_sleep(delay):
403+
captured["delay"] = delay
404+
405+
monkeypatch.setattr("atlassian.rest_client.time.sleep", fake_sleep)
406+
407+
api = AtlassianRestAPI(
408+
url=f"{mockup_server()}/test",
409+
retry_with_header=True,
410+
max_backoff_seconds=7,
411+
)
412+
413+
handler = api._retry_handler()
414+
response = SimpleNamespace(headers={"Retry-After": "1e309"}, status_code=429)
415+
416+
assert handler(response) is True
417+
assert captured["delay"] == 7
418+
398419
def test_retry_handler_parses_http_date(self, monkeypatch):
399420
"""Ensure HTTP-date Retry-After headers are converted to delta seconds."""
400421
captured = {}

0 commit comments

Comments
 (0)